xiaozhen12 发表于 2015-3-4 16:55:08

宏指令自由协议问题

MT6070ih屏通过RS485与第三方设备通信,第三方设备连续不停发送数据,触摸屏只是单纯负责接收数据,该设备发送数据格式根据实际情况会有所不同,比如正常的情况下是发送20个字节,有起始符和结束符,异常情况下,发送8个字节,也有起始符和结束符,下面是之前的程序,数据的接收开始还是准的,但如果碰到异常情况下,就不正确了,把RS485通讯线断开重新连接,数据又可以正常显示,但随着通讯时间长了,接收到的数据又不准确了,触摸屏的通讯inport指令功能还是比较弱,
哪位网友有做过这方面类似的通讯,麻烦回复下,谢谢!
macro_command main()
unsigned char rcvbuffer,char1,data,result
unsigned char str1,str2
short rcvdata
short receive_len,i,j,k,temp
float floatresult
bool flat=false
i=0
INPORT(rcvbuffer, "Free Protocol", 1, receive_len)
while (receive_len>=1)
//开始接收数据
if rcvbuffer==0x3C and not flat then
   i=0
   flat=true
   FILL(rcvdata, 0, 25)
   SetData(rcvdata, "Local HMI", LW, 0, 25)
end if

if flat then
   rcvdata=rcvbuffer
   i=i+1
end if

//数据接收结束
if rcvbuffer==0x0B and flat then
   flat=false
   SetData(rcvdata, "Local HMI", LW, 0, i)
//数据处理
   for j=5 to 12
       if rcvdata>=0x41 and rcvdata<=0x46 then
          rcvdata=rcvdata-55   
       else if rcvdata>=0x30 and rcvdata<=0x39 then
          rcvdata=rcvdata-48
       else
          HEX2ASCII(rcvdata, str1, 4)
          ASCII2HEX(str1, char1, 1)
          rcvdata=rcvdata-char1*16            
       end if
   next
   
   temp=rcvdata
   rcvdata=rcvdata
   rcvdata=temp
   
   temp=rcvdata
   rcvdata=rcvdata
   rcvdata=temp
   
   temp=rcvdata
   rcvdata=rcvdata
   rcvdata=temp
   
   temp=rcvdata
   rcvdata=rcvdata
   rcvdata=temp
   
   for k=5 to 12
       short a,b,c
       a=4*(k-5)
       b=a+3
       c=k-5
       HEX2ASCII(rcvdata, str2, 4)
       ASCII2HEX(str2, data, 1)   
   next
   
   result=data*16+data
   result=data*16+data
   result=data*16+data
   result=data*16+data
   SetData(result, "Local HMI", LW, 40, 4)
   GetData(floatresult, "Local HMI", LW, 40, 1)
   floatresult=floatresult-273
   SetData(floatresult, "Local HMI", LW, 40, 1)
   break
end if
INPORT(rcvbuffer, "Free Protocol", 1, receive_len)
wend
PURGE(1)
end macro_command
页: [1]
查看完整版本: 宏指令自由协议问题