Update avaliable. Click RELOAD to update.
目录

C#串口获取称重设备的实现方案

1. 串口概念

串口即是com口,笔记本电脑没有串口,现在的台式机有串口的也很少,需要另配串口卡,一般位于机箱后面的9针公口(非VGA口)。实现串口通信的协议有多种,常用的是RS232协议,只要输入设备存在串口就可以通过标准协议读取此设备的数据。

串口通信是双向的,既可以获取数据,也可以向设备发送指令数据,这个要看设备具体是否支持指令的发送。通常发送指令的目的是变更设置、获取数据(非连续输出)、开关设备等。

本文中的串口设备使用的称重设备,电子秤、地磅,只负责读取,不写入。

2. 一些提示

波特率使用设备缺省的即可,若将设备的校验位设置为空,则数据位随意。传输方式需要设置为连续输出,连续输出的意思是当COM口打开时设备不停的向串口发送数据,除了连续输出还有指令输出,即只有发送指令设备才向COM口发送数据。

3. 实现代码

使用C#操作串口使用SerialPort类,实现的步骤为设置串口参数、打开串口监听、获取数据事件、关闭串口,主要代码如下:

// -------------------- 定义串口对象及委托事件 --------------------
private SerialPort Com_SerialPort = new SerialPort();
private delegate void UpdateTextEventHandler(string data);
private UpdateTextEventHandler updateText;

private void SerialForm_Load(object sender, EventArgs e)
{
	// 注册委托事件,核心
	updateText = new UpdateTextEventHandler(UpdateTextBox);
}

private void button1_Click(object sender, EventArgs e)
{
	Com_SerialPort.PortName = "COM1";	// 使用哪个串口
	Com_SerialPort.BaudRate = 9600;	// 波特率
	Com_SerialPort.DataBits = 7;		// 数据位
	Com_SerialPort.Parity = Parity.None;	// 校验位
	Com_SerialPort.StopBits = StopBits.None;// 停止位
	Com_SerialPort.Open();
	Com_SerialPort.ReceivedBytesThreshold = 1;
	Com_SerialPort.DataReceived += new SerialDataReceivedEventHandler(Com_SerialPort_DataReceive);
}

void Com_SerialPort_DataReceive(object sender, SerialDataReceivedEventArgs e)
{
	Thread.Sleep(20); // 时间短可能导致数据读取不完整
	string data = Com_SerialPort.ReadExisting();
	this.Invoke(updateText, new string[] { data });
}

// 核心方法,当打开串口时,串口设备会不停调用此方法
private void UpdateTextBox(string text)
{
	// 这里的text就是设备输入的数据
	label1.text = text;
}

每个设备输入的协议会有所不同,即UpdateTextBox方法中的text变量不同,如”30 726 00”,30代表称重设备的稳定状态,38代表不稳定,726代表称重重量,即72.6kg,所以text需要根据设备具体的输出区别对待。

4. 测试程序

下面的程序是当时为了便于调测串口称重设备时做的,包含基本的称重数据读取及原始数据的输出,不支持发送指令。

称重程序截图

链接: //pan.baidu.com/s/1o8oLe7w 密码: tdei

SerialDemo.zip源码保存在个人百度网盘的博客保存的源码目录中(给自己看的)

版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2017/07/serial-port-weight/