最近在使用Remon Spekreijse的CSerialPort类编写一个称重系统。整个项目内容如下:用PC通过串口连接11台配料机,配料机上的称重仪表使用的是深圳杰曼科技的GM88048C仪表,PC与仪表通信采用的协议使用的是Modbus
RTU协议。称重系统主要的通信功能是:1.通过PC向仪表发送指令设置配料机的目标值等2.通过PC向仪表发送指令控制配料机开始运行、结束运行等3.通过PC向仪表发送指令读取仪表中实时的称重数据。通信基本没有问题。称量的流程:在发送完开始运行命令后,需要实时读取称重数据并在PC上显示。等到所有的配料机的配料数据合适时,在程序中点击保存数据的按钮,结束运行并将最终的称量数据保存到数据库中。但由于程序一直在循环读仪表的数据,保存数据的按钮不能响应点击消息导致不能保存数据。目前的问题是:如何做到既能实时读取并显示仪表数据,又能在确定数据可以保存的时候及时的发送停止命令并保存数据。注:配料机结束运行时,会进行翻到之类的操作,要求的是在这期间也应实时显示数据。我的程序中所有对于读写消息的指令均在OnCommunication函数中处理,对多个仪表的读取采用环的方式即当上一个仪表读取成功时才对下一个仪表进行读取操作。我的思路是:采用多线程,即有个线程一直在负责采集数据,另外一个线程负责发送开始运行、停止运行等命令。但是由于对消息的处理都在OnCommunication函数中,这就要求多个线程共用这个函数,但该函数中有共享变量,估计处理时会很复杂,现在对多线程不了解,不知这个能否不用多线程做?希望各位朋友帮帮忙,最近因为这个挺闹心的
RTU协议。称重系统主要的通信功能是:1.通过PC向仪表发送指令设置配料机的目标值等2.通过PC向仪表发送指令控制配料机开始运行、结束运行等3.通过PC向仪表发送指令读取仪表中实时的称重数据。通信基本没有问题。称量的流程:在发送完开始运行命令后,需要实时读取称重数据并在PC上显示。等到所有的配料机的配料数据合适时,在程序中点击保存数据的按钮,结束运行并将最终的称量数据保存到数据库中。但由于程序一直在循环读仪表的数据,保存数据的按钮不能响应点击消息导致不能保存数据。目前的问题是:如何做到既能实时读取并显示仪表数据,又能在确定数据可以保存的时候及时的发送停止命令并保存数据。注:配料机结束运行时,会进行翻到之类的操作,要求的是在这期间也应实时显示数据。我的程序中所有对于读写消息的指令均在OnCommunication函数中处理,对多个仪表的读取采用环的方式即当上一个仪表读取成功时才对下一个仪表进行读取操作。我的思路是:采用多线程,即有个线程一直在负责采集数据,另外一个线程负责发送开始运行、停止运行等命令。但是由于对消息的处理都在OnCommunication函数中,这就要求多个线程共用这个函数,但该函数中有共享变量,估计处理时会很复杂,现在对多线程不了解,不知这个能否不用多线程做?希望各位朋友帮帮忙,最近因为这个挺闹心的
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货