上位機用的PYTHON網上抄的程序,用于將G指令傳遞給單片機
目前存在的問題如下:
1、單片機有時會在一行指令中少收一兩個字符(小概率),為什么會丟字符?這個沒查到原因,求指教
2、單片機返回給PC端用于交互的字符有時上位機也收不到,可能原因是什么?
下面附串口接收代碼:
- if(RI)
- {
- if(recf==1)//接收g指令
- {
- recbuf[compos][recpos]=SBUF;//數據存入緩存
- recpos++;
- if(SBUF=='\n') //如果收到的是\n,說明接收完一行
- {
- if(recbuf[compos][0]==(recpos-1))//接收一行的第一個字符是本行字符數,此處確認接收和發送數目相等,-1是首字符記錄個數
- {
- SBUF='A';//收完一行返回一個A
- while(!TI)
- TI=0;
- recpos=0; //接收完一行,將接收位置重置,接收數組+1
- compos++;
- if(compos==10)//已經接收10行,暫停接收,置位處理數據flag
- {
- recf=0;//暫停接收
- wrif=1;//開始執行
- }
- }
- else //接收發送數目不一致,通知上位機重新發送
- {
- SBUF='E';
- while(!TI)
- TI=0;
- recpos=0;//準備重新接收
- }
- }
- if(SBUF=='
- 下面是Python上位機程序:
- import serial #導入模塊
- <div class="blockcode"><blockquote>f1=open('1.gcode','r') #輸入.mmg刀具路徑
- data1=f1.readlines()
- f1.close()
- try:
- #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
- portx="COM7"
- #波特率,標準值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
- bps=9600#115200
- #超時設置,None:永遠等待操作,0為立即返回請求結果,其他值為等待超時時間(單位為秒)
- timex=5
- # 打開串口,并得到串口對象
- ser=serial.Serial(portx,bps,timeout=timex)
- # 寫數據到串口
- j=0
- for i in range(len(data1)):
- j=j+1
- print(data1[i],end="")#打印數據到屏幕,便于觀察
- ser.write(chr(len(data1[i])).encode('UTF-8'))#寫本行長度到串口
- result=ser.write(data1[i].encode('UTF-8'))#寫本行數據到串口
- print(result)#打印本行字符數,包括\n
- msg=ser.read(1)#讀取串口,單片機返回值
- print(msg)
- while(msg==b'E'):#發送與接收不一致,重新發送本行
- ser.write(chr(len(data1[i])).encode('UTF-8'))
- ser.write(data1[i].encode('UTF-8'))
- msg=ser.read(1)
- print(msg)
- while(msg!=b'A'):#等待一行發送完成得到回應A
- msg=ser.read(1)
- print(msg)
- if(j ==10 ):#發送完10行,等待單片機處理完畢,返回B再繼續發送下10行
- print("%d條代碼發送完,正在等待處理"%(i+1))
- while(msg!=b'B'):#發完10行等待再次發送的指令B
- msg=ser.read(1)
- j=0
-
- ser.write('
- 下面是傳送情況,不一定卡在什么位置,程序有確定性找不到原因,求教大神們
- <img src="http://www.zg4o1577.cn/bbs/forum.php?mod=image&aid=269927&size=300x300&key=85739febd9026e1e&nocache=yes&type=fixnone" aid="attachimg_269927" alt="" border="0" width="300"><img src="http://www.zg4o1577.cn/bbs/forum.php?mod=image&aid=269928&size=300x300&key=e3e4704a245fc88b&nocache=yes&type=fixnone" aid="attachimg_269928" alt="" border="0" width="300">
- )//傳送結束標志
- {
- recbuf[compos][recpos]=0;
- recf=0;//暫停接收
- wrif=1;//開始執行
- }
- RI=0;
- }
- }
復制代碼
下面是Python上位機程序:
import serial #導入模塊
[ DISCUZ_CODE_1 ]
下面是傳送情況,不一定卡在什么位置,程序有確定性找不到原因,求教大神們
1.jpg (53.07 KB, 下載次數: 93)
下載附件
2021-5-7 23:34 上傳
2.jpg (66.29 KB, 下載次數: 84)
下載附件
2021-5-7 23:34 上傳
.encode('UTF-8'))#寫完完畢,發結束信號
print("傳送完成完畢")
ser.close()#關閉串口
except Exception as e:
print("---異常---:",e)
下面是傳送情況,不一定卡在什么位置,程序有確定性找不到原因,求教大神們
)//傳送結束標志
{
recbuf[compos][recpos]=0;
recf=0;//暫停接收
wrif=1;//開始執行
}
RI=0;
}
}
下面是Python上位機程序:
import serial #導入模塊
[ DISCUZ_CODE_1 ]
下面是傳送情況,不一定卡在什么位置,程序有確定性找不到原因,求教大神們
|