S7-200作MODBUS RTU主站和从站例程教学

在这里插入图片描述

0前提&注意

S7-200 Modbus RTU 通信

为了在S7-200上应用MODBUS RTU通信协议,Micro/WIN的软件版本应当是STEP 7-Micro/WIN V3.2以上,并安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包(通常没有被预装):
在这里插入图片描述
此外,只有Port 0支持MODBUS RTU从站模式;Port 0和Port1都支持MODBUS RTU主站模式。

1 S7-200 MODBUS协议指令简介

1.1 MODBUS主站协议指令

包括MBUS_CTRL和MBUS_MSG指令。

MBUS_CTRL指令
该指令用于主站通信初始化,主要针对S7-200 PORT0端口,需要在每个扫描周期调用,以便监视MBUS_MSG指令启动的任何突发消息进程。
在这里插入图片描述
MBUS_MSG指令
该指令用于启动MODBUS从站的请求并处理应答。同一时刻仅能有一个MBUS_MSG指令执行,因此执行多个该指令时,通常每个读写指令都用上一个指令的Done位激活,以此保证所有读写指令循环进行。当EN输入参数和First输入参数都为1时,MBUS_MSG指令启动对MODBUS从站的请求。
在这里插入图片描述
部分指令输入/输出端意义

  1. First:首次参数,参数变化新请求要发送,需边沿触发该位
  2. RW:读写参数,0为读,1为写
  3. Addr:起始MODBUS地址,与从站的Addr含义不同,见下表:
    在这里插入图片描述
  4. Count:计数参数。从起始地址开始读写的数据的个数,计数数值是位数或字数。
  5. DataPtr:数据指针参数,只针对S7-200的V存储器中与读取或写入请求相关的数据的间接地址指针。如果是读指令,读回的数据会放到这个(本地)数据区中;如果是写指令,要写出的数据会放到这个数据区中。

1.2 MODBUS从站协议指令

包括MBUS_INIT指令后MBUS_SLAVE指令。

MBUS_INIT指令
该指令用于启用和初始化或禁止MODBUS从站通信。在使用MBUS_SLAVE指令之前必须正确执行MBUS_INIT指令。应在每次通信状态改变时执行该指令,因此EN输入应当通过一个边沿脉冲打开或仅在首次扫描时执行。
在这里插入图片描述
部分指令输入/输出端意义

  1. MaxIQ:最大I/Q位,参与通信的最大I/Q点数,S7-200的I/O映像区为128/128,因此一般建议将该位设为128
  2. MaxAI:最大AI字数,参与通信的最大AI通道数,16或32,CPU为226时将该位设为32可允许存取全部模拟输入。
  3. MaxHold:用于设定供Modbus地址4xxx使用的V存储器中的字保持寄存器数目(注意是字而非字节)。
  4. HoldStart:V储存器中保持寄存器的起始地址
  5. MODBUS主设备可存取V存储器的MaxHold个字数,并从HoldStart开始。

MBUS_SLAVE指令
该指令用于为MODBUS主设备发出的请求服务,每次扫描时执行,以便该指令检查和回答Modbus。
在这里插入图片描述
部分指令输入/输出端意义
Done:MODBUS执行通信中时为1,否则为0

2 MODBUS指令库的添加方法

2.1添加指令库

通常组态软件没有附带指令库,需额外下载。在官网下载压缩包后,直接按提示安装,然后重进软件即可。
在这里插入图片描述
在这里插入图片描述

2.2分配主站库储存区

从站库储存区的分配方法与本章所述方法一致。

调用STEP 7 - Mciro/WIN32 V3.2 Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。
●注意库储存区不得与其它储存区重叠。

分配方法:
右击【program block】,在菜单中选择【library memory】,在弹出的选项中选择【suggest address】,即可进行地址的自动分配(一般建议手动分配)。
在这里插入图片描述
●该功能只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按Suggest Address按钮,否则也会造成混乱。

3 S7-200作MODBUS RTU主站例程

两台S7-200 PLC通过Modbus进行通信时,一台为从站,一台为主站,当主站I0.2为ON时,可通过Modbus方式读取从站S7-200 PLC的I0.0~I0.7的数值。

3.1接线

使用RS485通信电缆连接主从站的PORT0口。
在这里插入图片描述

3.2编程

  1. 分配主站库储存区
  2. MODBUS主站编程
    在这里插入图片描述
  3. 分配从站库储存区
  4. MODBUS从站编程
    在这里插入图片描述

3.3测试结果

将PC-PPI编程线缆接入主站的PORT1口,改变从站IB0状态,接着拨主站I0.2为ON,在状态表中对VB200进行监控,其值与从站IB0结果相对应。
在这里插入图片描述
需注意的是由于程序限制(执行MBUS_MSG指令需要EN和First同时为1,但是First参数只在I0.2为ON的上升沿为1,此后为0),若从站IB0状态改变,需要手动将主站I0.2复位然后再置位,状态表才能刷新,否则将一直保持上一次的值。
在这里插入图片描述
若希望可以自动刷新,可以对程序做如下改进:
在这里插入图片描述
在这里插入图片描述
即增加了重复计时的定时器来自动刷新MBUS_MSG的指令。需注意定时器刷新周期过短可能会漏掉一些信息。

可以直接将VB200内的信息传送到QB0上通过指示灯显示(即实现从站IB0控制主站QB0),免去了在软件上监控的麻烦:
在这里插入图片描述
如果要实现主站对从站的写(主站IB0控制从站QB0),可添加如下程序:
在这里插入图片描述
此时程序中出现了两个MBUS_MSG指令,同一时刻仅能有一个MBUS_MSG指令执行,因此通常每个读写指令都用上一个指令的Done位(此处为M2.1)激活来保证所有读写指令循环进行。

3.4注意及问题

●MODBUS从属协议通信指定端口0,当端口0被用于MODBUS从属协议通信时,就无法用于任何其他用途,包括与组态软件通信。因此若要在CPU处于RUN时监控程序或下载程序,可使用PORT1。

在实验过程(源程序)中MBUS_MSG指令接连出现了6号错误、4号错误和3号错误。
3=接收超时(从站无响应)
4=请求参数错误(slave address,Modbus address,count,RW)
6=Modbus正在忙于其它请求

仅能实现对部分问题的复现:
触发6号错误的情况:从站没有输入(IB0均处于复位状态时)

3号问题和4号问题出现的情况未知,但是可以确定的是,在接线和程序正确的情况下,连续改变I0.2的值可消除此类问题。

4 S7-200作MODBUS RTU从站例程补充说明

本文是对官方文档S7-200 Modbus RTU 通信的补充。

由于官方文档并未提供从建立工程到使用MODSCAN 32进行测试的完整步骤,这里再提供一篇更为完整的教程:
ModScan(主站)与200PLC(从站)的Modbus通讯

4.1梯形图

由于官方教程已包含例程,可以直接引用官方例程,无需自己创建。
在这里插入图片描述
这里要注意MBUS_INIT的Addr(从站地址)、MaxHold(最大保持寄存器区)和HoldSt~(保持寄存器区起始地址)。
从站地址取值1~247,不可与其它从站冲突。
在这里插入图片描述
由子程序参数HoldStart和MaxHold指定的保持寄存器区,是在S7-200 CPU的V数据存储区(CPU型号不同V数据存储区大小不同)中分配,其中MaxHold规定了保持寄存器区的大小,HoldSt规定了保持寄存器区起始地址,默认为VB0。要注意的是MaxHold以字为单位(VW),HoldSt以字节为单位(VB),而1W=2B。当HoldStart = VB0,MaxHold=1000时,保持寄存器区并非VB0~VB999,而是VB0~VB1999共2000个字节。

Modbus RTU 从站地址与S7-200的地址对应关系如下表所示:
在这里插入图片描述
举例,若HoldStart为VB1000,则按照公式,40001对应VB1000,40002对应VB10002;更确切的说VB1000和VB1001对应40001,VB1002和VB1003对应40002。

注意!不同设备的Modbus协议起始地址不一定一样,有些从0开始,有些从1开始;建议从0开始的设备地址加1,也从1开始。

库指令区
库指令数据区不能和保持寄存器区有任何重叠,否则在运行时会产生错误,不能正常通信。
库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间,如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。该区缺省情况下是从VB0开始。建议不要使用"Suggest Address"按钮进行自动分配,容易造成混乱。

向V数据储存区的变量写值
默认情况下该区变量的值为0,若想要改变变量值,需要使用MOV_B指令。
当HoldStart=VB1000时,若想令40001=0102H,则:
在这里插入图片描述

特别提示

Modbus 指令库启动后(即将MODBUS程序下载进PLC并启动CPU后),将无法通过同一个通信端口进行 CPU 监控,也无法下载新工程。如要重新下载程序,必须先将CPU手动置STOP再进行下载或者使用Port1口进行下载
MODSCAN 32也是同样的道理,使用STEP 7-Micro/WIN下载完成后如果不退出软件,MODSCAN将无法与PLC建立通信;同理,MODSCAN与PLC建立通信后,即使将PLC的CPU拨至STOP也无法建立通信。

### 回答1: S7-1200是一款可编程控制器,支持Modbus TCP通信协议。Modbus TCP是一种常用的工业通信协议,可以实现设备之间的数据交互。 在S7-1200上实现Modbus TCP通信,需要进行以下几个步骤: 1. 配置S7-1200的网络设置:在STEP 7基本程序中,选择目标S7-1200,打开“硬件”-> “连接”-> “参数设置”,设置好IP地址、子网掩码和网关。 2. 创建Modbus TCP通信连接:在STEP 7基本程序中,选择目标S7-1200,打开“网页服务器”-> “TCP/IP通信”-> “Modbus TCP通信”-> “新建连接”,配置好连接的IP地址和端口号。 3. 配置Modbus TCP通信数据区:在STEP 7基本程序中,选择目标S7-1200,打开“网页服务器”-> “TCP/IP通信”-> “Modbus TCP通信”-> “数据区”-> “设置”,设置好输入数据区和输出数据区的起始地址和长度。 4. 编PLC程序:在STEP 7基本程序中,选择目标S7-1200,打开“程序”-> “新建”-> “网络终端”,根据Modbus TCP通信的需求,编PLC程序。可以使用特定的函数块来实现Modbus TCP通信功能,例如“TCP/IP_Socket”等。 5. 下载和运行PLC程序:将PLC程序通过STEP 7基本程序下载到S7-1200,然后按下运行按钮,开始运行程序。 通过以上步骤,就可以在S7-1200上实现Modbus TCP通信例程。可以通过读取和入输入数据区和输出数据区来实现与其他设备之间的数据交互。注意,使用Modbus TCP通信时,确保其他设备的IP地址和端口号与S7-1200上设置的一致。 ### 回答2: S7-1200是西门子公司推出的一种可编程控制器。Modbus TCP是一种基于TCP/IP网络的工业通讯协议,常用于现场设备与上位机的通讯。 S7-1200提供了丰富的功能和网络通讯模块,方便用户实现与其他设备的通讯。在实现S7-1200Modbus TCP通讯的例程中,我们可以按照以下步骤进行: 1. 首先,在S7-1200的项目中添加Modbus TCP通讯模块。可以在TIA Portal软件中将其添加到项目硬件配置中。 2. 配置Modbus TCP通讯模块的网络参数,包括IP地址和端口号等。确保S7-1200与目标设备在同一网络中,且网络连接正常。 3. 在S7-1200中创建相关的数据块,并配置数据块的输入输出变量。这些变量将为与目标设备进行通讯的数据载体。 4. 编S7-1200的用户程序,使用Modbus TCP通讯协议与目标设备进行数据交互。可以使用S7-PLCSIM软件进行仿真和测试。 5. 在用户程序中,使用适当的Modbus函数块以及相关的通讯指令来实现数据的读取和入。根据具体的需求,可以通过读取和入寄存器来进行数据通讯。 6. 配置S7-1200的通讯端口以及数据传输周期等参数,确保通讯的稳定性和数据的准确性。 通过以上步骤,我们可以在S7-1200中实现Modbus TCP通讯的例程。这样,S7-1200就可以与其他支持Modbus TCP协议的设备进行数据交换,实现更加灵活可靠的工业自动化控制。需要注意的是,根据具体的设备和通讯要求,例程中的具体实现细节可能会有所不同,需要根据实际情况进行调整和优化。 ### 回答3: S7-1200 Modbus TCP通讯例程是一种示例程序,用于实现S7-1200 PLC与其他设备之间的通信。Modbus TCP是一种开放的通信协议,用于在TCP/IP网络上实现PLC和其他设备之间的数据交换。 在S7-1200 PLC上进行Modbus TCP通讯,首先需要进行以下步骤: 1. 配置PLC网络设置:在Step 7软件中,配置S7-1200 PLC的IP地址、子网掩码等网络参数,确保与其他设备在同一网络中。 2. 编通讯代码:在S7-1200 PLC程序中,使用Modbus TCP通讯函数块来实现与其他设备的数据交换。例如使用MODTCP_FC3函数块来读取Modbus设备的保持寄存器。 3. 配置通讯设备:在通讯设备(如Modbus从机)中,设置相应的Modbus寄存器地址、读权限等参数,确保与PLC的通信一致。 4. 执行通讯例程:编译并下载程序S7-1200 PLC中,然后启动PLC运行。PLC将根据设定的周期自动执行Modbus TCP通讯例程。 在执行通讯例程过程中,PLC可以通过读取Modbus设备的数据来控制自身的输出,也可以将自身的数据通过Modbus协议发送给其他设备进行处理。例如,通过读取Modbus设备的温度传感器数据,PLC可以根据设定的条件控制风扇的开关。 总而言之,S7-1200 Modbus TCP通讯例程是一种实现PLC与其他设备之间数据交换的示例程序,通过建立TCP/IP连接,PLC能够读取和入其他设备的寄存器数据,实现数据的监控和控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值