当前位置: 首页 > 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.dtcms.com/a/302639.html

相关文章:

  • 深度学习核心模型架构解析:Transformer自注意力机制与Query-Key-Value投影的向量空间几何解释
  • 【GitHub Workflows 基础(一)】认识 .github/workflows/ 下的多个工作流
  • ubuntu qt环境下出现No suitable kits found解决方案
  • 国产化PDF处理控件Spire.PDF教程:Java 提取 PDF 图片,高质量提取与图片过滤技巧
  • ros2的package.xml和rosdep
  • 青少年编程高阶课程介绍
  • LangGraph智能体(天气和新闻助手)开发与部署
  • 嵌入式Linux:注册线程清理处理函数
  • 墨者:SQL过滤字符后手工绕过漏洞测试(万能口令)
  • 婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
  • Android15广播ANR的源码流程分析
  • 【Unity】Application类常见路径一览表
  • 05 OpenCV--图像预处理之图像轮廓、直方图均衡化、模板匹配、霍夫变化、图像亮度变化、形态学变化
  • Jenkins流水线部署+webhook2.0
  • Rust/Tauri 优秀开源项目推荐
  • Flutter渲染引擎:Impeller和Skia
  • RPC 详解
  • 鱼皮项目简易版 RPC 框架开发(二)
  • 基于Spring Boot和Vue电脑维修平台整合系统的设计与实现
  • 计算机网络(基础篇)
  • linux内核中kfifo实现队列
  • 并发安全之锁机制一
  • Day22-二叉树的迭代遍历
  • kruscal重构树
  • 【Spring Boot 快速开发】一、入门
  • React 服务器端渲染原理
  • 基于AFLFast的fuzz自动化漏洞挖掘(2)
  • 结合项目阐述 设计模式:单例、工厂、观察者、代理
  • 面向对象设计原则和设计模式分类
  • RTC时钟详解