首页 > 其他分享 >封装Modbus串口通讯之SerialPort类

封装Modbus串口通讯之SerialPort类

时间:2023-08-28 15:02:26浏览次数:30  
标签:string System SerialPort Modbus 串口 using byte serialPort

前言

C#为我们更好的与设备进行通讯,提供了SerialPort类于我们进行设备通讯,我们只需要将参数给与这个类并且实例化该类就可以通讯

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.IO.Ports;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 using System.Windows.Interop;
 9 using System.Windows.Markup;
10 using System.Windows.Threading;
11 
12 namespace Test
13 {
14     public class EleCommandHelper
15 
16     {
17         private SerialPort serialPort;
18         private const Parity DefaultParity = Parity.None;
19         private const int DefaultDataBits = 8;
20         private const StopBits DefaultStopBits = StopBits.One;
21 
22         public bool IsOrNotOpen()
23         {
24             return serialPort.IsOpen;
25         }
26         public void Close()
27         {
28             if (serialPort.IsOpen == true)
29             {
30                 serialPort.Close();
31             }
32         }
33 
34 //实例化该类,需要填两个参数,一个波特率,一个串口名字
35         public EleCommandHelper(string portName, int baudRate)
36         {
37             serialPort = new SerialPort(portName, baudRate, DefaultParity, DefaultDataBits, DefaultStopBits);
38             //serialPort.DataReceived += SerialPort_DataReceived;
39             serialPort.Open();
40             
41 
42         }
43 
44 //通用 带返回值
45         public string GetSendModbus(string hexCommand)
46         {
47 
48             byte[] commandBytes = HexStringToByteArray(hexCommand);
49 
50             serialPort.Write(commandBytes, 0, commandBytes.Length);
51             // 等待响应
52             System.Threading.Thread.Sleep(500);
53 
54             byte[] responseBytes = new byte[serialPort.BytesToRead];
55             serialPort.Read(responseBytes, 0, responseBytes.Length);
56 
57             string responseHex = BitConverter.ToString(responseBytes).Replace("-", " ").ToUpper().Trim();
58 
59             return responseHex;
60         }
61 
62  private byte[] HexStringToByteArray(string hexString)
63         {
64             hexString = hexString.Replace(" ", "").Replace("-", "").ToUpper().Trim();
65             int bytesCount = hexString.Length / 2;
66             byte[] bytes = new byte[bytesCount];
67 
68             for (int i = 0; i < bytesCount; i++)
69             {
70                 string byteString = hexString.Substring(i * 2, 2);
71                 bytes[i] = Convert.ToByte(byteString, 16);
72             }
73 
74             return bytes;
75         }
76     }
77 }

 

标签:string,System,SerialPort,Modbus,串口,using,byte,serialPort
From: https://www.cnblogs.com/ting1024/p/17662273.html

相关文章

  • RS232串口专题
    启动串口调试助手项目运行截图基础类封装数据类型转换类usingSystem;usingSystem.Text;namespaceSerialPortHelperDemo{///<summary>///16进制使用的隔离符枚举///</summary>publicenumEnum16Hex{None,//无Blank,/......
  • 基于RS232的VGA图像显示(串口+ram)
    第40章、基于RS232的VGA图像显示(串口+ram)【实战】使用PC机通过UART串口传输图片像素数据(txt文件)给FPGA,FPGA将图片数据缓存到内部RAM中,再利用vga控制模块读取,在VGA显示器中心位置显示缓存到RAM中的图片。VGA显示模式为640x480@60;图片大小为100x100。基于RS232的VGA图......
  • 串口RS485
    第31章、串口RS485【理论】【RS485简介】1、RS-485是双向、半双工通信协议,允许多个驱动器和接收器挂接在总线上,其中每个驱动器都能够脱离总线。(RS232为双向,双工,单端传输)半双工:指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。2、RS-485采用差分传输方式能......
  • 串口RS232
    第30章、串口RS232UART,通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。它包括了RS232、RS499、RS......
  • Kepserver作为ModbusTCP Server数据上传案例
    该案例已实现于物联温湿度传感器采集第一步:数据采集(此处以ModbusRTU为例不做具体说明)  第二步:数据转发设置: (请参考我的博文: kepserver作为ModbusTcp服务器与外围设备通信)  第三步:数据采集和数据转发关联 ......
  • Modbus协议详解1:Modbus的简介
    Modbus协议是应用非常广泛的一种通信协议规约,也是最早应用在工业现场的协议。早在1979年出现工业串行链路以来,Modbus的应用就开始普遍起来,它使得各种自动化设备之间的互相通信得到实现,做嵌入式产品开发的朋友应该不会陌生,Modbus的身影是随处可见的。并且在中国Modbus都已经形成了规......
  • 【STM32】5_0_串口通信
    串口通信概述通用同步异步收发器(USARTUniversalSynchronousAsynchronousReceiver/Transmitter)能够灵活地与外部设备进行全双工数据交换,满足外部设备对工业标准NRZ异步串行数据格式的要求。USART通过小数波特率发生器提供了多种波特率。它支持同步单向通信和半双工单......
  • PROFIBUS主站转MODBUS TCP网关
    1.产品功能YC-DPM-TCP网关在Profibus总线侧实现主站功能,在以太网侧实现ModbusTcp服务器功能。可将ProfibusDP从站接入到ModbusTcp网络;通过增加DP/PA耦合器,也可将ProfibusPA从站接入ModbusTcp网络。YC-DPM-TCP网关最多支持125个Profibus从站的通信,只支持单主站系统,不支持多主站......
  • STM32深入学习3:DMA,串口通信和看门狗
    DMADMA直接存储器存取,用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA1有7个通道,DMA2有5个通道,还有一个仲裁器来协调各个DMA请求的优先权。DMA的作用是实现数据的直接传输,从地址到地址的数据传输。DMA传输的相关参数:源地址,目标地址,数据传输量,传输模式......
  • Cognex InSight 实现ModBusTCP通讯详解
    1.实验准备:1.智能相机:本次实验使用的相机型号为:IS8200M,支持目前最新的InSight6.13版本固件,所以相机的固件也升级到了最新的6.01.03,这里建议固件版本最好使用最新的。注意,5.3以下的版本不支持ModbusTCP通讯,所以如果最高支持不到5.3的相机,请选择其他通讯方式。2.软件(InSight)版......