6DD1610-0AH0用于S7-400西门子

供应商
湖南西控自动化设备有限公司
认证
手机号
17838383235
经理
徐嘉泉
所在地
中国(湖南)自由贸易试验区长沙片区开元东路1306号开阳智能制造产业园(一期)4#栋301
更新时间
2024-09-21 08:50

详细介绍

施耐德 m580 和西门子 s7200 smart 的modbus tcp通讯

m580是施耐德的中大型plc,功能强大,s7 200smart是西门子的小型plc,应用广泛,在工业现场经常需要2个plc之间进行通讯。因为m580支持modbustcp和ethernet/ip两种工业以太网协议,并且s7 200 smart也可以通过功能块实现modbustcp服务器的功能,所以它们之间可以进行modbus tcp的通讯。本例是m580作为客户端去读写s7 200smart的实现方法。


实验设备和软件

bmep584040    sv 3.1     control expert14.0  (unity pro 14.0);

cpu sr20      sv 2.4     step7-microwin smart v02.04;

安装有软件的笔记本电脑,网线若干;


网络架构和ip地址

实验中使用的是bmep584040的cpu,cpu上有3个网口,第1个网口是服务端口,用于连接s7 200smart,第2和第3个网口是设备口,主要是用于连接以太网远程io的,也可以连接pc用于编程。3个网口在内部是连通的,可以实现类似于交换机的功能,所以按照图中的连接,pc也可以通过编程软件连上s7200 smart。


s7 200 smart实现modbus tcp服务器的功能

3.1在软件中分配s7 200 smart的ip地址,如下图所示。


3.2step7-micro/win smart 从v2.4 版本开始,软件中直接集成 modbus tcp库指令,无需单独安装或者购买。安装软件后,modbus tcp 指令位于 step7-micro/win smart项目树中“指令”文件夹的“库”文件夹中。如下图所示。指令分为客户端和服务器两种,目前指令版本为v1.0。客户端指令会占用开放式用户通信资源主动连接,多8个;服务器指令会占用开放式用户通信资源的被动连接资源,多也是8个。本例中s7200 smart作为服务器,所以只调用mbus_server功能块。


3.3mbus_server功能块管脚说明如下:

参数及类型

数据类型

说明

connect

in

bool

=1:服务器接受来自客户端的请求;


=0:服务器可以断开已经建立的连接

ip_port

in

word

服务器本地端口号

maxiq

in

word

对应数字量输入/输出点(对应modbus 地址参数0xxxx或者1xxxx)


可设置范围:0-256,


=0表示禁用对输入和输出的所有读取和写入。


建议将 maxiq 值设置为 256。

maxai

in

word

对应模拟量输入参数(对应modbus 地址参数 3xxxx)


可设置范围:0-56。


= 0表示禁用对模拟量输入的读取。


要允许访问所有 cpu 模拟量输入,maxai 的建议值如下:


对于 cpu cr40 和 cr60,为 0


对于所有其它 cpu 型号,为 56

maxhold

in

word

用于 modbus 地址 4xxxx 或 4yyyyy 的 v 存储器中的字保持寄存器数

holdstart

in

dword

指向 v 存储器中保持寄存器起始位置的指针

done

out

bool

true:以下任一条件时为真:客户端已与服务器建立连接;客户端已与服务器断开连接;客户端已接收 modbus响应;发生错误


false:客户端正忙于建立连接或等待来自服务器的 modbus 响应。

error

out

bool

出现错误,仅一个周期有效


3.4设置库存储器分配

鼠标右键选择“程序块”文件夹,在菜单中选择“库存储器”:


在库存储区分配对话框中手动输入存储区的起始地址。此实例为vb7000开始,以使指令库可以正常工作。确保库存储区与程序中其他已使用的地址不冲突。使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。如下图所示:


3.5编写简单的逻辑程序如下:

s7 200smart作为服务器可以支持8个客户端,但是一个客户端需要一个mbus_server,本例中,需要连2个客户端,所以调用了2个mbus_server的功能块,注意ip_port需要区别开,一个是502,一个是503,不可以2个mbus_server使用同一个端口。


502端口从vb0开始,即vw0对应modbus的40001(vw0对应vb0和vb1;vw2对应modbus的40002(vw2对应vb2和vb3)


503端口从vb100开始,即vw100对应modbus的40001;vw102对应modbus的40002:


c0是计数器,cu管脚是1秒的脉冲,做一个简单的自加1的计数,然后将c0的计数值给到vw2和vw100,在通讯的时候,看客户端读到的值是否在变化,用于判断通讯是否正常。


3.6将程序下载到cpu,将cpu启动起来,电脑使用modscan测试s7 200 smart的modbustcp服务器的数据。(modscan是一个电脑测试工具,可以模拟modbus的主站)


测试502端口的数据,502端口开辟的寄存器数量是20个,测试数据vw2对应40002:


测试503端口的数据,503端口开辟的寄存器数量是40个,测试数据vw100对应40001:


m580实现modbus tcp的客户端的功能

4.1打开control expert(unitypro)软件,新建项目,选择bmep584040的cpu,新建完成后,如下图所示,解锁安全。解锁安全是启用cpu的服务里面的功能,并且禁用访问控制,如果访问控制是启用的,且没有设置正确,可能会导致次下载程序后,软件用以太网就连接不上cpu了。


解锁完成后,需要如下图所示打钩“确认”,在control expert修改了硬件和配置,都需要打钩“确认”。


设置m580的ip主地址192.168.10.1,其中ip地址a用于连接远程的以太网io,本例中没有用。


在“工具”菜单的“项目设置”中,勾选“直接以数组变量表示”和“允许动态数组”,如下图所示,这个是在使用read_var和write_var功能块的时候不报“禁用动态数组”错误。


4.2m580使用read_var和write_var编程来实现modbus tcp通讯


首先在变量表中新建如下的变量:


在control expert软件里面,modbustcp的客户端功能默认都是访问服务器的502端口的,并且也只能访问502端口,其他端口访问不了。


%s5是100毫秒的脉冲,p是上升沿,n是下降沿,因为s7 200smart的502端口一次只能接受一个请求,所以read_var和wirte_var需要分开触发。


addm是寻址功能块,0.0.3指示的是m580的cpu的网口(这个是默认的),192.168.10.200是s7 200smart的ip地址。


obj填写%mw表的是读写4区,num是0表示读取的首地址是40001,nb 6表示读6个字。


gest是通讯管理表,是4个整形的数组,其中第3个字是超时时间,默认时基是100ms,本例中赋值20,表示的是2秒,即通讯中断2秒后,重新开始连接,在以太网通讯里面,这个超时时间是一定要赋值的,时间的长度建议大于该read_var的触发时间。


recp是读取过来存放的数组,本例中读取6个字,所有recp1是一个6个整形的数组。


write_var和read_var的管脚大致相同,其中emis是m580准备写给对方的数组,因为要给对方写6个字,所以emis1也是一个6个整形的数组。


write_var的num是10,即写对方的40011,对应的是s7 200 smart的vw20开始的地址。


使用ctu做一个1秒的计数,将结果存放在emis1的个元素里面,在通讯的时候,查看这个变化的值是不是写给s7 200smart了,来判断通讯是否正常。编写程序如下:


程序编好以后,重新生成所有项目,没有错误以后,将程序下载到cpu,次给m580下载程序,建议使用miniusb的编程电缆。如果没有,使用网线也可以。


同时在线监控m580和s7 200 smart的程序,可以看到,m580将smart的vw2的值读过来存放在recp1[2],同时m580把emis1[1]的值写给smart的vw20。


4.3m580 使用dtm浏览器配置扫描和s7 200 smart通讯(对于同一个s7 200smart,使用read_var就不能配置扫描,同样,配置了扫描,就不能使用read_var通讯)


在“工具”菜单的“dtm浏览器”中,右键bmep58_ecpu_ext,选择“添加”,在弹出的对话框中,选择modbusdevice,添加完成后,在分布式总线下面,会多出一个modbus_device的设备,如下图所示:


添加modbus_device完成后,双击bmep58_ecpu_ext,选择“设备列表”下面的modbus_device,在“地址设置”里面将ip设置为s7200 smart的ip地址 192.168.10.200。因为s7 200smart的ip是在它的软件里面配置好了的,这个“地址服务器”的“此设备的dhcp”需要选择为“已禁用”(默认是已禁用)。设置完成后,点击页面右下角的“应用”按钮。


然后选择“请求设置”,点“添加请求”,就会在表格中出现一条请求配置,连接位1,这个是自动分配的。


单元id 255,对于直接以太网设备,可以是255,如果是modbus tcp转485的网关,这个单元id是485的从站地址,用于寻址到网关下面的每一个485从站。


超时默认1500ms,当超过1500ms通讯还没成功,就会报错。


重复速率60ms,这个是这条扫描的重复的周期,即60ms重复扫描一次,可以根据实际情况修改。


读取地址,0表示读取从站的40001;


读取长度,4表示读取4个字。


上一个值,指示通讯中断的时候,是保留上一次通讯的值,还是设置为0。


写入地址,10表示写从站的40011;


写入长度,4表示写4个字。


配置完请求的参数后,选择“请求001:项目”,在输入里面,按住电脑的shift建,将下图中的0—7选择为蓝色,然后点击右边的“定义项目”,在弹出的“项目名称定义”中,数据类型选择int(这个可以根据实际情况自己定义类型),项目名称也可以修改,本例中选择默认,点击确定。


点“确定”以后,可以看到绿色的方框,16表示16个位的数据。


用相同的方法,把输出也“定义项目”,完成后如下图所示:


配置完成后,点击右下角的应用,确定,然后重新生成所有项目,保证程序没有错误以后,双击“基本变量”,在deviceddt里面,可以看到生成的modbus_device这个变量,其中freshness和freshness_1是通讯状态变量,它们为1就是通讯正常,为0是通讯错误。inputs是读取的s7200 smart的数据,outputs是m580写给s7 200 smart的数据。


在程序中添加一行简单的程序,将ctu的计数结果move到modbus_devicei0,这个值是在通讯的时候写给s7200 smart的,方便观察通讯状态。


重新生成所有项目,没有错误以后,将程序下载到m580的cpu,将m580运行起来,在线监控动态数据表的数据,可以看到modbus_device.freshness和modbus_device.freshness_1的值都为1,表示通讯正常,modbus_device.inputs.blocka_ii1是读取的s7200 smart的vw2的值,同时m580将modbus_devicei0的值写给了s7 200smart的vw20。


总结和附录

5.1s7 200 smart作为modbustcp服务器的时候,是可以支持多个客户端来访问的,前提是需要调用多个mbus_server的功能块,且ip_port需要不一样。


5.2control expert软件平台下面的施耐德plc的modbustcp的客户端,只能读取服务器的502端口的数据,其他端口的数据读取不到。也就是说,如果2个controlexpert平台下面的施耐德plc,同时去读写同一个s7 200 smart是不能通讯成功的。


同理,不要同时使用modscan和m580的plc去访问s7 200smart服务器的502端口。本例中可以m580访问502端口,同时modscan访问503端口。


5.3m580的modbus tcp的客户端通讯常用的有两种方式:

一种是使用编程的read_var和write_var,使用编程方式支持的modbus功能码更多(如果是05、06功能码,需要使用data_exch),且通讯的时序可以自己控制,但是对编程能力有要求;


另外一种是在dtm里面配置扫描,它的好处是不用编写程序,配置正确即可,但是它支持的功能码有限制,只能读写modbus的保持寄存器(4x的寄存器),且通讯的时序不容易控制。


展开全文

我们其他产品
我们的新闻
微信咨询 在线询价 拨打电话