COMM通讯干扰导致软件假死

daofuuq 2009-07-09 11:26:50
用VB编的工控软件,上位机(电脑)可以设定每隔多少秒发送一次读数据命令,然后下位机上传1帧数据,问题如下:
1.可能是下位机控制的电机有干扰,经常导致程序假死,但是通讯还在继续,只是程序不响应
2.可能是数据发送频繁导致计算机资源占用过多(当读取3个数据时,CPU快50%占用率)
请教下怎么找出问题,谢谢!
...全文
126 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
dandan4900 2011-07-04
  • 打赏
  • 举报
回复
是干扰造成的 频繁的进入到oncomm函数中
你可以设个断点试试
of123 2009-07-13
  • 打赏
  • 举报
回复

如果确定是干扰影响接收,就不要在软件上打转转了。实际上,是干扰影响了串口的正常接收,使奇偶校验发生了错误。

1 在下位机端考虑一下,通讯是否能避开电机变速时段。
2 采取防干扰措施,例如屏蔽下位机箱和传输线缆。当然,将电机罩接地屏蔽也可以。

还有,就是上位机在循环中可以加超时判断,以免死循环。
daofuuq 2009-07-13
  • 打赏
  • 举报
回复
谢谢了各位
贝隆 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 of123 的回复:]
如果确定是干扰影响接收,就不要在软件上打转转了。实际上,是干扰影响了串口的正常接收,使奇偶校验发生了错误。

1 在下位机端考虑一下,通讯是否能避开电机变速时段。
2 采取防干扰措施,例如屏蔽下位机箱和传输线缆。当然,将电机罩接地屏蔽也可以。

还有,就是上位机在循环中可以加超时判断,以免死循环。

[/Quote]

对,应该考虑如何减弱或避免干扰的问题。
bj0629 2009-07-12
  • 打赏
  • 举报
回复
LZ:
一个简单的方法试一下:
1.用串口精灵、xtalk、procomm、等软件的一款将你的命令传发送给下位机。
2.按照你的发送周期人工去发。看看乱不乱

注:首先要保证你发的数据格式是正确的。一般的plc在通讯数据包中的尾部带累加和检查的!
bj0629 2009-07-12
  • 打赏
  • 举报
回复
巫师:
1.我提供的方法是通过c、d、电脑去采集实际的通讯过程。
查看你面是否有无效数据就可以知道是有有乱码了。
2.串口如果收到严重干扰,他的数据格式会出错,mscomm会报警的。不可能还在工作。

我的建议:当出现问题时
1.用头脑里的掌握的基本原理去分析
2.设计到硬件的问题,要经过测试、实验。
3.不能只想、只说、不干。
4.举例:可以做个实验:
1.将两台电脑串口相连,放到车间里干扰最严重的设备旁边。电焊机、高频电炉。看看通讯会不会乱。
2.我们常做电脑通过串口连接数控机床,有时一个零件边加工、边传送要连续加工一周。想一下,一台机床上 有多少电机?

如果干扰机床早就撞坏了。

总之:要通过实验来分析问题、通过原理来分析问题。如果用嘴说可以说出一百个理由来!

贝隆 2009-07-12
  • 打赏
  • 举报
回复
有些干扰不是随时都有的,他可能实在某种设备开启运行是才有,楼主,你用串口调试器,在电机开启时调试一下,看看是不是有乱码。
贝隆 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 bj0629 的回复:]
不可能是所谓的干扰造成的。我常干这样的项目。
1.电缆线焊接牢固。
2.屏蔽线接直流地。(9芯插头---5  25芯 ----7 是0v)
3.再找两台电脑 (就叫C 机  D 机吧)
4.pc和plc连接一般可以采用软件通讯协议,即三根线。

    c机    d机
    2|      |2
    |      |
pc  |      |              plc
2 ---+-------|-----------  3
3 -----------+-----------  2
5 -----------------------  5

利用c机、d机串口第二脚(接收端)按照上图连上。
利用c机 和 d 机的两个接收端,捕获两端的数据通讯内容。你会发现问题出在哪里的。

6.串口的通讯电平(笔记本电脑+ - 8v。台式机 + -11 V 左右)eia stardard is +-3 to +- 15v
我们经常在车间长期使用串口通讯,哪里除了有电机、吊车、电焊机。估计是你的软件编的有毛病。
有事联系我www.cncb3h.com  contact
[/Quote]

我不同意你的看法,楼主这个情况应该是干扰问题。
bj0629 2009-07-11
  • 打赏
  • 举报
回复
给三项电机加装一个三项火花吸收器(阻容吸收器)。
bj0629 2009-07-11
  • 打赏
  • 举报
回复
这里没法画图啊!?
bj0629 2009-07-11
  • 打赏
  • 举报
回复
不可能是所谓的干扰造成的。我常干这样的项目。
1.电缆线焊接牢固。
2.屏蔽线接直流地。(9芯插头---5 25芯 ----7 是0v)
3.再找两台电脑 (就叫C 机 D 机吧)
4.pc和plc连接一般可以采用软件通讯协议,即三根线。

c机 d机
2| |2
| |
pc | | plc
2 ---+-------|----------- 3
3 -----------+----------- 2
5 ----------------------- 5

利用c机、d机串口第二脚(接收端)按照上图连上。
利用c机 和 d 机的两个接收端,捕获两端的数据通讯内容。你会发现问题出在哪里的。

6.串口的通讯电平(笔记本电脑+ - 8v。台式机 + -11 V 左右)eia stardard is +-3 to +- 15v
我们经常在车间长期使用串口通讯,哪里除了有电机、吊车、电焊机。估计是你的软件编的有毛病。
有事联系我www.cncb3h.com contact
















贝隆 2009-07-10
  • 打赏
  • 举报
回复
干扰很难根除的,像你这个情况是较严重的,在有干扰时,只要串口打开,就会有大量的乱发涌向串口,导致了CPU利用率100%,从而出现了死机的假象。要去除干扰还得具体问题具体分析。
daofuuq 2009-07-10
  • 打赏
  • 举报
回复
谢谢楼上,我在试下吧
daofuuq 2009-07-10
  • 打赏
  • 举报
回复
我的干扰源是电机的磁场?反正伺服驱动器和PC间通讯时很正常,当伺服驱动电机转动后,就会产生干扰,平稳运行时没事,当转动不平滑时就会通讯错误,程序死掉,但通讯还在进行
贝隆 2009-07-10
  • 打赏
  • 举报
回复
下位机的通信端口是什么接口的?RS232?RS485?
打死不掉牙 2009-07-10
  • 打赏
  • 举报
回复
你的这句
Do
DoEvents
Loop Until MSComm1.InBufferCount = 8
Inbyte = MSComm1.Input
是用查询方法来读取数据的啊,oncomm事件只是用来读取数据的,阈值设为8,不做发送用啊,你定时发送指令,如果下位机有数据返回达到8个会自动触发oncomm事件,你在事件里面读取数据啊,这样就不用一直循环,可能导致假死的现象。
对于干扰,你可以把232换成485试试,这样抗干扰能力会增强很多的!
daofuuq 2009-07-10
  • 打赏
  • 举报
回复
oncomm事件能自己设定时间?
打死不掉牙 2009-07-10
  • 打赏
  • 举报
回复
是oncomm事件,打错了,呵呵!
打死不掉牙 2009-07-10
  • 打赏
  • 举报
回复
为什么要循环检测啊,用oncomm时间不更好么!
贝隆 2009-07-09
  • 打赏
  • 举报
回复
楼主,你的干扰源是什么?我有过类似的经历,可能可以帮助你
加载更多回复(5)

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧