当前位置: 首页 > news >正文

<PLC><西门子><modbusTCP>在西门子S7-1200系列PLC中,如何设置modbusTCP通讯?

前言

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。

PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。

除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

环境配置

系统:windows10
平台:visual studio code
软件:TIA V18(博图)
硬件:S7 1214C DC/DC/DC
固件版本:V4.6
编程语言:javascript、梯形图

概述

本文介绍在西门子1200系列PLC中,如何实现modbusTCP通讯?
在这里插入图片描述

1、modbusTCP参数

本文以PLC作为modbusTCP服务器为例,在西门子博图(V18)软件中,我们创建一个新项目,选择PLC型号为1214C,然后新建一个FC块。
西门子编程软件提供了用于modbusTCP通讯的系统块:MB_SERVER,我们可以在指令导航栏中找到它:
在这里插入图片描述
如图,PLC既可以使用MB_CLIENT作为modbustcp客户端,也可以使用MB_SERVER作为服务端。

本例是作为服务端,所以我们使用MB_SERVER,这是官方提供的FB块,使用SCL编写,但我们无法看到源代码。
在这里插入图片描述
我们来看一下需要设置哪些参数?
1、DISCONNECT:bool,用于断开已经连接的modbusTCP连接。
2、MB_HOLD_REG:VARIANT,保持寄存器缓存区,可以用于读写。

在modbus协议中,我们可以使用功能码来实现不同类型数据区的读写,如03可以读取保持寄存器,06写入保持寄存器,01读取线圈,05写入线圈,等等

此处,我们可以创建一个数组,数组元素可以是字节(Byte),也可以是字(Word),不过,通常modbus的寄存器都是按照字来划分的,所以,本例中,我们创建一个长度为30的字数组:
在这里插入图片描述
数组的长度依照实际需要来即可。此处数组的最大长度,通常取决于通讯双方控制器的性能和限制。

3、CONNECT:VARIANT,此处connect参数是一个结构体,用于设置连接相关的参数,其具体类型可设置如下:
在这里插入图片描述
本例中,我们使用的是第一种类型TCON_IP_v4,其内部结构如下:
在这里插入图片描述
我们需要特别注意CONNECT的参数:
1、interfaceid:HW_ANY,即硬件标识符,在西门子PLC中,用于标识已经组态的硬件,此处,我们可以去查找已经组态的PLC模块:
在这里插入图片描述
如上图,本例中,硬件标识符的值为64(10进制),也可以写成16进制,即16#40。
2、ID:CONN_OUC,用于标识已经创建的连接,需要注意,ID的值不能重复。本例设置为2。
3、ConnectionType:Byte,表示连接的类型,TCP类型的值为11。modbusTCP也属于TCP连接,因此本例中设置为11。
4、ActiveEstablished:bool,表示连接如何建立,本例中,PLC作为服务器,属于被动连接(即等待客户端主动连接),所以设置为false。
5、RemoteAddress:ARRAY [1..4] of BYTE,用于设置远程设备的IP地址,如果不需要与特定设备连接,可以设置为“0.0.0.0”,否则,设置为远程设备的特定IP,如本例中设置为:192.168.0.250
6、RemotePort:UINT,远程设备端口号,由于PLC是作为服务端,因此可以不用特别设置,当然如果有固定端口,设置为实际使用即可,如果运行任何端口连接,设置为0。
7、LocalPort:UINT,本地端口,即PLC作为服务器端的端口号,默认为502,如果要修改,取值范围为:1-49151,但是要注意不要与网络中其他设备的端口号冲突。

再看下状态参数:
1、NDR:bool,表示是否有新数据写入
2、DR:bool,表示正在读取数据
3、ERROR:bool,表示调用指令出错
4、STATUS:WORD,表示指令的详细状态信息,具体如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:切记要设置CONNECT参数中的几个关键参数:
interfaceidIDRemoteAddressLocalPort

注意2:如果你忘记了设置interfaceid,也就是硬件标识符,运行后,指令会报错,代码是809B,但是你如果看status,会发现并没有这个错误码。
事实上,这个错误代码,是在TCON这个指令中:
在这里插入图片描述
因为modbusTCP的连接属于TCP连接的一种,其内部建立连接的过程与TCON是一致的。

http://www.lryc.cn/news/602888.html

相关文章:

  • 介绍一下static关键字
  • Go 原理之 GMP 并发调度模型
  • 未授权访问漏洞靶场(redis,MongoDB,Memcached...)
  • 从0到1学PHP(一):PHP 基础入门:开启后端开发之旅
  • 境外期货Level2高频Tick历史行情数据获取与应用指南
  • 墨者:SQL注入实战-MySQL
  • 中兴云电脑W101D2-晶晨S905L3A-2G+8G-安卓9-线刷固件包
  • **线程与进程的区别与联系**
  • Redis 部署模式详解
  • NBIOT模块 BC28通过MQTT协议连接到电信云
  • 【大模型LLM】梯度累积(Gradient Accumulation)原理详解
  • 微服务架构中 gRPC 的应用
  • Rust 最短路径、Tide、Partial、Yew、Leptos、数独实践案例
  • Hugging Face-环境配置
  • 洛谷 P10448 组合型枚举-普及-
  • HTML响应式SEO公司网站源码
  • 归雁思维:解锁自然规律与人类智慧的桥梁
  • 疯狂星期四文案网第22天运营日记
  • CFIHL: 水培生菜的多种叶绿素 a 荧光瞬态图像数据集
  • 递归算法的一些具体应用
  • TDSQL 技术详解
  • go‑cdc‑chunkers:用 CDC 实现智能分块 强力去重
  • Apache Ignite 的 JDBC Client Driver(JDBC 客户端驱动)
  • 利用frp实现内网穿透功能(服务器)Linux、(内网)Windows
  • OpenGL进阶系列22 - OpenGL SuperBible - bumpmapping 例子学习
  • 短剧系统开发上线全流程攻略:从架构设计到性能优化
  • 页面性能优化
  • Go性能优化深度指南:从原理到实战
  • C++-关于协程的一些思考
  • Linux 远程连接与文件传输:从基础到高级配置