【.NET6+Modbus】Modbus TCP协议解析、仿真环境以及基于.NET实现基础通信

C#中针对NModbus4库文件的简单使用分享(Modbus Tcp协议) 1. Modbus Tcp协议: ModBus Tcp是基于TCP/IP的报文协议,采用主\从方式通信,但是主从之间的端口是固定的:502 ModBus地址:由5位数字组成(PS:40001-49999表示HoldingRegister),包括起始数据类型代号,以及后面的偏移地址 2. 实验目的: 实现主机\从机对任意线圈和寄存器的写入和读取。 这里用到的Dll名称是:NModbus4。 可以在NuGet或者GetHub上下载到。 3. 主机端:Slave 上代码: // Modbus TCP u 阅读详情

Python微信订餐小程序课程视频

https://edu.youkuaiyun.com/course/detail/36074

Python实战量化交易理财系统

https://edu.youkuaiyun.com/course/detail/35475
**前言:**随着工业化的发展,目前越来越多的开发,从互联网走向传统行业。其中,工业领域也是其中之一,包括各大厂也都在陆陆续续加入工业4.0的进程当中。

工业领域,最核心的基础设施,应该是与下位硬件设备或程序进行通信有关的了,而下位机市场基本上是PLC的天下。而PLC产品就像编程语言一样,类型繁多,协议也多种多样。例如,西门子PLC最常用的S7协议、施耐德PLC最常用的Modbus协议、以及标准工业通信协议CIP协议等等。而多种通信协议里面,基于以太网通信的居多。以太网通信的里面,通用协议除了CIP协议,就属于Modbus TCP协议了。

接下来的内容,我会以从头开发一个简单的基于modbus tcp通信的案例,来实现一个基础的通信功能。

有关环境:

开发环境: VS 2022企业版

运行环境: Win 10 专业版

.NET 环境版本: .NET 6

【备注】 源码在文末

1、新建一个基于.NET 6带控制器的webapi项目,以及一个类库项目。如下图所示,新建以后的项目目录结构。

2、由于modbus tcp通信实际上就是一个socket通信,所以在类库项目下,先创建了一个Modbus服务类,并且提供一个基于socket通信连接的方法。socket连接以后,需要返回socket实例拿来使用。

3、为了方便一点,再新增一个通用的返回信息类,用于存储一些返回信息使用。

4、基于以上的返回信息类,咱对连接方法进行稍微改造一下,让它看起来更方便一点。这样可以用来验证连接是否正常,以及返回对应的异常信息,好做进一步处理。

5、Modbus TCP请求的报文规则,一些解析信息如下:

站地址:默认0x01, 除非PLC告诉我们其他站地址。

功能码:代表读写数据时候指定的读写方法等。例如读取线圈的功能码是0x01。

地址和读取长度:地址目前个人在施耐德物理的PLC环境上,不能超过30000。同时,单次读写长度不能超过248个byte,否则PLC可能会飘。当然,也可能将来一些PLC可以支持更长的批量数据读写,目前在施耐德PLC环境下不支持(具体型号忘记了,有点久了,当前身边没得PLC了,等下会使用仿真工具来做环境)。

头部校验(消息唯一识别码):0~65535,用于PLC服务端进行区分不同的客户端而使用的一组数据标识,不同的客户端必须保证标识码不重合。例如多个客户端同时存在时候,发起的通信请求,必须保持不一样的识别码,否则Modbus服务端有可能会因为不知是哪个客户端发起的请求而导致信息乱了。

无(协议标识):默认0,代表是Modbus协议。

数据长度:发送的报文的长度,刚好是6位,所以可以写成固定值0x06。(写入的规则不一样,此处固定值只当作读取时候使用)

6、根据协议的一些具体内容,写一个存储功能码和异常返回码的数据类,用于后期做通信时候传参和通信数据验证使用。有关协议具体内容,如下代码所示。

7、由于异常码是byte数据,直接验证可能会麻烦一点,为了可以直观一些,此处再新增一个用于解析Modbus返回的异常信息的方法,用于备用。

8、根据协议规则,提供一些参数,并先搭建一个简单的方法框架,用来可以进行读取线圈的功能。包含简单的报文数据拆分以及报文发送和接收。由于发送报文长度不能超过248byte(1 bool大小 == 1 byte,如果是其他类型,需要做其他长度换算),所以当长度超过时候,做个简单的算法进行拆分再发送,防止发生不必要的异常。以下做一个读取线圈(Bool类型数据)的简单方法。

通讯编程001——Nodejs快速开发Modbus TCP Master 本文介绍如何利用ModbusJs库快速开发Modbus TCP Master。 阅读详情

相关推荐

MODBUS通信中V区数据读写实战:地址映射、字节序处理与故障排查

在工业自动化领域,MODBUS协议作为设备间通信的开放标准,其核心在于对保持寄存器的读写操作。理解数据在寄存器中的存储原理,特别是字节序和字顺序,是确保通信正确的关键。这些底层技术直接决定了数据交换的准确性和系统稳定性,对于实现PLC与上位机(如SCADA、HMI)的可靠数据交互至关重要。在实际应用中,开发者常面临地址映射混乱和字节序错位等挑战,尤其是在处理西门子、三菱等主流PLC的V区数据时。通过掌握地址计算规则和字节序转换方法,可以有效解决数据读写失败问题,提升工业通信系统的开发效率和运行可靠性。

weixin_31421613的博客 259

从零搭建:C# WinForm上位机通过Modbus TCP监控西门子PLC实战(博途V15仿真)

本文详细介绍了如何使用C# WinForm开发上位机,通过Modbus TCP协议与西门子PLC(博途V15仿真)建立通信,实现浮点数数据的实时监控与交互控制。内容涵盖环境配置、通信原理、PLC仿真环境搭建、WinForm界面设计、NModbus4库的使用以及高级功能如数据持久化、报警管理和权限控制,为工业自动化开发者提供了一套完整的实战解决方案。

weixin_30776545的博客 475

C#编写的Modbus TCP上位机工具包,支持西门子/三菱/欧姆龙PLC寄存器读写调试

直接运行就能连PLC的C#工控通信工具包,基于标准Modbus TCP协议,兼容西门子S7-1200/1500、三菱FX/Q系列、欧姆龙CP/NJ等主流PLC型号。能读写线圈(Coil)、离散输入(DI)、输入寄存器(IR)、保持寄存器(HR)四类地址,支持单点/批量读写操作。内置图形化主界面(frmStart),带连接状态指示、地址输入框、数据类型选择和实时响应显示。项目含两个VS解决方案(ModbusTCP.sln和Modbus Sample Common.sln),源码模块清晰,Modbus核心类封装

bash7scripter的博客 399

Modbus.Net:使用C#的高度可扩展的硬件通信平台

Modbus.Net概述 概述 Modbus.Net是一个用C#7.0编写的开放式硬件通信平台。 您可以专注于协议本身,平台可以自动创建完整的异步或同步通信库。 为什么叫Modbus.Net 我毕业两年前,Modbus.Net是开源的。 该项目的第一个目标是使用Modbus TCP实现远程PLC通讯。 半年后,该公司决定使用IoT硬件,因此需要更通用的架构。 主平台更改为通用通信平台。 尽管进行了所有这些更改,名称“ Modbus.Net”仍然存在。 真正的Modbus实现已移至 。 如果您想要真正的Modbus C#实现,请同时下载和 。 还有可以使用PPI或TCP / IP与Siemens S7-200,S7-200 Smart,S7-300,S7-400,S7-1200和S7-1500通信。 实现OPC DA和OPC UA协议。 支持平台 Visual Studio 201

C# winform TCP-IP 服务端 可实现一个IP地址多端口号同时启动服务

这是一个基于C# winform TCP-IP 服务端程序。可实现一个IP地址多端口号同时启动服务。包含创建TCP-IP服务、监听客户端反馈的消息、处理并回复消息给客户端。

Qt OpenGL 3D 点云数据显示

在Qt中使用OpenGL显示3D点云数据是一个常见的需求,特别是在计算机视觉、机器人学和三维重建等领域。下面我将介绍一个基本的实现方案。

深之JohnChen的专栏 1239

FPGA上的YOLOv8加速实现:从Verilog到高层综合

YOLOv8 采用了更高效的C2f模块与轻量化Backbone结构,模型特征包括:结构紧凑、检测头融合高低层特征;支持Anchor-free检测机制;支持INT8、FP16低精度推理;计算密度高,适合FPGA并行优化。

2501_93174773的博客 918

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

DDSP(Differentiable Digital Signal Processing) 开篇

文章目录DDSP可以用来做什么?下一步工作 工作中接触到了DDSP声码器,但非科班出声的我对这块知识非常陌生,甚至带有一些畏惧的心理,但是为了工作为了进步,必须硬下头皮去啃,相信只要耐心地坚持,没什么能难到我。于是从今天开始,就用这个博客专栏来记录我的学习历程,希望也能帮助到你~ DDSP对应的论文是:DDSP: Differentiable Digital Signal Processing 先翻译一篇来自DDSP论文作者的对DDSP的介绍的文章。 今天,我们很高兴地介绍可微数字信号处理(DDSP)库。

YeeKo的博客 9248

duilib 之 事件--bubbled冒泡事件应用、通用点击事件、进入离开事件、XML样式中直接添加事件

1. box 绑定点击事件 ui::Box *pSmallVideoBox = (ui::Box*)FindControl(L"rightBox"); if (pSmallVideoBox) { auto SwitchVideo = [this](ui::EventArgs* param){ m_bSecScreenIsScale = m_bMainScre...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 973

VAY 是 SAP 自动科目确定(OBYC-GBB)中的科目修改码,专用于带科目分配对象的销售订单发货场景,核心是触发 “Dr 成本要素科目(如销售费用 / 特定成本对象) Cr 库存商品” 的分录,

摘要:VAY是SAP中用于带科目分配对象(如成本中心、WBS)的销售订单发货的科目修改码,与标准VAX场景不同,它生成"借成本要素科目/贷库存商品"的分录。配置路径为OBYC-GBB-VAY,需确保借方科目为成本要素。典型业务场景包括免费样品、项目专用发货等。常见问题包括VAY未触发或科目记账错误,需检查销售订单科目分配、移动类型设置及OBYC配置。特殊场景建议单独配置科目以便费用分析。

金牌架构师 1256

【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)

实现功能:代码下载地址:下载地址 1)基于深度学习的目标检测;2)基于雷达的距离估计和预测;3)多传感器感知结果融合模块。 相机感知模块解析 4. Run nodes: python3 fusion_node/main.py python3 gps_node/main.py python3 radar_node/main.py python3 2d_detection_node/main.py #(additional instructions in 2d_detection_node/README.m

踟蹰横渡口,彳亍上滩舟。 9951

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Docker入门
下一篇: ajax - 终结篇jsonp,防抖节流
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值