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协议也是一种可扩展的协议,可以方便地与其他通信协议进行集成,从而实现更加复杂的通信和数据处理功能。
相关文章:
C#与西门子PLC1500的ModbusTcp服务器通信2--ModbusTcp协议
Modbus TCP是近年来越来越流行的工业控制系统通信协议之一,与其他通信协议相比,Modbus TCP通信速度快、可靠性高、兼容性强、适用于模拟或数字量信号的传输,阅读本文前你必须比较熟悉Modbus协议,了解tcp网络。 一、什么是Modbus …...
SpringBoot + MyBatis-Plus构建树形结构的几种方式
1. 树形结构 树形结构,是指:数据元素之间的关系像一颗树的数据结构。由树根延伸出多个树杈 它具有以下特点: 每个节点都只有有限个子节点或无子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点&a…...
linux vscode 下开发
linux vscode 下开发 javajdk插件查看调用层次 java jdk 各种JAVA JDK的镜像分发 编程宝库 - 技术改变世界 jdk 镜像 ubuntu22.04 安装 # Linux x64 64位 jdk-8u351-linux-x64.tar.gztar -zxf jdk-8u351-linux-x64.tar.gz mv jdk1.8.0_351 jdk8/ vim ~/.pr…...
【工具】python代码编辑器--PyCharm下载安装和介绍
PyCharm是一种Python IDE(集成开发环境),由JetBrains打造。它带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。此外,PyCharm还提供了一些高级功能,以用于支持Django框…...
SpringBoot第44讲:SpringBoot集成Redis - Redis分布式锁的实现之Jedis(setNXPX+Lua)
SpringBoot第44讲:SpringBoot集成Redis - Redis分布式锁的实现之Jedis(setNXPXLua) Redis实际使用场景最为常用的还有通过Redis实现分布式锁。本文是SpringBoot第44讲,主要介绍Redis实现分布式锁 文章目录 SpringBoot第44讲:SpringBoot集成Re…...
STM32F4X USART串口使用
STM32F4X USART串口使用 串口概念起始位波特率数据位停止位校验位串口间接线 STM32F4串口使用步骤GPIO引脚复用函数串口初始化函数串口例程 串口概念 串口是MCU与外部通信的重要通信接口,也是MCU在开发过程中的调试利器。串口通信有几个重要的参数,分别…...
python实现两个字符串比对差异点
一:代码实现 import difflib, re# 比较两个文本差异点 def compare_text_index(text1, text2):# 创建SequenceMatcher对象matcher = difflib.SequenceMatcher(a=text1, b=text2)# 获取差异报告diff_report = matcher.get_opcodes()# 检查差异报告中是否存在关键词错误for tag…...
SQLite数据库实现数据增删改查
当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。 实现功能: 创建 SQLite 数据库表,用于存储宠…...
【Golang系统开发】搜索引擎(2) 压缩词典
写在前面 这篇文章我们就给出一系列的数据结构,使得词典能达到越来越高的压缩比。当然,和倒排索引记录表的大小相比,词典只占据了非常小的空间。那么为什么要对词典进行压缩呢? 这是因为决定信息检索系统的查询响应时间的一个重…...
clickhouse修改默认密码
1.明文密码 vim /etc/clickhouse-server/users.xml找到下面的语句,增加明文密码 <password>123456789</password> 2. sha256密码 # echo -n 123456789 | openssl dgst -sha256 (stdin) 15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225 修改…...
基于java在线捐赠系统设计与实现
摘要 近年来,随着网络的快速发展,由于网络的开放性和便利性,具有广阔的发展前景。 本文设计并实现了医药捐赠系统。通过分析确定由两个不同的用户组成,每个用户具有不同的功能。它还可以帮助用户在线求助、申请项目、发表留言等&a…...
【前端】vscode javascript 代码片段失效问题解决
1. 文件--首选项--用户代码片段-vue.json : 添加 // { // // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // // description. Add comma separated ids of the languages where the snippet is app…...
AE-卡通人物解说动画视频的制作
目录 1.导入卡通人物图片和音频文件 2.新建合成 3.在卡通人物图片上添加效果和表达式 4.在音频文件上添加效果和表达式 5.将卡通人物中的 CC Split2 中分割1 表达式链接到滑块中 6.卡通人物根据音频文件自动匹配口型。 AE制作卡通人物解说视频,卡通人物口型根据…...
Linux 查看日志
在 Linux 中,内核日志使用 printk 函数进行输出。你可以通过以下方法查看 printk 的日志: 使用 dmesg 命令: dmesg 这个命令会显示内核环缓冲区中的日志消息,包括使用 printk 输出的消息。你可以通过滚动浏览输出来查看完整的日志…...
使用IO多路复用select完成TCP循环服务器接收客户端消息并打印
服务器 客户端 结果...
unity之Input.GetKeyDown与Input.GetKey区别
文章目录 Input.GetKeyDown与Input.GetKey区别 Input.GetKeyDown与Input.GetKey区别 Input.GetKey 和 Input.GetKeyDown 是 Unity 中用于检测按键状态的两个不同函数。它们之间的区别在于何时触发。 Input.GetKey(KeyCode key): 这个函数会在用户按住指定的键时触发࿰…...
excel 核心快捷键用法
1、wps怎样只复制公示计算出来的数据 1.1、按下快捷键“CtrlC”,复制该单元格。 1.2、按下快捷键“ShiftCtrlV”,即“粘贴为数值”,即可只复制数字而不复制该单元格的公式 1.3、wps怎样只复制公示计算出来的数据_百度知道https://zhidao.baid…...
postgresql
源码安装 ./configure --prefix/apps/pgsql make world -j4 make install-world useradd -s /bin/bash -m -d /home/postgres postgres echo -e ‘123456\n123456’ | passwd postgres mkdir -pv /pgsql/data chown postgres:postgres /pgsql/data/ 设置环境变量 vim /etc/…...
AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解
传送门 -> AUTOSAR配置与实践总目录 AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解 一、 BSW中的I/O架构和模块详解1.1 I/O 模块构成1.2 各子模块功能详解二、举例说明I/O 模块如何配合完成信号采集2.1 硬件处理先行 (step1-4)2.2 AUTOSAR软件登场(step 5-7)2.3…...
基于Java+SpringBoot+Vue的学校田径运动会管理系统【源码+论文+演示视频+包运行成功】
博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…...
使用 Visual Studio Code Docker 工具调试 .NET 容器
作者:Chet Husk 排版:Alan Wang Visual Studio Code Docker 工具已发布1.26.0版本,这个版本为使用 .NET SDK 构建和调试容器映像提供了内置支持。 VS Code 中的 Docker 调试 Visual Studio Code Docker 工具使开发人员可以轻松入门容器。它…...
AI引擎助力,CamScanner智能高清滤镜开启扫描新纪元!
文章目录 ⭐ 写在前面⭐ 突破图像处理难点:扫描全能王的独特优势⭐ 耳听为虚,眼见为实⭐ 产品背后的主要核心:AI-Scan助力⭐ 深度学习助力智能文档处理的国际化进程⭐ 品味智能文档处理的轻松与精准 ⭐ 写在前面 在数字化快速发展的今天&…...
opencv进阶07-支持向量机cv2.ml.SVM_create()简介及示例
支持向量机(Support Vector Machine,SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)对样本数据进行分割,分割的原则是确保分类最优化(类别之间的间隔最大)。当数据…...
LA@n维向量@解析几何向量和线性代数向量
文章目录 概念n维向量向量类型实向量和复向量行向量和列向量行列向量的转换特殊向量向量运算 矩阵的向量分块👺 解析几何向量和线性代数向量👺向量空间 n n n维向量空间 n n n维空间的 n − 1 n-1 n−1维超平面 概念 n维向量 由 n n n个有次序的数 a …...
go 协程并发数控制
错误的写法: 这里的<-ch 是为了从channel 中读取 数据,为了不使channel通道被写满,阻塞 go 协程数的创建。但是请注意,go workForDraw(v, &wg) 是不阻塞后续的<-ch 执行的,所以就一直go workForDraw(v, &…...
MySQL的安装以及卸载
下载官网 https://www.mysql.com/ 切到下载tab页 找到 MySQL Community Server 或者 MySQL Community (GPL) Downloads --> MySQL Community Server 点击download按钮: 点击download进入下载页面选择No thanks, just start my download就可以开始下载了。 下…...
LRU算法与Caffeine、Redis中的缓存淘汰策略
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间 https://dr…...
HTML笔记(3)
表单标签 用于登录、注册界面,以采集用户输入的信息,把信息采集到之后,用户一点按钮,就会把这些信息发送到服务端,服务端就可以把这些数据存储到数据库,所以表单是一个非常重要的html标签,它主要…...
c++——重写(覆盖),实际上对应的就是虚函数
重写是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数…...
算法通关村——字符串反转问题解析
1. 反转字符串 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 1.1 交换 这一题的思路还是简单的&…...
网站制作公司多少人/郑州做网站最好的公司
需求: 从网上下载的N张.png图片保存到image目录中,将下载下来的图片全部重命名test1.png/test2.png... 实现代码: 目录结构: config-->setting.py #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ tian __data__ …...
个人备案 可以做企业网站吗/新闻发布的网站
影任有料,总有一款是你想要影任J作为一个不资深且跑路的程序猿,今天要跟大家讲的算是一个行业小技巧,请各位搬好小板凳仔细听吧!F12作为一个多功能按键,在职场有着特殊的运用,比如说扒图、改网页上的内容、…...
中医医院网站建设需求/网络推广网站有哪些
prefab可无限apply: 如果把一个模块做成了prefab,这个prefab可能在同一个scene中添加多个,甚至添加到了多个scene中。设所有这些实例为instance(1),instance(2),...,instance(n),那么我们应该保证对于任何一个instance(i)来说&…...
苏州淘宝网站建设培训/初学者做电商怎么入手
服务器py文件怎么连接数据库 内容精选换一换本章节适用于MRS 3.x之前版本。Loader支持以下多种连接,每种连接的配置介绍可根据本章节内容了解。obs-connectorgeneric-jdbc-connectorftp-connector或sftp-connectorhbase-connector、hdfs-connector或hive-connectorO…...
滨江区建设局网站/自动搜索关键词软件
1. 连接ftp服务器 格式:ftp [hostname ip-address] a)在linux命令行下输入:ftp 10.18.34.115 b)服务器询问你用户名和口令,分别输入yint和相应密码,待认证通过即可。 2. 下载文件 下载文件通常用get和mget这两条命令。 a) get 格…...
公司门户网站源码/企业网络营销策划案例
局域网计算机文件共享,您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是否有访问权限2010-05-31 15:07:00| 分类: 电脑技术 | 标签:|字号大中小如果出现“xxx计算机无法访问,您可能没有权限使用网络资源。请与…...