关于SPCOMM 的多线程开发 ( 积分: 20 )

  • 主题发起人 主题发起人 citydawn
  • 开始时间 开始时间
C

citydawn

Unregistered / Unconfirmed
GUEST, unregistred user!
从PC的一个COM口上扩展出8个COM口,然后每个COM口连接8个下位机,总共是64个下位机
要做的程序不停的从这64个下位机上读数据。
我要用多线程实现,那么我对每个口作一个线程,那就是8个线程,每个线程循环读8个下位机。这样可以实现么?
实现的话我要放8个SPCOMM控件?代码该如何设计效率才最高?
 
从PC的一个COM口上扩展出8个COM口,然后每个COM口连接8个下位机,总共是64个下位机
要做的程序不停的从这64个下位机上读数据。
我要用多线程实现,那么我对每个口作一个线程,那就是8个线程,每个线程循环读8个下位机。这样可以实现么?
实现的话我要放8个SPCOMM控件?代码该如何设计效率才最高?
 
大家帮忙呀,谢谢了!
 
可以实现,用一个线程控制8个端口也可以,
 
关键是效率要以最快的速度,正确读取64个下位机中不断更新的信息。
 
这是个工业控制的问题,不告诉你。否则我就失业了。
 
哦,这个问题可以大家讨论一下的,我开个群一起研究吧.QQ群号:2000202
 
你是在一个串口上扩展展的多串口,通讯线路决定了你的效率.用多线程也不能根本提高效率.
 
我现在还没有多COM口的卡,目前我用PC自带的一个COM口可以通讯,用USB转的COM也可以通讯,但是USB转的只能用COM2,用COM3、COM4、COM5、。。。。。。都无法通讯?不知道是那些方面的问题?
 
用组态软件来做啦!
 
还没有接触过[:)],
 
当PLC返回数据时,将触发OnreceiveDate事件,执行OnreceiveDate里的处理代码,那么我想问一个基础的问题:
当执行OnreceiveDate里的处理代码的过程中,又有新的数据返回,这将再次触发OnreceiveDate事件,那么前后两次处理代码的过程占用的是同一内存空间么?会发生冲突么?
 
不用放8个控件。方法是:
创建一个线程类,这个类中定义一个SPCOMM控件,在线程创建时创建这个控件。
给这个线程指定一个串口和8个下位机的地址,然后在线程中不停的读写串口就
可以了。
然后你可以为每个串口创建一个线程,这样做的话,无论多少个串口,你都可以
搞定了
 
我的做法是放8个SPCOMM控件,然后建立一个线程类,在类中指定用某个串口通讯,并循环向下位机发送命令。
然后,循环创建8个线程,一个线程对应一个串口向8个下位机通讯。
也就是说,我用8线程对应8串口“发送命令”,而个SPCOMM的ONRECEIVEDATE事件共用一个
PROCEDUE处理代码。
这样可以么?
 
spcomm控件不好用,只能单线程
 
我看了SPCOMM的源码,当他STARTCOM时候创建了一个READ和一个WRITE线程,也就是说他的是多线程的,读/写是两个分开的线程.
对于每个COM对应一个SPCOMM,要是多COM口要"同时"通讯的话,就必须要多线程,一个COM口一个线程.
在每个线程里面,实现的代码功能是WRITEDATE向下位机发送数据.
而接收数据是由每个COM各自的ONRECEIVEDATE事件来接收处理的.
 
最好每个com口对应一个设备,但是如果设备太多恐怕机器资源不够.对每个com口都应开一个线程.我做过同时访问15台设备的程序,然后把处理好的结果在局域网发布.由于设备的串口协议太复杂,效果不是很理想,但也满足了客户的要求.
 
对于速度而言,当然开多几个线程是最好的,动态的建立线程和动态的建立控件也是最省资源的.
实现方法是:在程序里能选择COM的使用量,比如开8个COM口,那么我就建8个线程检索8个数据的情况,没数据,报告设备故障.有数据,动态的显示,程序的好坏是使用的结果.不要在意程序写的庞大,如果需要的话,再庞大也是好程序.
 
后退
顶部