汽车衡串口连续输出数据的采集方法
主要描述了8142 型称重显示仪表的串口数据的读取方法, 在主要部分还使用了 U M L 软件建模来辅助说明设计思路。
1.称重显示仪与计算机串口的连接方法
8142 型仪表具备 1 个串行口(9 针)和 1 个并行口(25针), 其中串行口与称重传感器连接接收称重信号 , 并行口可与计算机或大屏显示器连接输出数据。计算机与仪表的具体接线方法如图 1 所示。
2.数据输出格式
在串口连接之前 , 可根据仪表的使用手册改变仪表的串口输出设置 , 本文的仪表串口输出设置为波特率(1200)、数据位(7bits)、无校验 、停止位(1)、连续输出 。仪表的连续输出格式为 18 个字节(By tes)。具体输出格式如表 1 所示 :
其中 :①<ST X > ASCII 起始符 (02H);②状态字A ,B ,C ;③显示重量 , 可能是毛重也可能是净重 , 6 位不带符号和小数点的数字 ;④皮重 , 6 位不带符号和小数点的数字 ;⑤<CR > ASCII 回车符(ODH);⑥<CKS > 可选的校验和。
通过串口调试软件接收的数据样例 :
20202020202020202020200D02293C202020202020202 02020200D 称重重量的读取
2 .1 串口设置
在了解了 8142 型仪表的串口通信设备和输出格式之后就可以开发相应的串口通信程序了 , 为了使串口通讯程序有一定的通用性 , 因此串口的波特率、数据位等将通过程序而不通过 Window s 设置。
要通过程序设置串口 , 首先应该在窗体的设计时插入一个 Serial Port 组件 , 然后在代码窗口中输入如下代码 :
If N ot RS232 Is Nothing T hen RS232 =Nothing
Dim mBaudRate A s Integer '传输速率
Dim mParity As Parity '奇偶校验
Dim mDataBit A s Integer '数据位
Dim mStopBit A s StopBits '停止位
Dim mPortN ame As String mPortN ame =“Com1”
mBaudRate =“1200” mParity ="Parity .None"
mDataBit =7
mStopBit =”StopBits .One” T ry
RS232 = N ew SerialPort (mPortN ame ,
mBaudRate , mParity , mDataBit , mStopBit) Catch ex A s Exception
MessageBox .Show ("串口设置失败" + ex . Message , "提示", MessageBoxButtons .OK , Message-
BoxIcon .Warning)
End T ry End If
本文通过 XM L 文档来保存串口设置的参数 , 用于保存串口参数的 XM L 文档命名为 XlComSet .xml , 具体格式如下 :
xml version ="1 .0"? > <ComSet >
<Com ComName ="COM1"Rate ="1200"Dat-aBit — 7 Parity — None StopBit — One ReceiveN ull —0 DataChar= Unicode ">
〈/Com>
< Count Date= '20101018 " Number - "2 ">
〈/Count>
〈/ComSet>
其中:
ComName为串口号、Rate为波特率、DataBit为数据 位、Parity为奇偶校验、StopBit为停止位、ReceiveNull为 是否接收空字符、DataChar为编码方式。程序通过计时 器(Timer)与串口通信(SerialPort)组件配合读取串口数 据,经测试Timer组件的时间间隔设置为600ms,并且串 口的接收方式为按字节接收数据时,所接收的串口数据连 续可读,且与表1所描述的数据格式一致。
2.2串口数据的接收
串口接收的字节数据保存在长度为50的1维数组 中,当数组长度等于50时,停止接收串口数据,交给计时 器处理,在计时器事件中通过for循环在接收的数据中寻 找数字13 (ASCII码对应0D),找到后截取从OD开始的 第5到第10位,即重量数据,再通过Chr函数将ASCII码 转换为字符型数据,就可以得到正确的称重数据。具体处 理过程的顺序如图2所示。
根据图3所示的过程处理顺序,给出称重数据截取的 实现代码。具体代码如下:
Dim n As Integer
Dim Str(50) As Byte Dim Str1 (17) As Byte
Private Sub ComPort_ DataReceived (ByVal sender As Object,ByVal e As System. IO. Ports. SerialDataRe- ceivedEventArgs) Handles ComPort. DataReceived Dim Sy As Byte Sy = ComPort. ReadByte()
Str(n) = Sy n = n 十 1 If n > 50 Then n = 50 End If E nd Sub
Private Sub TimerCom_Tick (ByVal sender As Ob-ject 9 ByVal e As System. EventArgs ) Handles Timer-Com .Tick
txt Receive .Text = n =0
Dim i As Short For i = 0 To 50 IfStr(i) = 13 Then E xi t Fo r End If N ex t
Ifi< 30 Then
For j As Short = i 十 5 To i 十 10
txt Receive .Text += C hr ( St r (j))
N ex t End If E nd Su b
3汽车称重窗体的设计思路
在称重窗体中司镑员首先选择被称重车辆的车牌号 码,当显示重量的标签读数稳定不变时,司镑员点击[接收 毛重]按钮,读取到的重量应自动减去车辆的皮重,从而得 出车辆净重,并且镑单编号应根据当前日期自动加1,如 “2010一 10 — 10 — 001”。为保证镑单编号的唯一性,因此 其中“001”应在点击打印按钮之后自动加1。当司镑员点 击[接收皮重]按钮,皮重Panel会被激活,皮重即空车重 量。点击[保存]按钮后,当前读取的重量应替代之前保存 的皮重。具体操作方法应如图3所示。
4.结束语
本文所述的汽车衡的串口连续输出数据的采集方法 已经应用于实践当中。经实践证明,本方法切实可行,读 数稳定可靠。本方法可以用于其他采用磅重数据采集,也可以为采用涉及到串 口通信的项目提供一定的技术参考。