宏指令自由协议问题
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]