VFP mscomm控件会发生接收到的数据比发送的数据多

我在编写一个从一台电压表读取数据的小程序该数据的格式是"0FFH开头6个ASCII字符两个状态字节0DH节尾"十个字节组成。我使用的是VFP9.0的mscomm控件。在中间发现一些问题和达人们讨论一下。我用一根串口线连接2口3口完成串口的单机调试。我的程序是定义两个时间控件,一个mscomm控件,一个控件负责发送数据,一个时间控件不停的读取数据。

通过上面该控件可以不停的对串口发送长度为1000的数据即z的值为100。
如果我接收到的数据长度text1和text2的值为2000的话那么该数据传输就是准确的了。
但是实际情况是我接收的数据经常会出现当时z为100时,text1与text2的值不一致。
同时,会出现接收到的数据要比发送的数据整整多出几组。或少出几组的情况。
这样的情况能避免么?如果把发送数据的事件用按钮来触发。每按一次按钮则发送一组数据,有时会发生连续发送数据时会突然有几组数据接收不到,是什么原因造成的呢?我的代码有什么问题请大家指正。

读取数据最好用 mscomm控件的oncomm事件来控制, 用时间控件控制比较麻烦而且不稳,容易丢失数据, 还过多占用CPU,在时间控件未触发是如果有数据进来,就会被忽略掉了

我试了使用ONcom控件
上面相同的程序段.设置缓冲取读取rthread = 10 ,inputlen = 10上述接收程序段不变.还是会发生接收的数据比发送的数据多的情况.
这样的情况是不是不可避免呢?还是我的接收程序有错误?
另外最让我不解的是,为什么我将整个数据分解扣,重新连接在一起后的长度,会和刚接收到的数据长有出入?求各位大大为我的代码指出错误.

另外因为我是使用一台脑调试的,当我的电脑发送信息的时侯,我的缓冲区里的第一组数据一定是一组完整的十字节数据.我担心如果我用ONCOM事件控制的话会出现,当我设置成trhread = 10 ,inputlen = 10的话.正好我开始接收数据后缓冲区里我接收的第一组数据不完整.而我依旧接收长度为10的数据,造成我读取数据不正确.如果我将rthead = 20 ,inputlen = 20.遇到上述情况,则每读取二十个字节,读入下面一段数据08090DFF0102030405060708090DFF01020304050607只能截取中是这组完整的数据头与尾部的数据则不要了.我感觉太影响准确性.请问各位达人,如果使用oncom事件,有什么方法能克服这个缺点么?
应该是这样,当触发要读取数据时,再到真正读取数据时实际又发送了一些数据到串口,也就是说实际读到数据会比计划的多,而下一条可以就少了,两条加起来再分成2条就都对。

所以不能每次读到的数据进行判断,要把读到的数据不断的累到一起,然后能过结束符等标志分成若干条数据。

可以参考我的这个例子中的 Mscomm 控件中 OnComm 事件中对接收到的数据累加并分割的代码
非常感谢您的帮助,在看过了您的代码后,我只是改动了mscomm控件中的RTSENABLED项设置为真的情况下,传输数据便准确了。请问这个项目的作用是什么?谢谢。

IE的地址一栏输入你的路由器地址,例如192.168.1.1,回车.IE会弹出窗口要求你输入路由器的登录名和密码
linksys的出厂隐含设置是, 登录名留空(leave it blank), 密码是admin
然后点击"OK"如果密码正确,IE会进入Linksys的设置页面,在右上角落,会找到"Advanced"一栏,点击"Advanced"进入"Advanced"一栏后,在左上方第二个folder,你应该可以看到"Forwarding"的Folder,点击"forwarding",进入PORT FORWARDING后,我们可以设置端口了.
阿尔卡特SPEED TOUCH 511。打开IE浏览器,并在地址栏中输入10.0.0.138,这是阿尔卡特511的控制界面的IP地址。进入该控制界面之后,点击屏幕左侧的ADVANCED(高级选项)这一栏。

之后弹开的是511的高级控制界面的内容,我需设定端口映射功能,需要点击左侧菜单中的NAPT功能。我们进入了NAPT控制界面。首先选择TCP模式,然后INSIDE IP(内部IP)我们输入10.0.0.1,这是511默认的内部IP,一般情况下我们都可以填写这个。
OUTSIDE IP(外部IP)如果您有指定的外部IP就可以在这里填入,我们就可以填上0.0.0.0。
INSIDE PORT(内部端口)、OUTSIDE PORT(外部端口),因为我们的COOLGATE安装默认的端口号是1433,所以我们需要把内部端口和外部端口全部都填上1433。
全部输入完毕之后点击APPLY进行保存。

全部设定完毕之后,先不要急于关闭,因为您还没有保存设置呢,接下来我们需要点击屏幕左侧上端的SAVE ALL,来保存我们刚才做的这些设定。
经过我们上述的设定之后,511 ADSL适配器的端口映射功能就被我们正确的设定了,接下来我们需要断开一次511的电源再重新接上,待511再次自动连通后,上述设定的端口即被成功映射。

来源:足球直播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值