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

news2024/11/15 8:55:49

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.coloradmin.cn/o/902048.html

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

相关文章

win10 wsl ubuntu 更换版本为18.04 apt换国内源Python换国内源;默认root; Ubuntu18.04 下载与安装(阿里云官方镜像站)

控制面板里面应用模块找到Ubuntu,可以卸载或者移动到其他盘。 Microsoft 应用程序 - ubuntu https://apps.microsoft.com/store/search/ubuntu?hlzh-cn&glcn&rtc1 选择想要的版本安装。 cp /etc/apt/sources.list /etc/apt/sources.list.bak nano /etc/ap…

Java程序设计——拼图游戏

建立四个类 LeftjPanel、LoginPintu、MainJFranme、RightJPanel 在准备一个图片 LeftjPane类 import java.awt.Image; import java.net.MalformedURLException; import java.net.URL;import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel;…

中国电信秋招攻略,考试内容分析

电信秋招简介 每年的毕业生人数都在逐年递增,逐年递增就意味着竞争会越来越大,最好比别人做更充足的准备。要确定好就业方向以及就业的岗位,要了解各种各样的流程,做好一切自己能做到的准备。而对于有想法进入电信公司工作的人来…

第 7 章 排序算法(1)(介绍,分类,时间复杂度,空间复杂度)

7.1排序算法的介绍 排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。 7.2排序的分类: 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。外部排序法: 数据量过大&am…

【Unity每日一记】SceneManager场景资源动态加载

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Java程序设计——编写国际象棋棋盘(5*6的黑白方格)

重点代码: 调整黑白方格 if(i%20) { if(k%20) j[i].setBackground(color[0]); else j[i].setBackground(color[1]); add(j[i]); } else …

spring boot分装通用的查询+分页接口

背景 在用spring bootmybatis plus实现增删改查的时候,总是免不了各种模糊查询和分页的查询。每个数据表设计一个模糊分页,这样代码就造成了冗余,且对自身的技能提升没有帮助。那么有没有办法实现一个通用的增删改查的方法呢?今天…

分享8个新鲜的 VSCode 插件,提高你的开发生产效率

Visual Studio Code通常被称为VSCode,是一款开源、轻量但功能强大的源代码编辑器。被全球开发者广泛使用,它提供了丰富的扩展生态系统,适用于各种类型的开发者,增强了用户在多种语言中编码、高效调试甚至在编码过程中引入一些乐趣…

【C语言】字符分类函数、字符转换函数、内存函数

前言 之前我们用两篇文章介绍了strlen、strcpy、stract、strcmp、strncpy、strncat、strncmp、strstr、strtok、streeror这些函数 第一篇文章strlen、strcpy、stract 第二篇文章strcmp、strncpy、strncat、strncmp 第三篇文章strstr、strtok、streeror 今天我们就来学习字…

【GeoDa实用技巧100例】019:制作统计地图(气泡地图)

严重声明:本文为CSDN博主刘一哥GIS原创,原文地址为:https://blog.csdn.net/lucky51222/article/details/132379144,拒绝转载。 文章目录 一、统计地图介绍二、统计地图制作1. 加载实验数据2. 制作统计地图三、重新定义统计地图一、统计地图介绍 统计地图是显示地图中极端值…

C++ Qt 待机弹球游戏

以前的电视机待机时,都有一个球在界面弹来弹去,碰到边界则改变颜色和方向。 设计算法实现该效果,qt实现界面,C实现运动轨迹,及颜色变化。 详细注释 效果如图 运动轨迹控制类头文件 #ifndef CMOTIONCONTROL_H #defi…

系统架构设计师之网络安全-各个层次的网络安全保障

系统架构设计师之网络安全-各个层次的网络安全保障

java面试基础 -- ArrayList 和 LinkedList有什么区别, ArrayList和Vector呢?

目录 基本介绍 有什么不同?? ArrayList的扩容机制 ArrayLIst的基本使用 ArrayList和Vector 基本介绍 还记得我们的java集合框架吗, 我们来复习一下, 如图: 可以看出来 ArrayList和LinkedList 都是具体类, 他们都是接口List的实现类. 但是他们底层的逻辑是不同的, 相信…

什么是条件get方法?

条件GET方法通常指的是HTTP协议中的"GET"请求,但它带有一些条件,这些条件用于控制服务器是否应该返回请求的资源。这些条件通常使用HTTP标头字段来指定,以便客户端可以告诉服务器在某些条件下是否需要新的或更新的资源。 条件GET方…

操作符详解下(非常详细)

这里写目录标题 下标访问[ ]、函数调用()[ ]下标引用操作符函数调用操作符 操作符的属性:优先级、结合性优先级结合性 表达式求值整型提升整型提升的意义如何进行整体提升 算术转换问题表达式解析表达式1表达式2表达式3表达式4表达式5 总结 下标访问[ ]、函数调用()…

第3天----在一行句子中寻找最长最短单词

今天我们将学习如何在一行句子中寻找(第一次出现的)最长最短单词。本节内容会或多或少地利用到第一讲/第二讲的知识点,需要的同学可以先去看看前面的内容。 一、小试牛刀: 题目描述 输入 1 行句子(不多于 200 个单词,每个单词长度…

股票交易这个游戏玩法的本质

养家老师的“买在分歧,卖在一致”不用过度解读了,这句话也会是一个人入门标志,那就是这个市场是博弈的市场,预期打满没有任何分歧的话,那就没有继续博弈的价值了,也就只有最后一批接盘的人,而分…

Java程序设计——编写一个登录页面

需要编写两个类 LonginFrame、MainFrame LonginFrame类 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LoginFrame extends JFrame {JLabel lbluserLogIn;JL…

GitLab与GitLab Runner安装(RPM与Docker方式),CI/CD初体验

背景 GitLab 是一个强大的版本控制系统和协作平台,记录一下在实际工作中关于 GitLab 的安装使用记录。 一开始使用 GitLab 时,是在 CentOS7 上直接以 rpm 包的方式进行安装,仅作为代码托管工具来使用,版本: 14.10.4 …

OpenCV基础知识(6)— 滤波器

前言:Hello大家好,我是小哥谈。在尽量保留原图像信息的情况下,去除图像内噪声、降低细节层次信息等一系列过程,被叫做图像的平滑处理(或者叫图像的模糊处理)。实现平滑处理最常用的工具就是滤波器。通过调节…