一个串口通信问题(100分)

  • 主题发起人 主题发起人 sunwill
  • 开始时间 开始时间
S

sunwill

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序需要监控多个串口,进行数据收发,请问应该怎样实现比较合理!若用事件进行监控,如何识别
出该事件是从哪个串口产生的?
 
印象中,一个 MSComm 对应一个口,你使用多个 MSComm 就可以了
 
非常简单
1,自己实现
利用WinAPI CreateFile,ReadFile,WriteFile函数打开读写串口,当然
每个串口一个线你当然知道是从哪个读到的数据啦
2,用三方控件 SPCOMM
每一个控件监视一个串口,有OnRead事件和SendText方法
非常好用,你自己搜索一下,很多
 
请问NeutronDelphi:
如何获得Tmscomm接收到的mscomm.input的字节数组的长度,以便进行数据循环
处理。
 
用mscomm不可以,因为mscomm最多支持16个串口,而我所作的项目中需要监控的串口数目会
超过16个,我现在是用api函数实现。在运行过程中,打开几个串口是不确定的,因为初始化
时若发现某台设备故障或未开机,就不需对其进行监控了!
继续讨论!
 
to NeutronDelphi:
因为我需监控的串口数目比较多,若一个串口对应一个线程,程序会变得非常支离破碎!
继续讨论!
 
印象中串口好像同时使用的只能小于4个吧,要不就会发生中断冲突。
你就一个串口对应于1个mscomm控件,
分开操作处理,既方便又容易读懂程序,不是很好吗?
 
to huiyue:
若用一个mscomm,则只能同时监控一个串口,其他串口发来的数据就无法收到了!
继续讨论!
 
SpComm、CommPort等等
一个组件对应一个串口
 
to pihome
若一个组件对应一个串口,那就需要放很多spcomm,可能要二三十个吧!
这样可能也不太好!
继续讨论!
 
用COMMPORT吧,控件源代码通俗易懂,一个控件对应一个串口。
串口控件已经把多线程封装到控件中了,不用自己写代码,只要处理事件就可以了。
 
to wang_junfan
你是说每一个串口都对应一系列事件吗?若不是,如何区别出事件是那一个串口产生的?
继续讨论!
 
我在开发中的经验,如果,你想获取到比较好的底层控制,最好还是用Api,其实也不难,而且,最好是一个串口对应一个线程,我无法想象不用线程可以完成,然后,如果会出现你说的"若一个串口对应一个线程,程序会变得非常支离破碎",那我想,你要考虑你的设计思路是否正确,程序的流程是否有问题!我觉得正解应该就是这样的!
 
to Aiirii
我现在也是用api来实现,串口接收到数据后用事件进行触发,若用一个消息事件,
则无法区别出事件是哪个串口产生的?若每一个串口对应一个事件进行触发的话,
感觉也不太妥当!
继续讨论!
 
不知道你用的是什么样的设备
我也用串口同时连接过很多的设备,甚至超过你这里的二三十个
不过因为我用的设备是485接口的
通过设备的地址码识别每一个设备
所以我倒是没有碰见象你这样同时打开如此多串口的情况

个人认为这样的情况用API是最好的
应该是一个串口对应一个线程
完全可以用一个消息触发事件
消息里带上不同的参数用来识别是哪个线程触发的
再读取相应串口的数据
我的理解就是这样
 
to pihome
我是用232串口与其它串口相连,由于下位机没有地址码,所以只能采用点对点的方式,
上位机的一个串口对应一台下位机。我也是用API来作的,采用一个串口对应一个线程
方式。我也觉得用一个消息触发事件比较好,当时如何让消息里带上不同的参数来识别
是哪个线程触发的?进而识别出是哪个串口产生了事件?这也是我想了很长时间都不知道
该如何实现的问题!希望有人能够帮助我!
继续讨论!
 
认真听讲。。。。。
 
强烈推荐你直接使用API直接控制串口,设置一结构,用来存储串口(如COM1、COM2...)
,与CREATEFILE返回的HANDLE;
 
to zlc_168
你的建议很不错!我现在最关键的问题是通过什么样的方式可以从一个触发事件中
判别出该事件是众多串口中哪一个串口产生的?然后我可以去该串口取数据!
继续讨论!
 
后退
顶部