C#串口通信-向串口发送数据,同步接收返回数据
来源:互联网 发布:linux jmx监控tomcat 编辑:程序博客网 时间:2024/05/22 02:01
最近写C#串口通信程序,系统是B/S架构。SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了。所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件。经过测试,可以正常使用(不支持多线程调用)。
一、Machine类
1、Machine类有一个静态变量,定义如下:
private static SerialPort serialPort = null;
2、向串口发送数据,同步接收返回数据的方法:
/// <summary>/// 向串口发送数据,读取返回数据/// </summary>/// <param name="sendData">发送的数据</param>/// <returns>返回的数据</returns>private byte[] ReadPort(byte[] sendData){ if (serialPort == null) { serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); serialPort.ReadBufferSize = 1024; serialPort.WriteBufferSize = 1024; } if (!serialPort.IsOpen) { serialPort.Open(); } //发送数据 serialPort.Write(sendData, 0, sendData.Length); //读取返回数据 while (serialPort.BytesToRead == 0) { Thread.Sleep(1); } Thread.Sleep(50); //50毫秒内数据接收完毕,可根据实际情况调整 byte[] recData = new byte[serialPort.BytesToRead]; serialPort.Read(recData, 0, recData.Length); return recData;}
3、发送联机指令:
/// <summary>/// 联机/// </summary>/// <returns>联机成功或失败</returns>public bool Connect(out string msg){ byte[] sendData = new byte[] { 0x01, 0x01, 0x00, 0x00 }; CommonUtil.CalCheckCode(sendData); byte[] recData = ReadPort(sendData); if (recData.Length >= 4 && recData[0] == 0x01 && recData[1] == 0x02 && recData[2] == 0x00 && CommonUtil.ValidCheckCode(recData)) { switch (recData[3]) { case 0x00: msg = "控制主板正在重启"; return false; case 0x01: msg = "联机成功"; return true; case 0x02: msg = "控制主板正在维护"; return false; case 0x03: msg = "控制主板收到的数据格式不正确"; return false; default: msg = "未知状态"; return false; } } else { msg = "货机返回的数据格式不正确"; return false; }}
二、如何使用,这里是在C/S程序中测试,在B/S程序中也可以正常使用,下面是窗体Form1类中的代码:
1、定义对象及初始化
private Machine machine = null;public Form1(){ InitializeComponent(); machine = new Machine();}
2、联机事件
//联机private void btnConnect_Click(object sender, EventArgs e){ string msg = null; if (machine.Connect(out msg)) { MessageBox.Show("成功:" + msg); } else { MessageBox.Show("失败:" + msg); }}
0 0
- C#串口通信-向串口发送数据,同步接收返回数据
- C# SerialPort串口通信发送接收,处理接收数据完整
- 串口接收数据c#
- 串口接收数据c#
- 串口接收数据c#
- c#串口发送数据
- [CC2530]串口接收发送数据
- C#----串口数据接收发送
- 查看串口,向串口发送数据
- vb mscomm1串口通信接收发送十六进制数据
- Stm32RS232串口通信——中断接收发送数据
- Stm32RS485串口通信——中断接收发送数据
- Stm32RS232串口通信——中断接收发送数据
- stm32RS485串口通信——中断接收发送数据
- 向串口发送数据,并获得返回值
- C# UDP、串口的数据接收与发送
- C#通讯编程入门--串口数据接收发送实例
- 串口通信----串口接收框接收不到数据
- 从新开始学习scala,有许多问题打扰各位大神了
- drools用户指南----stateful session(有状态会话)的使用
- 二叉树的前序遍历-LintCode
- XAMPP和WORDPRESS(上)
- hellocharts-android-Android图表开源库的使用(一)
- C#串口通信-向串口发送数据,同步接收返回数据
- POJ 2411 Mondriaan's Dream (状压dp)
- Terracatta安装windows&linux
- Android SD卡检测和SP数据保存不及时解决方案
- dubbo(一):dubbo简介
- python_Python中用format函数格式化字符串的用法
- hdu_2955
- hellocharts-android-Android图表开源库的使用(二)
- Tensorflow的gRPC编程(二)