紧急求助:MSCOMM控件发送数据导致死机的问题。。。。
环境:
一台计算机向另外一台计算机定时发送串口数据。
发送方是公司自己写的VB程序。
接收方是其他公司的程序。
问题:
运行一段时间,发送方计算机会出现死机现象。重启计算机也不好使。将接收方计算机重启就好使了。
分析:
既然死机需要重启其他计算机才能好使,应该是通讯导致的。两台计算机只有一个串口通讯,而且发送方只是定时发送,并不接受。每1秒钟发送一包数据。不等待数据返回(接收方是否返回不知道,但我们不做读取接受buffer处理)。
采用MSCOMM控件进行串口通讯。
设置:
SThreshold = 0;不产生OnComm事件。
每1秒,执行一次发送:
comm1.output = buffer
串口操作,只有上面一条发送语句。如果死机,应该就是在这条语句上。(由于在现场发生的,现在无法模拟,因此只能推测)。
问题1:
那么,什么情况能够导致comm1.output = buffer这条语句死机呢?
问题2:
接收方重启才能解决问题,接收方串口问题对发送方有什么影响呢?发送缓冲区溢出?发送失败?这些能够导致output = buffer语句死机吗?
问题3:
如果我想重现死机情况,也就是制造发送失败或者发送缓冲区溢出的条件,如何制造?
最后,请各位大侠帮忙分析一下,还有什么可能??
不知道为什么,我只能发20分的帖子了,分数不高,请大家友情帮忙解决一下。。谢谢。。
[解决办法]
不知道你说的死机是程序出现假死还是其他情况?
你可以把代码贴出来,让大家给你看看。
[解决办法]
不清楚你所用的通讯协议,例如,发送方是否等待接收方的确认信号。
很有可能是发送及接收的过程太长,超过了定时器设置时间,因此有多个发送过程被嵌套,不断占用内存。
建议你设置为发送间隔 1 秒,而不是每一秒触发一次发送。实际上,就是在 Timer 事件中入口处代码禁用 Timer,发送完成后再重新使能 Timer,发送过程不计时。