当前位置: 首页 > news >正文

关键词排名点击软件网站信息产业部icp备案中心网站

关键词排名点击软件网站,信息产业部icp备案中心网站,商城网站建设-,没有收款接口网站怎么做收款在 C# 串口通信的一发一收场景里,处理不同功能码的帧数据可采用以下合理的代码结构,它能让代码更具可读性、可维护性和可扩展性。 实现思路 定义帧结构:创建一个类来表示通信帧,其中包含功能码、数据等信息。功能码处理逻辑&…

 

在 C# 串口通信的一发一收场景里,处理不同功能码的帧数据可采用以下合理的代码结构,它能让代码更具可读性、可维护性和可扩展性。

实现思路

  1. 定义帧结构:创建一个类来表示通信帧,其中包含功能码、数据等信息。
  2. 功能码处理逻辑:使用字典或者switch语句来根据不同的功能码执行相应的处理逻辑。
  3. 数据接收与解析:在串口接收事件中解析接收到的数据,并根据功能码调用对应的处理方法。
using System;
using System.Collections.Generic;
using System.IO.Ports;// 定义通信帧类
public class CommunicationFrame
{public byte FunctionCode { get; set; }public byte[] Data { get; set; }public CommunicationFrame(byte functionCode, byte[] data){FunctionCode = functionCode;Data = data;}
}// 定义串口通信类
public class SerialCommunication
{private SerialPort serialPort;private readonly Dictionary<byte, Action<CommunicationFrame>> frameHandlers = new Dictionary<byte, Action<CommunicationFrame>>();public SerialCommunication(string portName, int baudRate){serialPort = new SerialPort(portName, baudRate);serialPort.DataReceived += SerialPort_DataReceived;}// 注册功能码处理方法public void RegisterHandler(byte functionCode, Action<CommunicationFrame> handler){if (!frameHandlers.ContainsKey(functionCode)){frameHandlers.Add(functionCode, handler);}}// 打开串口public void Open(){if (!serialPort.IsOpen){serialPort.Open();}}// 关闭串口public void Close(){if (serialPort.IsOpen){serialPort.Close();}}// 发送数据public void Send(CommunicationFrame frame){if (serialPort.IsOpen){byte[] dataToSend = new byte[1 + frame.Data.Length];dataToSend[0] = frame.FunctionCode;Array.Copy(frame.Data, 0, dataToSend, 1, frame.Data.Length);serialPort.Write(dataToSend, 0, dataToSend.Length);}}// 数据接收处理private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){try{if (serialPort.BytesToRead > 0){byte functionCode = (byte)serialPort.ReadByte();int dataLength = serialPort.BytesToRead;byte[] data = new byte[dataLength];serialPort.Read(data, 0, dataLength);CommunicationFrame frame = new CommunicationFrame(functionCode, data);if (frameHandlers.TryGetValue(functionCode, out var handler)){handler(frame);}}}catch (Exception ex){Console.WriteLine($"Error receiving data: {ex.Message}");}}
}class Program
{static void Main(){SerialCommunication serialComm = new SerialCommunication("COM1", 9600);// 注册功能码处理方法serialComm.RegisterHandler(1, HandleFunctionCode1);serialComm.RegisterHandler(2, HandleFunctionCode2);serialComm.Open();// 发送示例数据byte[] data = { 0x01, 0x02, 0x03 };CommunicationFrame frameToSend = new CommunicationFrame(1, data);serialComm.Send(frameToSend);Console.WriteLine("Press any key to exit...");Console.ReadKey();serialComm.Close();}// 处理功能码 1 的方法static void HandleFunctionCode1(CommunicationFrame frame){Console.WriteLine($"Received frame with function code 1. Data length: {frame.Data.Length}");}// 处理功能码 2 的方法static void HandleFunctionCode2(CommunicationFrame frame){Console.WriteLine($"Received frame with function code 2. Data length: {frame.Data.Length}");}
}

http://www.dtcms.com/a/575239.html

相关文章:

  • NLP-常见任务
  • 娄底市建设银行宣传部网站胶州网站设计公司
  • 网站开发前景好吗商丘企业网站建设公司
  • 建设银行网站wordpress绑定二级域名插件
  • 自己怎么拍做美食视频网站详情页设计模板图片
  • 【设计题】如何涉及一个高并发的计数器
  • 网站开发教程 布局长域名转换短域名
  • 通过Ollama搭建本地LLM
  • 《新概念英语青少年版》单词全整理
  • 好的建筑设计网站有没有什么好看的网址
  • 8、webgl 基本概念 + 图像变换(平移 + 旋转 + 缩放)
  • 郑州建设信息网站环球网最新国际新闻
  • 租赁公司网站源码上线吧做的网站可以备案
  • 手机网站开发解决方案如何将自己做的网页做成网站
  • 在JavaScript中,将包含HTML实体字符的字符串转换为普通字符
  • 网站 建设理由网页设计教程详细步骤ppt
  • 深入理解 Python 的“左闭右开”设计哲学
  • 公司网站建设维保协议wordpress文本块表格
  • hanchengkeji杭州网站建设做网站后台维护的岗位叫什么
  • 企业网站建设最新技术diy小程序开发平台
  • 网站建设功能报价单网站建设资格预审公告
  • wordpress添加动漫人物深圳网站优化
  • 日均亿级数据的实时分析:Doris如何接过Spark的接力棒?
  • 网站建设微信官网开发外贸网站做的作用是什么
  • 东莞网络公司哪个网站好wordpress博客怎么搜索
  • 怎么给网站创建二维码国内知名企业网站
  • 网站建设的公司邢台市信都区
  • 功能型网站开发者模式有什么危害
  • 手机网站开发 1433端口错误sem优化系统
  • 关键词解释:Focal Loss解决类别极度不平衡问题而设计的损失函数