to: qingfengsishi 还是没有明白你的意思。 到底是用2个spcomm控件,还是只用1个(引用:“可以同时打开多个串口的位置”)
用两个SPCOMM,以你来说,可以两个串口的内容应该有关联,那么你应该定义相应的串口状态变量。例如每一个串口当前可以用以下状态表示 commstate = record state: type of (idle,havedata) dataid: youtype end; 那么当任意一个串口来数据后,我可以获得其数据ID,这时我比较另一个串口的数据ID以及以及他的 state就可以判断此一帧数据是否有效
1.那么我究竟是要将这个两个串口控件放在主界面上(主线程)来接收呢,还是在各自的线程里面创建各自的串口控件?
2.因为我两个串口必须是同时(同接收顺序)收到相同的数据。如何来判断一个线程收到了数据,另一个没有收到数据?是不是一旦有一个线程收到数据时,就要起一个新的线程开始判断超时?
SPCOMM,可以分别打开串口的位置,
到底是用2个spcomm控件,还是只用1个(引用:“可以同时打开多个串口的位置”)
commstate = record
state: type of (idle,havedata)
dataid: youtype
end;
那么当任意一个串口来数据后,我可以获得其数据ID,这时我比较另一个串口的数据ID以及以及他的
state就可以判断此一帧数据是否有效
还是有疑问:
1. 两个spcomm是放在程序的主界面上,还是置于两个通讯线程中?
2. 两个spcomm若放在主界面即主线程中,那么用户对界面的操作(含数据库查询统计)会耗时较
长,会阻塞影响spcomm的数据接收和发送。
3. 两个spcommm若分别放在两个线程里面,那每个线程实现什么功能?spcomm的ReceiveData事
件在线程里面也会自动触发吗?那么线程的Execute过程要执行什么功能?是检测两个数组吗,
一个是收到的数据,一个是待发送的数据?
2.他们说spcomm本身就是多线程的,我也没搞太懂。但你对界面的操作,应该不会影响spcomm的数据接收和发送。即使用多线程,对vcl的操作也是要放到主线程中去的。
3、我没有那样做过。一般都是在spcomm的ReceiveData事件中触发线程。两个串口应该是互不影响的。
一个控件用俩个命令打开com1\com2
你的意思是说,在spcomm的ReceiveData事件中将收到的数据分别写入两个全局的数组中队列中,同时启动检测线程,扫描两个全局数组队列,检测是否同时收到相同的数据。然后进行相应的处理?
就是这个意思。动手去写程序吧,或者你会有新的发现和更好的办法呢!