请教delphi多线程技术监控多个串口

firetop818 2007-06-30 04:32:04
现要实现多线程技术监控多个串口:
可以实现各个串口的同时单独发送和接收,且各串口之间是独立运行、独立监控的。
请问怎么实现?能否给个例子阅读,谢谢!
...全文
900 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2007-07-03
  • 打赏
  • 举报
回复
建议可以考虑使用完成端口。
constantine 2007-07-03
  • 打赏
  • 举报
回复
放多几个mscomm32控件就行了,
firetop818 2007-07-03
  • 打赏
  • 举报
回复
只要某个串口有数据,我把各个串口数据收集处理,然后再通过另一个专用串口再把这些数据发送给服务器,这个过程我想这样实现:用Timer每隔1秒检测一下哪些串口有数据,若有我就处理,我想问一下,如果这个处理(包括发送的延时)的时间超过了1秒,Timer将会出现什么情况?这样做是否合理?
newfang 2007-07-02
  • 打赏
  • 举报
回复
SPCOMM用着不错的,不用自己再用API搞~~浪费劳动力~~
abcdefgdeng 2007-07-02
  • 打赏
  • 举报
回复
用MSCOM就可以了。MSCOM可以在Delphi的Active component中加入,MSCOM是微软的,系统安装好之后都会带有。实现你的功能不需要多线程,每个串口之间本身不会有冲突,因为每个MSCOM的端口是不一样的,比如说MSCOM1的端口为0,MSCOM2的端口为1,不同端口连接的设备会从对应的端口传数据给MSCOM控件。当接收的数据满足你指定的规则时,可以触发comevent事件。并在事件下写你的数据处理程序。如果楼主还不明白,你可以查查MSCOM的使用。
firetop818 2007-07-01
  • 打赏
  • 举报
回复
有的说要通过线程,有的说直接用串口控件就可以处理多个串口数据了,迷茫了
jadeluo 2007-07-01
  • 打赏
  • 举报
回复
MSCOMM32已经把串口的读、写功能都封装好了(它内部是用线程来实现的),而且它提供了事件驱动的编程接口。所以你使用MSCOMM32时,是不需要再使用线程编程的。
firetop818 2007-07-01
  • 打赏
  • 举报
回复
谢谢 luxuewei5214(小卢)(以下内容仅供参考),我用的是MSCOMM32控件,也可以自动检测串口的接收,另外"每个线程里包含一个串口控件"是动态创建还是要放N个spcomm控件呢
ly_liuyang 2007-07-01
  • 打赏
  • 举报
回复
搞多几个SPCOMM就是啦
firetop818 2007-07-01
  • 打赏
  • 举报
回复
池龙大哥,在类里动态创建串口读写的控件,不熟悉,而且时间紧,还请再指教
luxuewei5214 2007-07-01
  • 打赏
  • 举报
回复
创建n个线程,每个线程里包含一个串口控件,串口的接受和发送都在县城里处理就ok了。建议使用spcomm控件,他自己检测串口的接受,只要在接受事件中写处理的代码就可以了
池龙 2007-07-01
  • 打赏
  • 举报
回复
从TThread继承一个类,在类里动态创建串口读写的控件。这样你要读写几个串口只要创建相应数量的实例就行了。多个线程实例用TObjectList维护。
firetop818 2007-07-01
  • 打赏
  • 举报
回复
To poolord(池龙):我用MSCOMM32串口控件行吗?我要监测八个串口数据,并作处理,那我是不是要用八个MSCOMM32呢?还有我是把线程事件放到MSCOMM32的oncomm事件中,还是把MSCOMM32的oncomm32事件放到线程的execute中的?

tonumbbb(空白的历史1966至1976)和solokey(争取在2008年成为低级程序员) ,那个控件本身就是多线程的吗?如果八个串口同时来了数据,是否会有冲突

谢谢大家
solokey 2007-06-30
  • 打赏
  • 举报
回复
CnPack的组件包里的Cnrs232,几个串口创建几个就可以了..
numbbb 2007-06-30
  • 打赏
  • 举报
回复
用N个SPCOM组件打开N个COM口。
池龙 2007-06-30
  • 打赏
  • 举报
回复
其实不太想回你这个帖子。。。看在你可能是搞工控的份上说几句。。。

你的问题其实关键是两点。

其一是串口的读写。这个可以用控件,也可以自己用API写代码实现。CreateFile打开串口,GetCommState、SetCommState取和设置端口参数,ReadFile读数据,CloseHandle关闭串口。

其二是多线程的使用。Delphi有个TThread类,直接继承下来写你的线程就行了,Delphi自己有Demo可以看。

这两个问题解决,后面就是线程同步、数据的存储访问、编码解码之类的工作,问题不大。

自己多Google下,相关代码很多的。给个建议,以后问问题尽量问在点上,问之前多找找相关的资料,你这个问题提得就像“怎么样造辆汽车”一样。。。-_-|||

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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