浅析使用COM口读取梅特勒托利多天平称重结果的方法
2015-06-07曾天翔
曾天翔
(上海朗脉洁净技术股份有限公司,上海201100)
浅析使用COM口读取梅特勒托利多天平称重结果的方法
曾天翔
(上海朗脉洁净技术股份有限公司,上海201100)
针对当前人机界面软件(HMI)需要精确显示天平称重结果的需求,提出了一种利用电脑串行口(COM口)与梅特勒托利多天平通讯,从而精确读取称重结果的方法。分析了传统I/O通道读取称重结果的缺点,介绍了使用COM口读取梅特勒托利多天平称重结果的具体实现步骤。通过实践证明,这种方法可以在不需要模拟量输入模块的情况下精确地读取相应天平的称重结果,在自控领域有着广阔的应用前景和推广价值。
人机界面;梅特勒托利多天平;COM口通讯;MT-SICS;重量读取
1 传统人机界面数据的读取方法
传统的人机界面(HMI)软件并不能直接读取称重设备的数据。一般来说,传统的做法是由PLC模拟量输入模块连接称重设备,称重设备先将其称重数据通过其内置的数模(D/A)转换模块转换为PLC模拟量模块可以识别的4~20 mA信号,并通过其输出通道输出到PLC的模拟量输入通道上。PLC的模拟量输入通道再将其收到的4~20 mA信号通过其内置的模数(A/D)转换模块转换为具体的称重数值发送给人机界面(HMI)软件,最后由人机界面(HMI)软件显示给最终用户。传统读取方法数据流如图1所示。
图1 传统读取方法数据流
由于无论是模数(A/D)转换,还是数模(D/A)转换过程,都将会产生一定的量化误差,所以最终用户得到的读数并不一定会与称重设备上显示的读数一致。以12位精度的转换模块为例,它的量化精度为总量程的1212-1即14 095,如果称一个质量为100 kg的物体,理论上会产生24 g左右的误差。而经过D/A转换后再经历一次A/D转换,以上的误差将会被再次扩大。如果4~20 mA电信号在传输过程中再受到干扰等因素的影响,实际产生的误差将会超过我们的允许范围。产生的现象可能是在实际称重设备上显示为“100.000 kg”,而最终用户在HMI屏幕上读到的是“99.855 kg”。
2 方案总体设计
2.1 方案构想
如果能找到一种方法,将称重设备的数据通过通讯的方式,而不是转换为电信号的形式,直接读取到人机界面(HMI)上显示的数据的话,那么就能够解决以上出现的问题。新读取方法数据流如图2所示。
图2 新读取方法数据流
2.2 电气连接
通常的人机界面(HMI)软件都是安装在计算机内的。而对于计算机而言,除了以太网及USB接口外,还有一种常用的数据接口叫作串行通讯端口(COM口)。对于一个计算机而言,可以有多个COM口。我们可以在设备管理器中查看当前计算机的串行通讯端口数量(图3)。
图3 计算机中的串口
计算机上的COM口通常是9针,其外观如图4所示,最大速率115 200 bps。通常用于连接鼠标(串口)及通讯设备,如连接外置式MODEM进行数据通讯或一些工厂的CNC机接口等。COM口的接口标准规范和总线标准规范是RS-232,有时候也叫做RS-232口。
图4 常用9针串口外观
对于称重设备来说,以梅特勒托利多ICS429系列产品为例,其背面接口如图5所示[1]。
图5 ICS429接口图
其中5为9针COM接口。虽然形状与电脑上的COM口不一样,但是管脚定义是一致的。为了能够与电脑连接,需要选购专门的转接线将其与电脑的COM口相连。
2.3 通讯测试
完成了电气连接后,接下来需要测试电脑与称重设备之间的通讯是否建立。我们可以利用Windows的通讯工具“超级终端”(图6)来完成这一步操作。
图6 超级终端
打开超级终端,根据称重设备的出厂设置将计算机串行通讯端口的参数设置好,如图7所示。梅特勒托利多ICS429系列产品在出厂设置中,将其通讯参数设置成了波特率:9 600、校验:无校验、数据位:8位、停止位:1位。
图7 串口参数设置
完成以上设置后,按下称重设备面板(图8)上的“打印”按钮,在超级终端的窗口中,将出现如下字符串“SS 1.203 kg”,其中“1.203 kg”即为称重面板上显示的重量[1]。
图8 ICS429操作面板图
2.4 通讯指令
在实际使用过程中,我们不可能每次都通过按“打印”键来读取数据。如何能让称重设备周期性地将其称重结果发送给计算机呢?接下来将要使用的是通讯指令。梅特勒托利多针对其产品有着一套专用的通讯指令MT-SICS(Standard Interface Command Set),以便实现各种各样的功能。这套指令被分为4个级别level 0~level 3,所包含的命令由简单到复杂,像传送称重结果这样的简单指令被包含在了level 0中。通过相关手册,查找到指令“SI”可以命令称重设备将当前重量立即发送给计算机[2]。
2.5 编程实现
2.5.1 数据读取
通过计算机的串行通讯端口(COM)向称重设备发送通信指令,并分析称重设备发回的字符串,将其中的重量数据提取出来的工作,可以通过编程实现。其中对于计算机串行通讯端口的驱动,我们可以通过ActiveX控件实现。ActiveX控件是一种可重用的软件组件,通过使用ActiveX控件,可以很快地在网址、台式应用程序以及开发工具中加入特殊的功能。如今已有1 000多个商用的ActiveX控件,开发控件可以使用各种编程语言,主要的编辑语言是C++、VB、VC、C#、Java、delphi、PowerBuilder、VBScript。ActiveX控件一旦被开发出来,设计和开发人员就可以把它当作预装配组件,用于开发客户程序。以此种方式使用ActiveX控件,使用者无需知道这些组件是如何开发的,在很多情况下,甚至不需要自己编程,就可以完成网页或应用程序的设计[3]。
我们以VB为例,在设计窗体上加入“MS Comm”控件,MSComm作为一个串行通讯控件为程序员串口通讯编程节省了很多时间。
第一步需要编写VB脚本,打开相应端口,打开串口前需要按照称重设备的通讯参数设置计算机串口的参数。下面以梅特勒托利多ICS429系列产品的出厂设置为例,编写了打开串口的VB脚本。
Sub SetComm()
MS1.CommPort=1 设置空间端口号为COM1
MS1.Settings="1200,o,7,1" 设置通讯参数波
特率1 200 bps,奇校验,7位数据位,1位停止位
MS1.PortOpen=True 打开端口
MS1.InBufferCount=0 初始化输入缓冲区
End Sub
要想周期性地读取称重设备的称重结果,需要周期性地向称重设备发送指令“SI”。先在设计窗体上添加一个时钟控件Timer1,并将其时间间隔设置成1 s。在其Timer事件中编写如下脚本:
Private Sub Timer1_Timer()
MS1.OutBufferCount=0 初始化发送缓冲区
MS1.Output=Chr(83) 发送“S”
MS1.Output=Chr(73) 发送“I”
MS1.Output=Chr(13) 发送回车
MS1.Output=Chr(10) 发送换行符
End Sub
其中Chr(83)、Chr(73)分别对应“S”、“I”,Chr(13)、Chr(10)表示回车换行符,因为称重设备只有检测到回车换行符才会认为当前指令发送完毕,从而开始执行相应命令。当称重设备收到“SI”指令后,将返回字符串“SS 1.203 kg”,其中“1.203 kg”即为称重面板上显示的重量。由于“MSComm”控件是事件驱动型的,当计算机相应串行通讯端口接收到数据时会触发其“OnComm”事件。我们需要在其“OnComm”事件中编写相关脚本才能将称重设备发送过来的重量数据提取出来。
Private Sub MS1_OnComm()
Dim sTemp As String 变量定义
Select Case MS1.CommEvent
Case comEvReceive如果收到数据则开始处理
sTemp=MS1.Input 读取收到的数据
sReceive1=sReceive1&sTemp 将收到的字符与上次收到的字符拼接起来
If sTemp=Chr(13)Then 如果收到回车符则表示读取完毕
If Len(sReceive1)>6 Then 判断收到的信息完整性,长度必须大于6
If InStr(1,sReceive1,"S",vbTextCompare)
<>0 Then 必须包含字符“S”
W1=GetNum(sReceive1) 读取重量数据
End If
End If
sReceive1="" 清空读取到的字符,准备下一次读取
MS1.InBufferCount=0 清空读取缓冲区,准备下一次读取
End If
Case Else
MS1.InBufferCount=0 如果收到错误数据,则清除读取缓冲区
End Select
End Sub
Function GetNum(ByVal S As String)As Double
Dim l As Integer,i As Integer,Start_P As Integer,
Stop_P As Integer,Sig As String 变量定义
On Error Resume Next 如果发生错误,则忽略错误
l=Len(S) 获得转换字符的长度
Start_P=0 初始化转换数据起始点
Sig="" 初始化符号位
For i=1 To l 利用循环查找整个字符串
Select Case Mid(S,i,1)
Case"0","1","2","3","4","5","6","7","8","9"∶
If Start_P=0 Then Start_P=i如果找到数字则设置转换数据起始点
Case""∶
If Start_P>0 Then Stop_P=i 如果读取到数字后又找到空格,则设置转换数据结束点
Case"+","-"∶ 如果读取到符号,则设置符号位
Sig=Mid(S,i,1)
End Select
Next i
If Start_P>0 Then
GetNum=CDbl(Sig+Mid(S,Start_P,Stop_PStart_P)) 将转换数据起始点与结点之间的内容算上符号位转换成数值类型数据
Else
GetNum=0 如果转换失败,返回0
End If
End Function
其中函数GetNum用来分析收到的字符串,将称重设备发送过来的重量数据提取出来。至此,我们实现了周期性命令称重设备将其所获得的称重数据发送给计算机的功能,接下来只需要将所获得的称重数据显示到人机界面(HMI)上就可以了。
2.5.2 数据显示
将称重数据显示到人机界面(HMI)需要建立与人机界面(HMI)之间的数据接口。而最简单的数据接口可以利用数据交换文件来实现。例如,将上面读取到的称重数据周期性地写入一个文本文件中;而在人机界面(HMI)软件中,编写相应脚本,周期性地将文本文件的内容读取到变量中并显示到屏幕上即可。其中数据交换文件可以根据实际要求选用文本文件、Excel文件或数据库文件来实现,其中以文本文件的读写最为方便,适用于数据量较小,且对数据实时性要求不高的场合。
读写文本文件可以通过以下脚本实现:
Sub SaveToFile()
Open"D∶DATAWEI.TXT"For Output As#1打开文本文件
Write#1,W1 写入重量数据
Close 1 保存并关闭文本文件
End Sub
Sub ReadFromFile()
Dim S as String
Open"D∶DATAWEI.TXT"For Input As#1打开文本文件
Input#1,W1 读取重量数据
Close 1 关闭文本文件
End Sub
由于RS-232通讯接口为点对点通讯接口,即一台称重设备需要占用1个串行通讯端口,如果有多台称重设备则需要占用多个串行通讯端口。当计算机上的串行通讯端口数量不足的时候,我们可以使用USB转COM的硬件来扩展串行通讯端口。
3 结语
实践证明,以通讯的方法获得称重设备的称重数据,不仅避免了量化误差的影响,使得人机界面(HMI)软件上显示的读数与称重设备上显示的完全一致,满足了计算机系统验证方面的要求,而且不需要任何的PLC模拟量输入模块,减少了成本,是一种值得推广的好方法。
[1]METTLER TOLEDO.ICS429用户手册[Z].2001:25-47.
[2]METTLER TOLEDO.ICS4X9 SICS通讯手册[Z].2000:43-78.
[3]乔平安.Visual Basic6.0程序设计[M].人民邮电出版社,2013:232-257.
Get the Weighing Result of METTLER TOLEDO Scale from COM Port
Zeng Tianxiang
(Shanghai Macroprocess Lustration Technology Co.,Ltd.,Shanghai 201100)
In order to meet the requirements of high display accuracy for human-computer interface(HMI)software,a new method that can get the weighing results accurately by communicate with the METTLER TOLEDO devices using PC COM ports is introduced accordingly.This paper analyzes the shortcoming of traditional communicate method using I/O channels,introduces the concrete implementation steps of the new method.The practice proved that by using the new method,we can read the weighing results accurately without any analog input module and shows that it has broad prospect of application and popularization in automation field.
HMI;METTLER TOLEDO scale;COM communication;MT-SICS;get weighing result
2015-09-06
曾天翔(1979—),男,上海人,工程师,从事工业自控系统的设计及应用工作。