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