用VB编的工控软件,上位机(电脑)可以设定每隔多少秒发送一次读数据命令,然后下位机上传1帧数据,问题如下:
1.可能是下位机控制的电机有干扰,经常导致程序假死,但是通讯还在继续,只是程序不响应
2.可能是数据发送频繁导致计算机资源占用过多(当读取3个数据时,CPU快50%占用率)
请教下怎么找出问题,谢谢!

解决方案 »

  1.   

    原因多种.
    如果是干扰,则应该考虑排除干扰.
    依据通信协议对接收数据帧进行判断,符合要求读取,不符合要求舍去.
    下位机时钟不准,导致通信出错.
    适当必要的定时强制关闭COM口.瞬间打开COM口.
      

  2.   

    得看看你上位机程序是怎么设计的,里面如果存在循环,哪个条件不满足就进入死循环那就会假死了,或者sleep时间过长等!
      

  3.   

    电机关掉后通讯很正常,启动电机后就会产生干扰,       Do
            DoEvents
           Loop Until MSComm1.InBufferCount = 8
           Inbyte = MSComm1.Input程序还在发数据,但是界面按钮不响应了,难道是信号出错了,导致循环停不下来?我是在Timer里发送读取命令的
      

  4.   

    应该是由于有时读取时间不对,使得MSComm1.InBufferCount = 8中没有8个数,所以一直循环。
      

  5.   

    为什么要循环检测啊,用oncomm时间不更好么!
      

  6.   

    是oncomm事件,打错了,呵呵!
      

  7.   

    你的这句
    Do
            DoEvents
           Loop Until MSComm1.InBufferCount = 8
           Inbyte = MSComm1.Input
    是用查询方法来读取数据的啊,oncomm事件只是用来读取数据的,阈值设为8,不做发送用啊,你定时发送指令,如果下位机有数据返回达到8个会自动触发oncomm事件,你在事件里面读取数据啊,这样就不用一直循环,可能导致假死的现象。
    对于干扰,你可以把232换成485试试,这样抗干扰能力会增强很多的!
      

  8.   

    下位机的通信端口是什么接口的?RS232?RS485?
      

  9.   

    干扰很难根除的,像你这个情况是较严重的,在有干扰时,只要串口打开,就会有大量的乱发涌向串口,导致了CPU利用率100%,从而出现了死机的假象。要去除干扰还得具体问题具体分析。
      

  10.   

    不可能是所谓的干扰造成的。我常干这样的项目。
    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 
      

  11.   

    巫师:
    1.我提供的方法是通过c、d、电脑去采集实际的通讯过程。
    查看你面是否有无效数据就可以知道是有有乱码了。
    2.串口如果收到严重干扰,他的数据格式会出错,mscomm会报警的。不可能还在工作。我的建议:当出现问题时
    1.用头脑里的掌握的基本原理去分析
    2.设计到硬件的问题,要经过测试、实验。
    3.不能只想、只说、不干。
    4.举例:可以做个实验:
    1.将两台电脑串口相连,放到车间里干扰最严重的设备旁边。电焊机、高频电炉。看看通讯会不会乱。
    2.我们常做电脑通过串口连接数控机床,有时一个零件边加工、边传送要连续加工一周。想一下,一台机床上 有多少电机?
     
      如果干扰机床早就撞坏了。总之:要通过实验来分析问题、通过原理来分析问题。如果用嘴说可以说出一百个理由来!  
      

  12.   

    LZ:
    一个简单的方法试一下:
    1.用串口精灵、xtalk、procomm、等软件的一款将你的命令传发送给下位机。
    2.按照你的发送周期人工去发。看看乱不乱注:首先要保证你发的数据格式是正确的。一般的plc在通讯数据包中的尾部带累加和检查的!
      

  13.   

    是干扰造成的  频繁的进入到oncomm函数中
    你可以设个断点试试