基于S7-1200的Modbus TCP通讯方案设计全流程

360影视 国产动漫 2025-04-05 14:38 1

摘要:有两台西门子S7-1200 PLC,一台为CPU1214C DC/DC/DC,版本号为V4.4,作为服务器;另一台为CPU1212C DC/DC/DC,版本号为V4.4,作为客户端,通过MODBUS TCP通讯以实现以下控制要求。

有两台西门子S7-1200 PLC,一台为CPU1214C DC/DC/DC,版本号为V4.4,作为服务器;另一台为CPU1212C DC/DC/DC,版本号为V4.4,作为客户端,通过MODBUS TCP通讯以实现以下控制要求。

1:客户端发送数据给服务器设定速度并控制服务器电机的启停。

2:服务器根据客户端发送的启停信号和速度设定控制电机的启动、停止和调速,并把测量的速度反馈给客户端,并且发送数据控制客户端电机的正反转。测量转速使用增量式旋转编码器,每转输出脉冲1000个脉冲。

3:客户端根据服务器发送的信号控制电机的正反转。

根据以上控制要求可进行的I/O分配如下表所示:

MODBUS TCP在工业自动化中是一种应用非常广泛的通讯协议,在西门子博图中需要使用两条MB_CLIENT和MB_SERVER指令来实现。而MB_CLIENT指令就是将CPU作为MODBUS TCP通讯客户端通过以太网和MODBUS TCP的服务器进行通讯。

而MB_SERVER指令则是将CPU作为通讯的服务器,通过以太网与客户端进行通讯,来处理客户端的连接请求、接收和处理MODBUS请求,并回复应答报文。

关于两条指令的详细介绍参考连接《西门子PLC MODBUS通讯指令详解》。

通讯组态

1.新建一个项目,在项目树下双击“添加新设备”-选择S7-1200CPU列表下的CPU1214C DC/DC/DC,版本号4.4(用的博图V16),然后在“设备视图”中,选中刚添加的PLC,在巡视窗口中,点击“属性”-“常规”选项下,启用“系统和时钟存储器”、“高速计数器”-“HSC1”通道勾选“启用高速计数器”,计数类型选择“频率”,工作模式选择“单向”,测量周期选择“1.0sec”,因为我们只接一个编码器,所以不要启用其他高速计数器通道,否则会影响增加运行负荷。如下图所示:

2.还是在常规选项下-“DI 14/DQ 10”-“数字量输入”-“通道0”,设定输入滤波器为10millisec,这里其实就是修改的PLC输入点的响应速度,因为是高速计数器,所以要根据实际修改。如下图所示:

再次回到设备视图,在右侧硬件目录下-AQ-拖入一个模拟量输出模块,拖放时会显示可以放入的位置,如下图所示:

选中模拟量模块视图,打开“属性”-“常规”窗口,在模拟量输出选项下可以看到通道0的地址和输出类型,如下图所示:

完成上述设定后,就完成了“服务器”端的硬件配置;回到“网络视图”,在左侧“硬件目录”下选择一个型号为CPU1212C DC/DC/DC,版本号为4.4的CPU拖入网络视图中并命名为客户端,然后有鼠标左键,将服务器的网口通讯线拖放到后加的CPU网口上,并点击“显示地址”,可看到两个CPU对应的IP地址,如下图所示:

客户端编程

1.新建全局变量数据库,一个为客户端数据“clientDate”还有一个为通讯链接ip数据块“MB_client_CONN”,分别创建的变量如下图所示:

2.新建一个PLC变量表,用于分配硬件输入输出控制点位:

3.编写函数块程序FB

在客户端站点下,添加一个函数块,并命名为“client_fb”用于读取服务器的数据,并将读取的字节分解成位,所以此处要使用AT指令,此时就需要先取消函数块的“优化的块访问”,然后添加变量接口,分配完成后如下图所示:

AT指令的使用:先定义一个变量,将类型设置为AT,然后再设定类型。

4.客户端编程,创建的函数块采用SCL编程语言,下面展示部分程序代码:

5.编写完成的函数块就可以在主循环程序块OB1中进行调用,方法如下:

在OB1程序中,将编写好的client_fb拖入到编辑区,然后根据各个引脚的定义功能,将PLC变量表和全局变量数据块中对应的变量拖入对应的引脚。程序代码如下:

6.在主程序中,先将电机的设定速度进行线性化处理,然后调用函数块进行数据的读取,最后再计算出服务器电机的运行速度。

7.数据来自题目设定要求的参数。

来源:烟雨003

相关推荐