上位机用的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.51hei.com/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.51hei.com/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 ]
下面是传送情况,不一定卡在什么位置,程序有确定性找不到原因,求教大神们
.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 ]
下面是传送情况,不一定卡在什么位置,程序有确定性找不到原因,求教大神们
|