C#与西门子PLC1500的ModbusTcp服务器通信2--ModbusTcp协议

Modbus TCP是近年来越来越流行的工业控制系统通信协议之一,与其他通信协议相比,Modbus TCP通信速度快、可靠性高、兼容性强、适用于模拟或数字量信号的传输,阅读本文前你必须比较熟悉Modbus协议,了解tcp网络。

一、什么是Modbus TCP?

Modbus TCP是一种以太网协议,它将Modbus通信协议封装在TCP/IP包内进行数据传输。它通常用于工业控制系统中,比如PLC,传感器等设备之间的数据通信。Modbus协议中,数据是通过寄存器集合的方式进行通信的。这些寄存器可以是输入寄存器、输出寄存器、保持寄存器和线圈寄存器,它们各自用于不同的功能,通信时涉及到两个角色:服务器和客户端,通常情况下是客户端主动连接服务器。

二、Modbus TCP服务器和客户端

1. Modbus TCP服务器

Modbus TCP服务器是一个在网络中等待连接的设备,它侦听端口502,等待客户端连接,并提供Modbus协议服务。服务器可以实现读取和写入数据,服务器提供的几个重要的函数码,也就是功能码:

1)读输入寄存器:该功能码用于读取被称为输入寄存器的Modbus寄存器。

2)读保持寄存器:该功能码用于读取保持寄存器的值。

3)写单个保持寄存器:该功能码用于写入单个保持寄存器的值。

4)写多个保持寄存器:该功能码用于写入多个保持寄存器的值。

常见的Modbus TCP服务器设备包括PLC(可编程逻辑控制器)、Raspberry Pi和树莓派等。假设我们有一个PLC设备作为Modbus TCP服务器,它有一个输入寄存器和一个保持寄存器,我们可以使用Modbus TCP协议来读取和写入这些寄存器,本项目是将西门子PLC1500作为服务器

2. Modbus TCP客户端

Modbus TCP客户端是一个主动连接到Modbus TCP服务器的设备,并提供只读或读写服务。一旦建立了连接,客户端可以向服务器发送数据请求,读取或写入Modbus寄存器的值,客户端提供的几个重要的函数码:

1)读输入寄存器:该功能码用于读取输入寄存器的值。

2)读保持寄存器:该功能码用于读取保持寄存器的值。

3)写单个保持寄存器:该功能码用于向服务器写入单个保持寄存器的值。

4)写多个保持寄存器:该功能码用于向服务器写入多个保持寄存器的值。 

常见的Modbus TCP客户端可以是PLC设备,C#Winform程序,JAVA程序,Python程序,工具软件等都可以,本项目是C#Winform程序

对于Modbus TCP客户端来说,自己并不会产生数据,它的数据均是从服务器获取,为了得到数据就必须向服务器发起数据请求。在Modbus TCP协议中,服务器一般也不会主动向外发送数据,服务器需要根据客户端的数据请求来决定是否发送数据、发送哪些数据。这一过程如下图所示:

 上图我们不难看出,首先客户端要主动发起数据请求,客户端发起的数据请求需要告诉服务器它请求的数据有哪些。服务器收到这个数据请求后,服务器解析客户端的请求并按照客户端的请求返回数据。客户端收到数据响应后解析数据,这样就完成了客户端与服务器之间的一次数据通讯。

在Modbus TCP协议栈中实现了0x01、0x02、0x03、0x04、0x05、0x06、0x0F以及0x10等功能码。

 三、TCP服务器端和客户端

1. TCP服务器

TCP服务器是一个等待客户端连接的程序或设备。一旦客户端连接,它就会创建一个新的套接字socket,用于维护与客户端的通信连接。通常情况下,服务器会侦听一个固定的IP地址和端口号。

TCP服务器提供的几个重要函数:

1)侦听(listen):该函数用于监听网络上的端口,以等待客户端的连接请求,该侦听是无限循环的,除非人为关闭或异常终止。

2)接收(accept):该函数用于接受客户端连接的请求,接收到的数据全部放在缓冲区中,数据都是字节数组的形式,当接收到数据后需要转换成ascii或utf-8的格式。

3)发送(send):该函数用于将数据发送到客户端,发送数据也必须是以字节数组byte[]形式发送,可以是ascii编码,UTF-8编码。

2. TCP客户端

TCP客户端是一个主动建立连接并发送数据请求的设备或程序。客户端通常用于向服务器发送请求以读取或写入数据。客户端可以与多个服务器建立连接,并且可以使用不同的端口号

TCP客户端提供的几个重要函数:

1)创建套接字(socket):该函数用于创建一个新的套接字,以供客户端使用。

2)连接(connect):该函数用于连接到一个服务器。

3)发送(send):该函数用于将数据发送到服务器。

4)接收(recv):该函数用于从服务器接收数据

四、两者比较

总体来说,Modbus TCP服务器和客户端以及TCP客户端和服务器端的工作原理基本相同,都需要使用Socket套接字来进行通信。不同的是Modbus TCP协议提供了更加专业的Modbus数据的读取和写入协议,便于在工业控制系统中数据的传输。从这可以看出,Modbustcp通信是建立在tcp通信的基础上实现modbus协议的传输,所以传统的tcp通信是基础。

1.协议结构

Modbus TCP是基于Modbus协议的扩展,它采用了TCP/IP协议进行通信。

Modbus协议是一种串行通信协议,而Modbus TCP是一种基于TCP/IP协议的应用层协议。它的协议结构简单明了,包括了应用层、传输层和网络层。

而TCP/IP协议则是一种四层协议结构,包括了应用层、传输层、网络层和数据链路层。

2.通信速度

Modbus TCP通信速度相对较慢,主要是因为它使用了较长的帧结构和数据格式,需要进行较多的数据解析和处理。

而TCP/IP协议则具有更高的通信速度,主要是因为它的数据传输格式更加简洁明了,可以快速进行数据交换和传输。

3.网络拓扑

Modbus TCP采用基于以太网的星型网络拓扑结构,可以支持多个设备同时进行通信。

而TCP/IP协议则支持多种网络拓扑结构,包括星型、环形、树状等多种结构,更加灵活和可扩展。

4.数据传输方式

Modbus TCP通信采用的是半双工模式,即同一时间只能进行一方的数据传输。

而TCP/IP协议则采用全双工模式,即双方可以同时进行数据传输和接收,提高了通信效率。

5.应用场景

Modbus TCP协议主要应用于工业自动化控制系统和机器设备等领域,支持广泛的设备和系统集成。

而TCP/IP协议则广泛应用于互联网、局域网和广域网等领域,支持各种类型的数据传输和通信需求。

五、小结

modbus tcp协议

Modbus TCP是一种基于TCP/IP协议的应用层协议,它是Modbus协议的扩展。Modbus协议是一种串行通信协议,最初是由Modicon公司在1979年开发的,用于工业自动化控制系统中设备之间的通信。Modbus TCP则是将Modbus协议转换为基于以太网的TCP/IP协议,以支持更广泛的设备和系统集成。Modbus TCP协议使用TCP/IP协议栈的传输层和网络层,以实现设备之间的数据通信。

Modbus TCP协议具有简单、可靠和广泛应用等优点。它不仅可以支持设备之间的通信,还可以通过互联网进行远程访问和控制。Modbus TCP协议具有广泛的应用场景,包括工业自动化控制系统、能源管理、环境监测、楼宇自控等领域。同时,Modbus TCP协议也是一种开放的协议,可以方便地与其他通信协议进行集成。

tcp/ip协议是什么

TCP/IP协议是互联网上最常用的协议之一,它是Internet协议族的核心协议。TCP/IP协议是由美国国防部高级研究计划署(ARPA)在20世纪70年代初期开发的一套互联网通信协议,旨在为全球的计算机网络提供标准化的通信协议。TCP/IP协议提供了一种可靠、灵活、通用的数据传输方式,使得互联网上不同的计算机和网络之间可以互相通信和交换信息。

TCP/IP协议由两个主要部分组成:传输控制协议(TCP)和Internet协议(IP)。其中,IP协议主要负责数据包在网络中的传输,包括数据包的路由、分片、拼装等功能。TCP协议则是建立在IP协议之上的传输层协议,主要负责在通信的两端建立可靠的连接,并对数据进行分段、组装、检验等操作。TCP/IP协议还包括许多其他的协议,如用户数据报协议(UDP)、网络时间协议(NTP)、域名系统协议(DNS)等。

TCP/IP协议是一个开放的标准协议,它具有广泛的应用场景,包括互联网、局域网、广域网等各种网络环境。TCP/IP协议提供了一种通用的通信标准,使得不同类型的计算机和设备可以互相通信和交换信息。同时,TCP/IP协议也是一种可扩展的协议,可以方便地与其他通信协议进行集成,从而实现更加复杂的通信和数据处理功能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/45656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初阶c语言:实战项目三子棋

前言 大家已经和博主学习有一段时间了,今天讲一个有趣的实战项目——三子棋 目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程 初始化棋盘 打印棋盘 玩家下棋 电脑下棋 时间戳:推荐一篇 C语言生成随机数的方法_c语言随机数_杯浅…

Delegates.observable追踪观察可变数据更新,Kotlin

Delegates.observable追踪观察可变数据更新&#xff0c;Kotlin import kotlin.properties.Delegates import kotlin.reflect.KPropertyclass Person {var name: String by Delegates.observable("fly") { prop: KProperty<*>, old: String, new: String ->p…

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)

开个新坑详细分析一下虚幻官方发布的《CropOut》&#xff0c;文章会同步发布到我在知乎|CSDN的专栏里 文章目录 概要Create Island几何体生成部分随机种子Step 1Step 2Step 3Step 4Step 5Step 6 岛屿材质部分动态为草地设置颜色 程序设计的小技巧其它Platform Switch函数 概要 …

Android OpenCV(七十四): Android OpenCV SDK 升级至 4.8.0

前言 如昨日文章所述,OpenCV 4.8.0 已经发布,虽然系列文章已经停更很久,但是版本升级工作笔者是很乐意快速完成的。 OpenCV 4.8.0 Android SDK:https://github.com/opencv/opencv/releases/download/4.8.0/opencv-4.8.0-android-sdk.zip 更新日志:https://github.com/o…

安防视频汇聚平台EasyCVR视频监控综合管理平台H.265转码功能更新,新增分辨率配置的具体步骤

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…

Open3D 进阶(5)变分贝叶斯高斯混合点云聚类

目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 系列文章(连载中。。。爬虫,你倒是爬个完整的呀?): Open3D 进阶(1) MeanShift点云聚类Open3D 进阶(2)DB…

shell脚本之循环语句

循环语句 循环含义 将某代码段重复运行多次&#xff0c;通常有进入循环的条件和退出循环的条件 for循环语句 一般知道循环次数使用for循环 第一类 格式1&#xff1a; for名称 in 取值次数;do;done; 格式2&#xff1a; for 名称 in {取值列表} do done# 打印20次 for i i…

[MySQL]02关于事务的解析

目录 原子性 一致性 持久性 隔离性 事务隔离级别 并发执行可能存在问题 脏读问题 不可重复读 幻读 难点解析 原子性 事务最核心的就是原子性 以前人们认为原子不可再分&#xff0c;用原子性来表示一个事务不可分割 update account set balancebalance-500 where nam…

浅析Java设计模式之四策略模式

title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…

Android内存泄漏总结和性能优化技巧

我们在开发安卓应用时&#xff0c;性能优化是非常重要的方面。一方面&#xff0c;优化可以提高应用的响应速度、降低卡顿率和提升应用流畅度&#xff0c;从而提升用户体验&#xff1b;另一方面&#xff0c;优化也可以减少应用的资源占用&#xff0c;提高应用的稳定性和安全性&a…

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)

SHADEWATCHER: Recommendation-guided CyberThreat Analysis using System Audit Records S&P-2022 新加坡国立大学、中国科学技术大学 Zengy J, Wang X, Liu J, et al. Shadewatcher: Recommendation-guided cyber threat analysis using system audit records[C]//2022 I…

学C的第三十四天【程序环境和预处理】

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十三天【C语言文件操作】_高高的胖子的博客-CSDN博客 1 . 程序的翻译环境和执行环境 在ANSI C(C语言标准)的任何一种实现中&#xff0c;存在两个不同的环境。 &#xff0…

容器虚拟化基础之cgroups/LXC

"你真的&#xff0c;自由了~" 容器虚拟化基础之Cgroups: (1) 什么是cgroups cgroups是 linux 内核提供的一种机制&#xff0c; 这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内&#xff0c;从而为系统资源管理提供一个统一…

3D与沉浸式技术,如何助力企业数字化转型?

说起3D&#xff0c;估计许多读者朋友会在第一时间想起《阿凡达》系列和《侏罗纪公园》系列电影大作。每一帧细节纤毫毕现的逼真画面&#xff0c;让观众几乎分不清虚拟与现实&#xff0c;完全沉浸在导演打造的视觉盛宴中。 事实上&#xff0c;除了大家所熟知的3D影视动画之外&am…

快速学习GO语言总结

备注&#xff1a;本博客将自己初步学习GO的总结进行分享&#xff0c;希望大家通过本博客可以在短时间内快速掌握GO的基本程序编码能力&#xff0c;如有错误请留言指正&#xff0c;谢谢&#xff01; 一、初步了解Go语言 &#xff08;一&#xff09;Go语言诞生的主要问题和目标…

iOS17 widget Content margin

iOS17小组件有4个新的地方可以放置分别是&#xff1a;Mac桌面、iPad锁屏界面、 iPhone Standby模式、watch的smart stack Transition to content margins iOS17中苹果为widget新增了Content margin, 使widget的内容能够距离边缘有一定的间隙&#xff0c;确保内容显示完整。这…

学习设计模式之适配器模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 适配器模式 意图&#xff1a;将一个类的接口转换成客户希望的另一个接口 主要解决&#xff1a;把现有对象放到新环境里&#xff0c;而新…

IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch

什么是升级补丁&#xff1f; 比如你本地修复的 bug&#xff0c;需要把增量文件发给客户&#xff0c;很多场景下大家都需要手工整理修改的文件&#xff0c;并整理好目录&#xff0c;这个很麻烦。那有没有简单的技巧呢&#xff1f;看看 IDEA 生成 patch 和使用 patch 的使用。 介…

一、Kafka概述

目录 1.3 Kafka的基础架构 1.3 Kafka的基础架构 Producer&#xff1a;消息生产者&#xff0c;就是向 Kafka broker 发消息的客户端Consumer&#xff1a;消息消费者&#xff0c;向 Kafka broker 取消息的客户端。Consumer Group&#xff08;CG&#xff09;&#xff1a;消费者组&…