溯源系统电子秤编程调试
扫描二维码
随时随地手机看文章
引言
蔬菜是我们日常生活中必不可少的食物之一,蔬菜质量是 否安全直接影响我们的健康。本文在调研蔬菜企业实际业务 流程的基础上,对蔬菜种植及加工过程中记录所有生产数据、 检疫数据、加工数据、销售数据等数据进行实时跟踪记录。
溯源系统的“销售数据模块”中的蔬菜称重由串口电子秤 来完成,我们的需求是需要串口电子秤联入网络,蔬菜称重时, 电子秤通过串口返回数据给电脑,并将数据通过Socket发送 给网络上的服务器并记录下来。
实际上常用的电子秤与电脑交互采用两种方式。一种是 连续传送方式,电脑不用发送数据给电子秤,电子秤每隔一 段时间将“重量”发给电脑。还有一种是指令传输方式,在这 种情况下,电子秤只在输入指令的情况下,才会向电脑发送数 据。不过这种方式有个最大的缺点,在输入的指令错误的情 况下,不会返回任何信息。我们测试它的连续方式。下面先进行电子秤的设置。
1电子秤设置
先通过调试说明设定波特率,程序中和机器中必须设置 一样的波特率才能正确地收发数据。其次设置“通信协议”。 按照电子秤的说明进行配置,下面我们就进行配置。
1.1系统设置
开机进入称重状态,同时按数字键“1”和“总计”键, 进入设定状态。
屏幕显示“CLOSE”,按“去皮”键选择,“CLOSE”为 关闭串口,“SER”为打开串口。按“累清/设定”键确认,进 入下一步。
屏幕显示“B ****”,按“去皮”键选择“波特率”,按“累 清/设定”键确认,进入下一步。
屏幕显示“P **”,按“去皮”键选择“通讯协议”,按“累 清/设定”键确认并进入下一步。
1.2电子秤协议选择列表
本系统中的电子秤协议如表1所列。
表1电子秤协议
编号 |
名称 |
发送方式 |
说明 |
1 |
协议A |
连续发送 |
含地址、单价、金额 |
2 |
协议B |
连续发送 |
仅重量 |
3 |
协议C |
连续发送 |
仅重量 |
4 |
协议D |
连续发送 |
仅重量 |
5 |
协议D |
稳定发送 |
仅重量 |
6 |
协议E |
连续发送 |
仅重量 |
7 |
协议E |
稳定发送 |
仅重量 |
8 |
协议F |
连续发送 |
含单价、金额 |
9 |
协议F |
稳定发送 |
含单价、金额 |
1.3电子秤通讯协议数据格式
8位数据位,1位停止位,无校验位。我们选择系统默认 的协议D进行设计。字节1 (ASCII):=起始位,字节2〜8 (ASCII):按先低后高的顺序发送6位重量数据,最后发送符 号位,其中表示负数,空格表示正数,不满8个数据则 用空格填满。
2电脑串口设置
用鼠标右键单击“我的电脑”,在弹出的菜单中选择“属 性”,然后选择“硬件”,“备管理器”,在弹出的窗口数型目录 中选择“通信端口(COM1)”,弹出的窗口如图1所示。对“端 口参数”进行设置,一定要和自己所选取的电子秤匹配。波特 率9 600、8位数据位、1位停止位、无校验位,图1所示是 系统通信端口 (COM1)的属性设置界面。
3程序设计
C/S 程序开发使用 Visual Studio 2010, Visual Studio 2010可简化在各种平台上创建、调试和开发应用程序的过程, 是供开发人员执行基本开发任务的重要工具。它自带对测试驱 动开发的集成支持及调试工具,以帮助确保提供高质量的解 决方案。
3.1界面设计
本系统使用Visual Studio 2010中的SerialPort控件访问
串口。把电子秤配置好后,然后开始编程序。在项目中,电子 秤收发数据的子界面如图2所示,其主要任务就是把电子秤 称重时的重量信息实时地传递给窗体,在重量文本框中显示 出来。至于Socket在另外的模块来实现,这里不讨论。
图2电子秤称重模块
3.2串口配置程序
本系统选择串口通信口为COM1,设置串口通信波特率 为9 600和电子秤,设置串口通信数据位,设置串口通信停止 位1位,设置串口通信无校验。其重点程序如下:
Serialport_C.PortName = "COM1":
Serialport_C.BaudRate = 9600 ;
Serialport_C .DataBits = 8 ;
Serialport_C.StopBits = System.IO.Ports.StopBits.One ;
Serialport_C.Parity = System.IO.Ports.Parity.None ;
使用Visual Studio中的Serialport控件初始化,可设置 缓存并判断串口是否打开状态,如果没有打开则打开串口。程 序如下:
Serialport_C.ReadBufferSize = 1024 ;
if (Serialport_C.IsOpen)
{
MessageBox.Show(“ 串 口 已打开! ”,“提示”, MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
Serialport_C.Open();
}
3.3数据的读取与显示
接收缓冲读取全数据,设置OnComm事件的字节长度, 清空缓冲区,定时器启动。程序如下:
Serialport_C.ReadExisting();
Serialport_C.ReceivedBytesThreshold = 1;
Serialport_C.DiscardInBuffer();
timer1.Start();
串口数据的检测读取:就是从Serialport控件的缓存中读 取数据位,如果有数据,则读取数据并存入一个数据组中。
int bytes = Serialport_C.BytesToRead ;
byte[] buffer = new byte[bytes] ;
if (bytes == 0)
{
return ;
}
Serialport_C.Read(buffer,
0,
bytes) ;
把取出数组中的数据转换为字符型数据并连接在一起准
备输出 :
string srt = string.Empty ;
string str = string.Empty ;
for (int Index = 0 ;
Index < buffer.Length ;
Index++)
{
str += ((Char)(buffer[Index])).ToString() ;
}
在程序界面上实现字符串的翻转显示 :
String output = string.Empty ;
for ( int i = str.Length ;
i > 1 ;
i-- )
{
output += str.Substring(i - 1,
1) ;
}
textBox1.Text = output ;
}
把取出数组中的数据转换为字符型数据并连接在一起准
4结语
至此,就可以完成“电子秤称重数据”的动态读取了。在 测试过程中也不是一帆风顺的,首先电子秤和电脑串口的连接 要保证物理通路,在这个基础上才能进行下一步的工作;其 次要正确配置好电子秤,波特率要一定要保证一致;还要选 择适当的传输协议,如果这个不正确,后面的程序就不用写了; 最后还要写出对应的读取程序。要正确对返回的ASCII码进行解码,这样才能得到正确的结果,当然,这里只是针对电 子秤的调试和数据处理过程,网络中的Socket发送在另外模 块实现。
20211117_6193d627af724__溯源系统电子秤编程调试