本帖最后由 bcrun 于 2010-12-15 20:02:46 编辑

解决方案 »

  1.   

    就你所提供的代码而言,看不出来。
    程序假死时候,有没有看过CPU的利用率是多少?如果是100%,那么应该是串口接受到了大量的无效数据所致。如果不是100%,那可能软件或硬件问题。
      

  2.   

    假死,无响应的时候,CPU利用率几乎是零!
      

  3.   

    一开始以为是DOEVENTS引用不当(起冲突)造成,因为延时程序用了DOEVENTS
    但是后来注释掉了,还是不行。
    PS:单独一个软件使用时,并不会出现这种情况!
      

  4.   

    接收数据数量,每次最多的只有25个BYTE呢!
      

  5.   

    接收数据数量,每次最多的只有25个BYTE呢!
      

  6.   

    串口是以中断方式工作的,是不是有冲突之类的系统级的错误发生?我遇到的假死是发生在OutPut这一语句上,程序没有反应会持续30秒以上。
      

  7.   

    本帖最后由 bcrun 于 2010-12-15 20:01:28 编辑
      

  8.   


    是啊 我的也是这个问题,但是我是OutPut之后,接收到返回的数据,然后程序就持续没有反应10几秒,后又正常!
      

  9.   

    用PCI的卡,用了两张两口的,40块一张的。
      

  10.   

    用下面的代码,单独编译一个 exe,执行一下,看看任务管理器显示什么?
    'Form1
    Option ExplicitPrivate Sub Command1_Click()
        Sleep 30000
    End Sub
      

  11.   


    呵呵 问题是我sleep的时间都很短 毫秒级的
    而且单独开一个监控程序(无论是串口1、2、3还是4、5、6)都没有问题呢。
      

  12.   

    利用超级终端测试一下是不是传输质量有问题。如果没有问题,可以不用换。
    传送->发送文件……我还是感觉是软件这边的问题,你把sleep去掉,换Timer延时试试~
      

  13.   


    MOXA的卡也不错,但是同样不能保证没有问题,碰到过MOXA更新驱动程序就好的情况。
    你可以去我的网站下一个组态软件测试一下你的情况,不知道你用的是什么协议,有没有现成的
    我的网站 huwenjin.com
      

  14.   

    以前在一个软件中要同时接收多个串口的数据,结果还常常蓝屏,整得是相当郁闷
    Multiple_IRP_COMPLETE_REQUESTS
      

  15.   

    本帖最后由 bcrun 于 2010-12-23 13:24:06 编辑
      

  16.   

    一开始就是用ONCOMM事件,但是通信协议乱七八糟的,长度等问题考虑,还是用查询的方式呢。
      

  17.   

    Rs232 = MSComm_Ageing.Input
    有捕捉过,如上句:情况是串口接收到一帧数据后,就出现无响应了。
    把此句语句注释掉,下次还是出现在别的同类语句中。
      

  18.   

    串口对外是RS232电平,高电平是12V,因此在对外传输时电压幅值比较高,抗干扰性比较不错.光打开串口,没有数据流,则各条线路都是没有电流的.传输数据时,才会有发生干扰的可能.建议你换换卡.或者不同的串口使用不同的速率试试,并且如上面CBM666所说,不要设置太高的速率,你这卡本身就比较烂
      

  19.   

    我遇到过你说的问题,死机了,但是看CPU却是0%,后来我的解决方法是重新安装系统,然后重新安装串口驱动,后来就一直没出现过了。
    我遇到这个问题的时候,用的是gost的系统,后来找了张正版的XP系统安装,然后又找了研华的板卡驱动,是找客服要的最新的,之后就好了
      

  20.   

    延时 Sleep 用的太多会假死的 
      

  21.   

    那您的接收代码出问题是什么类型的问题呢?
    我觉得是跟串口有关系的。
    因为如果是程序问题的话,我在没有带设备的平台测试是正常的。
    我的接收代码都是上面那样Rs232 = MSComm_Ageing.Input
    就对RS232这数组里的数组进行转换一下数据而已。
    然后保存在文本文档里。(就算不带设备,数据也有保存)
    我发现我这张串口卡的的两个com的IRQ是一样的,是不是PCI的中断机制与ISA是有所不同的?
    ISA是硬件中断,PCI是分时处理的吗?
      

  22.   

    跟操作系统也有关系??
    我用的也是GHOST!
    明天试试。
      

  23.   

    有些卡是重新安装了驱动就又可以使用了,但问题的关键可能还是在卡上。硬件的原因导致通信卡老是出现驱动不行。我曾经就有如此经历,使用的Sunix8159老是在使用一段时间时出现卡找不到的故障,重新安装一下驱动又好了,但过不了多久旧病复发,直到换了品牌的卡才OK。
      

  24.   

    那这样.写一个EXE,只监视一个串口,在界面上选择.然后把这个EXE运行N份,几个串口就运行几份,分别工作.如果这样OK,再向下一步.
      

  25.   

    MSCOMM控件内部应该也是有一个线程的.但是控件事件触发时,处理线程却只有一个,就是你写的代码所运行的线程.如果这个代码没写好,有可能会有问题,先按我上面的方案,把这个可能性排除了再说.
      

  26.   


    谢谢各位,已经解决了。
    之前是一个程序只使用一个Mscomm控件,控制4个串口,会产生以上那种问题。
    后面,我每一个串口都对应使用一个Mscomm控件,目前应用了十几天,就再也未出现未响应的问题了。
    我觉得,是不是因为如果只用一个MSCOMM的话,它控制多个串口,需要频繁地开关(MSCOMM1.portopen = true/false),才导致有时通信时串口关不掉或打不开导致程序假死,当然也有可能是我这方面的代码写得不好导致的,但是我操纵串口的代码就是之前贴出来的那样了。
    而每个串口对应使用一个MSCOMM时,则不存在需要频繁地开关了,可以让串口在程序运行过程一直处于ON的状态了,我想,其区别就在于此吧?
    虽然解决了,但还是希望大家不吝赐教!
    谢谢大家的帮忙。