S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #1 我的程序需要监控多个串口,进行数据收发,请问应该怎样实现比较合理!若用事件进行监控,如何识别 出该事件是从哪个串口产生的?
Z zwhc Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #2 印象中,一个 MSComm 对应一个口,你使用多个 MSComm 就可以了
N NeutronDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #3 非常简单 1,自己实现 利用WinAPI CreateFile,ReadFile,WriteFile函数打开读写串口,当然 每个串口一个线你当然知道是从哪个读到的数据啦 2,用三方控件 SPCOMM 每一个控件监视一个串口,有OnRead事件和SendText方法 非常好用,你自己搜索一下,很多
非常简单 1,自己实现 利用WinAPI CreateFile,ReadFile,WriteFile函数打开读写串口,当然 每个串口一个线你当然知道是从哪个读到的数据啦 2,用三方控件 SPCOMM 每一个控件监视一个串口,有OnRead事件和SendText方法 非常好用,你自己搜索一下,很多
L lhl20000 Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #4 请问NeutronDelphi: 如何获得Tmscomm接收到的mscomm.input的字节数组的长度,以便进行数据循环 处理。
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #5 用mscomm不可以,因为mscomm最多支持16个串口,而我所作的项目中需要监控的串口数目会 超过16个,我现在是用api函数实现。在运行过程中,打开几个串口是不确定的,因为初始化 时若发现某台设备故障或未开机,就不需对其进行监控了! 继续讨论!
用mscomm不可以,因为mscomm最多支持16个串口,而我所作的项目中需要监控的串口数目会 超过16个,我现在是用api函数实现。在运行过程中,打开几个串口是不确定的,因为初始化 时若发现某台设备故障或未开机,就不需对其进行监控了! 继续讨论!
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #7 to NeutronDelphi: 因为我需监控的串口数目比较多,若一个串口对应一个线程,程序会变得非常支离破碎! 继续讨论!
H huiyue Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #8 印象中串口好像同时使用的只能小于4个吧,要不就会发生中断冲突。 你就一个串口对应于1个mscomm控件, 分开操作处理,既方便又容易读懂程序,不是很好吗?
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #9 to huiyue: 若用一个mscomm,则只能同时监控一个串口,其他串口发来的数据就无法收到了! 继续讨论!
P pihome Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #10 SpComm、CommPort等等 一个组件对应一个串口
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #11 to pihome 若一个组件对应一个串口,那就需要放很多spcomm,可能要二三十个吧! 这样可能也不太好! 继续讨论!
W wang_junfan Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #12 用COMMPORT吧,控件源代码通俗易懂,一个控件对应一个串口。 串口控件已经把多线程封装到控件中了,不用自己写代码,只要处理事件就可以了。
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #13 to wang_junfan 你是说每一个串口都对应一系列事件吗?若不是,如何区别出事件是那一个串口产生的? 继续讨论!
A Aiirii Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #14 我在开发中的经验,如果,你想获取到比较好的底层控制,最好还是用Api,其实也不难,而且,最好是一个串口对应一个线程,我无法想象不用线程可以完成,然后,如果会出现你说的"若一个串口对应一个线程,程序会变得非常支离破碎",那我想,你要考虑你的设计思路是否正确,程序的流程是否有问题!我觉得正解应该就是这样的!
我在开发中的经验,如果,你想获取到比较好的底层控制,最好还是用Api,其实也不难,而且,最好是一个串口对应一个线程,我无法想象不用线程可以完成,然后,如果会出现你说的"若一个串口对应一个线程,程序会变得非常支离破碎",那我想,你要考虑你的设计思路是否正确,程序的流程是否有问题!我觉得正解应该就是这样的!
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #15 to Aiirii 我现在也是用api来实现,串口接收到数据后用事件进行触发,若用一个消息事件, 则无法区别出事件是哪个串口产生的?若每一个串口对应一个事件进行触发的话, 感觉也不太妥当! 继续讨论!
P pihome Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-08 #16 不知道你用的是什么样的设备 我也用串口同时连接过很多的设备,甚至超过你这里的二三十个 不过因为我用的设备是485接口的 通过设备的地址码识别每一个设备 所以我倒是没有碰见象你这样同时打开如此多串口的情况 个人认为这样的情况用API是最好的 应该是一个串口对应一个线程 完全可以用一个消息触发事件 消息里带上不同的参数用来识别是哪个线程触发的 再读取相应串口的数据 我的理解就是这样
不知道你用的是什么样的设备 我也用串口同时连接过很多的设备,甚至超过你这里的二三十个 不过因为我用的设备是485接口的 通过设备的地址码识别每一个设备 所以我倒是没有碰见象你这样同时打开如此多串口的情况 个人认为这样的情况用API是最好的 应该是一个串口对应一个线程 完全可以用一个消息触发事件 消息里带上不同的参数用来识别是哪个线程触发的 再读取相应串口的数据 我的理解就是这样
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #17 to pihome 我是用232串口与其它串口相连,由于下位机没有地址码,所以只能采用点对点的方式, 上位机的一个串口对应一台下位机。我也是用API来作的,采用一个串口对应一个线程 方式。我也觉得用一个消息触发事件比较好,当时如何让消息里带上不同的参数来识别 是哪个线程触发的?进而识别出是哪个串口产生了事件?这也是我想了很长时间都不知道 该如何实现的问题!希望有人能够帮助我! 继续讨论!
to pihome 我是用232串口与其它串口相连,由于下位机没有地址码,所以只能采用点对点的方式, 上位机的一个串口对应一台下位机。我也是用API来作的,采用一个串口对应一个线程 方式。我也觉得用一个消息触发事件比较好,当时如何让消息里带上不同的参数来识别 是哪个线程触发的?进而识别出是哪个串口产生了事件?这也是我想了很长时间都不知道 该如何实现的问题!希望有人能够帮助我! 继续讨论!
Z zlc_168 Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #19 强烈推荐你直接使用API直接控制串口,设置一结构,用来存储串口(如COM1、COM2...) ,与CREATEFILE返回的HANDLE;
S sunwill Unregistered / Unconfirmed GUEST, unregistred user! 2003-04-09 #20 to zlc_168 你的建议很不错!我现在最关键的问题是通过什么样的方式可以从一个触发事件中 判别出该事件是众多串口中哪一个串口产生的?然后我可以去该串口取数据! 继续讨论!