python实现以太网通信_C sharp modbus 通信(串口及以太网) | 工作 实践 真知 分享 IT python资源,python面试,python教程,python自学,python技...

本文介绍了如何使用Python和C#进行Modbus通信,包括串口通信的数据接收和CRC校验,以及以太网通信的Socket连接、发送与接收。内容涵盖Modbus帧构造、地址码、功能码的定义以及超时时间的设置。
摘要由CSDN通过智能技术生成

SerialPort sp = new SerialPort(...);

sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e){...}

2)CRC校验

CRC校验用于modbus通信的消息准确性验证,介绍及算法实现见另一篇博文《CRC循环冗余校验算法两种实现方式(逐位计算法和查表法)c sharp 版》。

使用2个字节的校验码长度,高字节和低字节排列顺序需注意,通信双方约定好即可,常见的排列是低字节在前,高字节在后。

3)构造Modbus帧

标准Modbus协议请参考:《MODBUS通讯协议中文版》

通用Modbus帧格式:

地址域 | 功能码 | 数据 | 查错校验

此出介绍最常用的帧格式:

byte1  | byte2  | byte3 byte4....| byte n | byte n+1

地址码 | 功能码 | 数据段         | CRC L  | CRC H

用一个字节作为地址码(范围1-255,0通常作为广播地址),一个字节作为功能码(范围1-255,128-255为异常响应保留),地址码用于选择特定设备,功能码通知设备执行哪种操作。

功能码和数据段具体意义可自行设定。

如:定功能码  0x03  为读参数值,数据段2个字节,byte3位起始参数地址,byte4位参数个数。以对1号设备读 0x04地址开始的3个参数,数据帧为:

byte[] command = new byte[]{ 0x01, 0x03, 0x04, 0x03, CRCL, CRCH}

返回数据格式为:地址位,功能码,数据位字节数,第一个参数。。。。, 校验位

Byte[] response = new byte[]{0x01, 0x03, 0x03, 0x00, 0x00, 0x00, CRCL, CRCH}

4)发送与接收

使用串口工具类,实例化一个SerialPort对象,设置好串口参数并开启串口,此时就可以使用SerialPort.Write(command, 0, command.Length) 将命令发送出去;根据响应速度延时一定时间后,用SerialPort.Read(response, 0, response.Length) 接收响应。

以太网

1)Socket工具类介绍

Socket类有两个带参数的构造方法:

public Socket(SocketInformation socketInformation);

Public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);

第一个需要先构造一个带有所有Socket参数的参数类SocketInformation,不够直观,第二个参数非别是:地址族、套接字类型和协议。

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);//ipv4地址,字节流,tcp协议

socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeout, timeOut);  //设置发送超时时间

socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout, timeOut);//设置接收超时时间

IPEndPoint ip = new IPEndPoint(IPAddress.Parse(IP), Port);//构造地址(ip+端口)

socket.Connect(ip);//建立连接

2)发送与接收

Modbus协议帧的构造与直连方式相同。

socket.Send(command );//发送数据

//延时

socket.Receive(data);//接收数据

代码写的不好,就不贴了。结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值