[同步多个串口操作]写了一个串口操作的ActiveX EXE,已经能正常通信了,但是我需要和四个串口一起通信,我的方法可以吗?

时间:2023-02-12 21:03:14
Private withevents COM1Class as clsComm          'clsComm是activeX EXE中的串口操作类
Private withevents COM2Class as clsComm
Private withevents COM3Class as clsComm
Private withevents COM4Class as clsComm

Private Sub Form_Load()
  set COM1Class =new clsComm
  set COM2Class =new clsComm
  set COM3Class =new clsComm
  set COM4Class =new clsComm
End Sub

Private Sub Command1_Click()
  COM1Class.SetPort(1)        '使用串口号
  COM2Class.SetPort(2)
  COM3Class.SetPort(3)
  COM4Class.SetPort(4)

  COM1Class.StartComm
'默认的9600bps,8,n,1   这将会调用Timer来进行通讯事件通知用户
  COM2Class.StartComm
  COM3Class.StartComm
  COM4Class.StartComm
end Sub

Private Sub COM1Class_DataReturn(bFlag as boolean)
  if bFlag then
     Print "Com1 DataReturn OK."
  Else
     Print "Com1 DataReturn Bad."
  end if
end Sub

'COM2/COM3/COM4的事件雷同


----------------------------------------------
我想问一下这样的方法可取吗?就是说调用同一个Active EXE组件的不同类的实例

主要是反应速度会不会很慢??

因为我的发送数据远远要比想象中的多,当然收取的也多,而且要保存到数据库中去,不过事件触发倒是不会太频繁,而我在客户端永远不需要管什么数据收了多少,只要读取数据库中的内容就可以了,因为表结构中包含任何通信的信息,当然前提是保存入库时不能有错(出现错误时会RaiseEvent)

----------------------
如果说这样反应慢的话,是不是说我要复制这个Active EXE文件,然后再次引用这个实例(文件名称自然是变过了,如COM2Handle.exe),那么这样的话我要同时通讯N个串口就需要建立N个文件,晕哦...

不过我想知道是如何能解决多个串口通信的时实性问题,如果说真的能通过引用N个进程来实现,那我也不管了的...



请各位大虾指教了~~!!!!!!!

7 个解决方案

#1


如果仅仅是将指定端口的数据导入数据库,那就用标准Exe,接收一个命令行参数为端口号,调用
for i=1 to 4
 shell "input.exe " & i
next

#2


谢谢楼上VB老鸟的指点

不过我数据库的写入用特定的函数来完成,这点我倒是没有问题.

现在的问题是"多个串行口实现同时通信,是否需要多个activeX EXE支持??或者是单独的一个activeX EXE只不过是多个实例来操作不同串行口??"

如下图:
方法1:使用同个组件的多个实例
CommHandling.exe         //使用一个clsComm Active EXE组件
clsComm1   ------  COM1  //clsComm是组件中的类,clsComm1-clsComm4分别是实例
clsComm2   ------  COM2
clsComm3   ------  COM3
clsComm4   ------  COM4

方法2:使用多个组件的各自的一个实例来操作
CommHandling1.exe 的 clsComm1    //一个进程对应一个串行口操作
CommHandling2.exe 的 clsComm2
CommHandling3.exe 的 clsComm3
CommHandling4.exe 的 clsComm4


-------------------------------------

大虾们,帮帮小人吧~~~很急啊!


#3


同组件多实例可以

#4


我下午试一下

嘿嘿

#5


顶一下先~!

#6


用第一种方法测试:

结果如下:

四个串口一起操作,结果CPU占用在10%以下,一般都在0%-5%

我把数据采集上来放入一个表中

客户端不端用定时器来进行读取库中表数据来刷新,运行得还算可以

---------------

但不知道为什么,我的active X EXE有的时候无响应了,应用程序也停滞了...(可能是系统问题吧...应该不会没有响应的啊...晕...)


#7


mark

#1


如果仅仅是将指定端口的数据导入数据库,那就用标准Exe,接收一个命令行参数为端口号,调用
for i=1 to 4
 shell "input.exe " & i
next

#2


谢谢楼上VB老鸟的指点

不过我数据库的写入用特定的函数来完成,这点我倒是没有问题.

现在的问题是"多个串行口实现同时通信,是否需要多个activeX EXE支持??或者是单独的一个activeX EXE只不过是多个实例来操作不同串行口??"

如下图:
方法1:使用同个组件的多个实例
CommHandling.exe         //使用一个clsComm Active EXE组件
clsComm1   ------  COM1  //clsComm是组件中的类,clsComm1-clsComm4分别是实例
clsComm2   ------  COM2
clsComm3   ------  COM3
clsComm4   ------  COM4

方法2:使用多个组件的各自的一个实例来操作
CommHandling1.exe 的 clsComm1    //一个进程对应一个串行口操作
CommHandling2.exe 的 clsComm2
CommHandling3.exe 的 clsComm3
CommHandling4.exe 的 clsComm4


-------------------------------------

大虾们,帮帮小人吧~~~很急啊!


#3


同组件多实例可以

#4


我下午试一下

嘿嘿

#5


顶一下先~!

#6


用第一种方法测试:

结果如下:

四个串口一起操作,结果CPU占用在10%以下,一般都在0%-5%

我把数据采集上来放入一个表中

客户端不端用定时器来进行读取库中表数据来刷新,运行得还算可以

---------------

但不知道为什么,我的active X EXE有的时候无响应了,应用程序也停滞了...(可能是系统问题吧...应该不会没有响应的啊...晕...)


#7


mark