现要实现多线程技术监控多个串口:
可以实现各个串口的同时单独发送和接收,且各串口之间是独立运行、独立监控的。
请问怎么实现?能否给个例子阅读,谢谢!

解决方案 »

  1.   

    其实不太想回你这个帖子看在你可能是搞工控的份上说几句你的问题其实关键是两点。其一是串口的读写。这个可以用控件,也可以自己用API写代码实现。CreateFile打开串口,GetCommState、SetCommState取和设置端口参数,ReadFile读数据,CloseHandle关闭串口。其二是多线程的使用。Delphi有个TThread类,直接继承下来写你的线程就行了,Delphi自己有Demo可以看。这两个问题解决,后面就是线程同步、数据的存储访问、编码解码之类的工作,问题不大。自己多Google下,相关代码很多的。给个建议,以后问问题尽量问在点上,问之前多找找相关的资料,你这个问题提得就像“怎么样造辆汽车”一样-_-|||
      

  2.   

    CnPack的组件包里的Cnrs232,几个串口创建几个就可以了..
      

  3.   

    To poolord(池龙):我用MSCOMM32串口控件行吗?我要监测八个串口数据,并作处理,那我是不是要用八个MSCOMM32呢?还有我是把线程事件放到MSCOMM32的oncomm事件中,还是把MSCOMM32的oncomm32事件放到线程的execute中的?tonumbbb(空白的历史1966至1976)和solokey(争取在2008年成为低级程序员) ,那个控件本身就是多线程的吗?如果八个串口同时来了数据,是否会有冲突谢谢大家
      

  4.   

    从TThread继承一个类,在类里动态创建串口读写的控件。这样你要读写几个串口只要创建相应数量的实例就行了。多个线程实例用TObjectList维护。
      

  5.   

    创建n个线程,每个线程里包含一个串口控件,串口的接受和发送都在县城里处理就ok了。建议使用spcomm控件,他自己检测串口的接受,只要在接受事件中写处理的代码就可以了
      

  6.   

    谢谢 luxuewei5214(小卢)(以下内容仅供参考),我用的是MSCOMM32控件,也可以自动检测串口的接收,另外"每个线程里包含一个串口控件"是动态创建还是要放N个spcomm控件呢
      

  7.   

    MSCOMM32已经把串口的读、写功能都封装好了(它内部是用线程来实现的),而且它提供了事件驱动的编程接口。所以你使用MSCOMM32时,是不需要再使用线程编程的。
      

  8.   

    SPCOMM用着不错的,不用自己再用API搞~~浪费劳动力~~
      

  9.   

    用MSCOM就可以了。MSCOM可以在Delphi的Active component中加入,MSCOM是微软的,系统安装好之后都会带有。实现你的功能不需要多线程,每个串口之间本身不会有冲突,因为每个MSCOM的端口是不一样的,比如说MSCOM1的端口为0,MSCOM2的端口为1,不同端口连接的设备会从对应的端口传数据给MSCOM控件。当接收的数据满足你指定的规则时,可以触发comevent事件。并在事件下写你的数据处理程序。如果楼主还不明白,你可以查查MSCOM的使用。
      

  10.   

    只要某个串口有数据,我把各个串口数据收集处理,然后再通过另一个专用串口再把这些数据发送给服务器,这个过程我想这样实现:用Timer每隔1秒检测一下哪些串口有数据,若有我就处理,我想问一下,如果这个处理(包括发送的延时)的时间超过了1秒,Timer将会出现什么情况?这样做是否合理?
      

  11.   

    放多几个mscomm32控件就行了,