Load frmGetData.lblAcmd(Index) Load frmGetData.lblGcmd(Index) Load frmGetData.TimeReComm(Index) Load frmGetData.TimerSend(Index) Load frmGetData.MSCommDCS(Index) frmGetData.MSCommDCS(Index).Settings = .Fields(set) frmGetData.MSCommDCS(Index).CommPort = .Fields(rs232com) frmGetData.MSCommDCS(Index).PortOpen = True frmGetData.MSCommDCS(Index).RThreshold = 1 frmGetData.TimeReComm(Index).Interval = 1 If i = 1 Then frmGetData.lblAcmd(Index).Visible = True frmGetData.lblGcmd(Index).Visible = True End If .MoveNext Next i End With 3-2 RS232C TTY 串口通信是事件驱动的 RS232 TTY通信程序开发一般采用2种方法: 1)查询法:程序不断地查询RS232TTY 口,如果有数据则接收,否则继续查询。 2)中断法:有通信事件产生时则自动产生中断,程序转入通信事件处理模块。 鹰化厂生产调度监测系统数据采集软件采用中断法开发。RS232C TTY 串口通信是利用VB5.0的MSCOMM通信控件实现的,在通信过程中,各个通信事件自动驱动相关的处理模块,使数据采集程序的结构性好,便于调试,并且在处理串口通信的过程中占用CPU时间少。 3-3 通信格式的处理 在与DCS系统进行通信的过程中,数据采集向DCS系统发送数据采集请求,其请求的命令格式必须严格地遵照各个DCS的通信命令的格式要求,如果有误,则采集不到DCS的数据。本系统对通信格式先作预处理,利用数据维护子模块得到符合各个要采集的DCS系统的通信格式的采集命令字符串,并且存放至数据库的相关表格记录之中,在要进行通信时,只需要从相关表格中取得此字符串,发往相应的RS232C TTY口即可,这样采集程序运行时不再需进行通信格式的生成,使得程度的运行效率得到提高,并且由于采集程序不涉及到通信命令的生成,使得程序不可能产生通信格式方面的错误,因此程序运行的可靠性大大提高。
以下子程序实现从数据库中取出通信命令字符串并给RS232口: Public Sub SendTGData(Index As Integer) Dim strData As String Dim strFindIndex As String frmGetData.lblAcmd(Index).Caption = FlagLineBusy(Index) = True frmGetData.datQRunPageCom.Refresh With frmGetData.datQRunPageCom.Recordset strFindIndex = rs232com= & Index .FindFirst strFindIndex If .NoMatch = False Then strData = .Fields(Gcommand) frmGetData.MSCommDCS(Index).Output = strData frmGetData.lblGcmd(Index).ForeColor = vbBlack frmGetData.lblGcmd(Index).Caption = strData frmGetData.lblGcmd(Index).Refresh Else frmGetData.lblGcmd(Index).Caption = End If End With End Sub 3-4 数据包的处理 DCS系统得到上位机的数据采集要求后,便把上位机所要求的过程数据进行数据打包处理并发给上位机。为了提高通信效率,上位机一次要求的数据不止一个,DCS系统回应的数据包中包含这些数据,这样便要求有一个解开数据包的子模块。本系统的数据采集解数据包子模块利用数据过滤的算法得到单个过程数据,之后把此过程数据放入一个过程数据集合中,于是便得到各个过程数据。