您当前的位置:首页>>新闻中心>>行业动态

汽车衡串口连续输出数据的采集方法

时间:2017-08-19 04:34:41   点击数:

主要描述了8142 型称重显示仪表的串口数据的读取方法, 在主要部分还使用了 U M L 软件建模来辅助说明设计思路。

1.称重显示仪与计算机串口的连接方法

8142 型仪表具备 1 个串行口(9 ) 1 个并行口(25), 其中串行口与称重传感器连接接收称重信号 , 并行口可与计算机或大屏显示器连接输出数据。计算机与仪表的具体接线方法如图 1 所示。

云网客1.jpg

2.数据输出格式

在串口连接之前 , 可根据仪表的使用手册改变仪表的串口输出设置 , 本文的仪表串口输出设置为波特率(1200)、数据位(7bits)、无校验 、停止位(1)、连续输出 。仪表的连续输出格式为 18 个字节(By tes)。具体输出格式如表 1 所示 :

云网客2.jpg

其中 :<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串口数据的接收

串口接收的字节数据保存在长度为501维数组 中,当数组长度等于50时,停止接收串口数据,交给计时 器处理,在计时器事件中通过for循环在接收的数据中寻 找数字13 (ASCII码对应0D)找到后截取从OD开始的 5到第10位,即重量数据,再通过Chr函数将ASCII 转换为字符型数据,就可以得到正确的称重数据。具体处 理过程的顺序如图2所示。

云网客3.jpg

根据图3所示的过程处理顺序,给出称重数据截取的 实现代码。具体代码如下

Dim n As Integer

Dim Str(50) As Byte Dim Str1 (17) As Byte

Private Sub ComPort_ DataReceived (ByVal sender As ObjectByVal 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所示。

云网客6.jpg

4.结束语

本文所述的汽车的串口连续输出数据的采集方法 已经应用于实践当中。经实践证明,本方法切实可行,读 数稳定可靠。本方法可以用于其他采用重数据采集,也可以为采用涉及到串 口通信的项目提供一定的技术参考。