主题:[讨论]VFP mscomm控件,收到的数据比发送的数据长度要长。
我在编写一个从一台电压表读取数据的小程序该数据的格式是"0FFH开头6个ASCII字符两个状态字节0DH节尾"十个字节组成。我使用的是VFP9.0的mscomm控件。在中间发现一些问题和达人们讨论一下。我用一根串口线连接2口3口完成串口的单机调试。我的程序是定义两个时间控件,一个mscomm控件,一个控件负责发送数据,一个时间控件不停的读取数据。接收程序如下
buf = TRANSFORM(thisform.olecontrol1.input) &接收到的数据成为字符型数据,第个数据的长度为2
thisform.text2.Value = STR(LEN(buf)) &text2显示接收到的原始数据的长度
if LEN(buf) => 20 THEN
wz = AT("FF",buf)
wz1 = AT("0D",buf)
x = SUBSTR(buf,wz,20)
buf = SUBSTR(buf,wz1+1)
thisform.edit2.Value = x + thisform.edit2.Value
thisform.text1.Value = len(thisform.edit2.value) & text1 显示经过分析的数据长度
endif
通过比较text1和text2的数据不同可以判断是否成功将读取的数据分成我所需要的若干段数据。
发送数据的代码如下
z = z +1
thisform.olecontrol1.output = CREATEBINARY(CHR(255))
FOR xu = 1 TO 8
thisform.olecontrol1.output = CREATEBINARY(CHR(xu))
endfor
thisform.olecontrol1.output = CREATEBINARY(CHR(13))
thisform.text3.Value = STR(z)
IF z => 100
z = 0
thisform.timer2.Enabled = .f.
endif
通过上面该控件可以不停的对串口发送长度为1000的数据即z的值为100。
如果我接收到的数据长度text1和text2的值为2000的话那么该数据传输就是准确的了。
但是实际情况是我接收的数据经常会出现当时z为100时,text1与text2的值不一致。
同时,会出现接收到的数据要比发送的数据整整多出几组。或少出几组的情况。
这样的情况能避免么?是什么原因造成的呢?我的代码有什么问题请大家指正。
buf = TRANSFORM(thisform.olecontrol1.input) &接收到的数据成为字符型数据,第个数据的长度为2
thisform.text2.Value = STR(LEN(buf)) &text2显示接收到的原始数据的长度
if LEN(buf) => 20 THEN
wz = AT("FF",buf)
wz1 = AT("0D",buf)
x = SUBSTR(buf,wz,20)
buf = SUBSTR(buf,wz1+1)
thisform.edit2.Value = x + thisform.edit2.Value
thisform.text1.Value = len(thisform.edit2.value) & text1 显示经过分析的数据长度
endif
通过比较text1和text2的数据不同可以判断是否成功将读取的数据分成我所需要的若干段数据。
发送数据的代码如下
z = z +1
thisform.olecontrol1.output = CREATEBINARY(CHR(255))
FOR xu = 1 TO 8
thisform.olecontrol1.output = CREATEBINARY(CHR(xu))
endfor
thisform.olecontrol1.output = CREATEBINARY(CHR(13))
thisform.text3.Value = STR(z)
IF z => 100
z = 0
thisform.timer2.Enabled = .f.
endif
通过上面该控件可以不停的对串口发送长度为1000的数据即z的值为100。
如果我接收到的数据长度text1和text2的值为2000的话那么该数据传输就是准确的了。
但是实际情况是我接收的数据经常会出现当时z为100时,text1与text2的值不一致。
同时,会出现接收到的数据要比发送的数据整整多出几组。或少出几组的情况。
这样的情况能避免么?是什么原因造成的呢?我的代码有什么问题请大家指正。