引言
在一般的配料工程中,要一台上位机对配料过程中所产生的一系列数据进行保存和统计,往往需要检测来自现场的一些开关信号。在应用工程中,在一般的上位机与称量仪表的通讯过程中,一般只用了3个引脚(TXD ,RXD ,GND),而还有6个脚(CD,DSR,CTS,RI,DTR,RTS)没有用到,而这些没有用到的引脚就正好可用于检测和输出开关量。
下面我将介绍基于VB6.0的平台做的一个小项目。
工程概况:该项目是广州科密集团公司用于一种新型耗材的配方研制所用的一个的自动配方管理软件。由于实验场所环境所限制,要求计算机不放在现场(不要求设立专人去操作计算机),只要求操作工人每称量按一下秤台旁边的一个按钮就可以存储当前每物料种类和其相应的重量,使管理系统以这个实验数据为依据,进行整理和加工。最后得出一些综合分析结果,为以后的正式生产提出配方工艺上的要求。因此系统本身就要求负责实时采集仪表的数据;实时采集开关量(按钮和转换开关的状态);实时的提醒操作员当些次配料是否有效果(根据配方来看是否报警也就是开关量的输出);还有存储当前当种物料的配料量,配方的管理,用户日后的数据查询和分析工作等。
根据这种要求,我们可以选择一种RAD工具来作为开发平台。
硬件配置:两套计量设备(包含两台定点输出仪表)一台计算机(工控机)
软件:本实例采用Microsoft公司的Visual Basic 6.0作为开发平台。Visual Basic是一种具有可视图形界面的、快速开发工具,同时它也较流行的开发工具。它可以利用Mscomm控件来完成对串口的控制和开关量的采用以及开关量的输出。
先介绍一下这九个引脚所代表的意义:
RXD表示接收数据
TXD表示发送数据
GND表示接地
注:(连接计算机和通讯仪表的接地端,开关量的输入的公共端就用仪表的电源)
CD表示调制解调器通知通计算机有载波被检测到
DTR表示计算机通知调制解调器可以进行传输
DSR表示调制解调器通知计算机准备就序
RI表示调制解调器通知计算机有电话打来
CTS表示调制解调器通知计算机可送出数据
RTS表示计算机要求调制解调器将数据发出
根据这些引脚的意义,我们将调制解调器当成其它的外部设备, CD、DSR、RTS、RI可以用于开关量的输入引脚。RTS和DTR可用于开关量的输出。
具体方法如下:
在工程中,添加部件Microsoft Comm Control 6.0控件。
1. 控件属性设置介绍:
Commport:设置或返回端口号。就是指 通讯的端口号, 用COMM1就设为1, 用COMM2就设为2, 但MSComm控件的最大值是16, 在本项目中同 时用了两个口, 因为需要和两台仪表进行通讯(常用计算机有两个串口, 如果串口不 够用的话, 可以买串口卡)。
Settings:设置并返回波特率、奇偶校验、数据位、停止位 。参数格式为:"BBBB,P,D,S"。例如“9600, E, 7, 2”;在RS232中双方必须完全一样, 彼此才能顺利的通信。否则的话将不 能正确的接收到来自对方的信号。
Handshaking:设置并返回硬件握手协议;(设为无)
InBufferSize:设置并返回接收缓冲区的字节数;
OutBufferCount:返回在传输缓冲区中等待的字符数。也可以用它来清除传输缓冲区;
DTREnable:确定在通讯时是否使 Data Terminal Ready (DTR) 线有效(设为有效)。
RTSEnable:确定在通讯时是否使 Request To Send (RTS) 线有效(设为有效)。
CommEvent:返回最近的通讯事件或错误。当发生错误或事件会产生OnComm事件。
InputMode:设置或返回Input 属性取回的数据的类型。它有两个参数, 0 表示以文字形式取回, 1表示以二进制形式取回。(设为0)
Rthreshold:设置并返回的要接收的字符数。
Sthreshold:设置并返回传输缓冲区中允许的最小字符数
InputLen:设置并返回 Input 属性从接收缓冲区读取的字符数。
2. 采集仪表当前数据
提醒:要和仪表通讯,在参数(Comports、Settings)设置上必须相互吻合。
先要打开对象
MSComm1.PortOpen = True
MSComm2.PortOpen = True
Private Sub MSComm1_OnComm ()
If MSComm1.CommEvent = comEvReceive Then // 收到Rthreshold # of
TxtReceive.Text = MSComm1.Input //将采集到的信息赋予到文本框
found1 = InStr(TxtReceive.Text, "+") //以下数行是对所采集到的数据进行处理加工,最终 得到我们想要的格式的数据。
… ……
If found1 > 0 Then
For i = 1 To leng Step 1
Strin1 = Mid(TxtReceive.Text, found1 + 1, 3)
Strin2 = Mid(TxtReceive.Text, found1 + 4, 3)
Format(Val(strin2), "000")
Next i
display1.Caption = Format(Val(strin1), "###0") + "." + Format(Val(strin2), "00")
End If
End If
//本项目中,也就是需要两个计量仪表的的当前数据)
3. 开关状态的采集
//检测四个引脚的工作状态(就是判断现场的开关状态和按钮状态)
在具体的应用过程中,要添加一个TIMER控件用于循环的检测这几个输入引脚的电位的高低。
Private Sub Timer1_Timer()
If MSComm1.CDHolding Then msgbox "CD is switch in! " //检测CD脚的电位
… … … … //消息处理过程
If MSComm1.CTSHolding Then msgbox "CTS is switch in! "//检测CTS脚的电位
… … … … //消息处理过程
If MSComm1.DSRHolding Then msgbox "DSR is switch in! "//检测CTS脚的电位
… … … … //消息处理过程
If MSComm1.CommEvent=comEvRing Then msgbox "RI is switch in!"//检测CTS脚的电位
… … … … //消息处理过程
End Sub
4. 两个开关量的输出
//就是控制两个引脚的电位,
5. 驱动的微型继电器工作
如果操作员在具体的配料过程中,出现错误(超出了配方所要求物料品种的误差范围),软件会将 DTR或者是RTS引脚上的电位抬高,驱动微型继电器来控制现场的报警装置。用报警来提示操作人员,本次配料不符合要求,需要添加或是减少份量。这样可以实时的纠正不必要了操作失误。
MSComm1.RTSEnable = True //抬高电位 使微型继电器动作接通报警器
MSComm1.DTREnable = True
总结
在本应用工程已在现场运行快一年时间,实践证明采用这种用串口来作开关量的检测和输出方式作有限开关量输入输出是可行的,也是可靠。因此在类似这种小型应用项目中,采用这种串口来作开关量的检测和输出做法,即满足了用户要求,又为用户提供了更多的选择,同时控制了工程的成本。