6DD1610-0AH0用于S7-400西门子
- 供应商
- 湖南西控自动化设备有限公司
- 认证
- 手机号
- 17838383235
- 经理
- 徐嘉泉
- 所在地
- 中国(湖南)自由贸易试验区长沙片区开元东路1306号开阳智能制造产业园(一期)4#栋301
- 更新时间
- 2024-09-21 08:50
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;
安装有软件的笔记本电脑,网线若干;
实验中使用的是bmep584040的cpu,cpu上有3个网口,第1个网口是服务端口,用于连接s7 200smart,第2和第3个网口是设备口,主要是用于连接以太网远程io的,也可以连接pc用于编程。3个网口在内部是连通的,可以实现类似于交换机的功能,所以按照图中的连接,pc也可以通过编程软件连上s7200 smart。
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功能块管脚说明如下:
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:
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的寄存器),且通讯的时序不容易控制。
展开全文