在企业做一些项目时,难免会遇到各类的通信需求,很多时候,我们都是从一个简单的通信案例中获得灵感,今天小编就曾经做过的相关的项目案例分享给大家,记得收藏、转发,以备以后再用。
下面开始:
1、一台支持Modbus协议的称重仪表
知识点:Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气
Schneider
Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De
facto),并且现在是工业电子设备之间常用的连接方式。
2、设置好仪表的通讯参数
根据自己的要求可以调整,只要和PLC端统一就可以
波特率:9600
数据格式:8n1:8位数据/无校验位
通讯方式:Modbus协议
校验和:OFF
仪表通讯地址:1
设置方法:查看说明书,找到通讯相关章节,里面有详细的通信相关的设置
3、确定所要读取的变量地址
因为,我们只需要读取仪表的当前实时重量,所以只需要读取存储实时重量的寄存器地址中的数据。
仪表实时重量的地址为0,对应Modbus通讯里的40001
4、200smartPLC一台
5、连接端口
将仪表端的RS485接口A,B与PLC端的DB9接口相连(DB9接口的3为A,8为B)
准备工作完毕,接下来就开始我们的PLC编程了,因为200smart软件自身就带了Modbus协议库,所以,不需要我们另外去添加了,下面就介绍下怎么编程的。
知识点:DB9接口,D型数据接口连接器,用于连接电子设备(比如:计算机与外设)的接口标准。因形状类似于英文字母D,故得名D型接口。
6、初始化主站指令
关于编程步骤,不是本文重点,这里不说那么细了,大家可以保留本文,以备后续用到时能够找到。
解释:
“模式”(Mode) 输入的值用于选择通信协议。输入值为 1 时,将 CPU 端口分配给 Modbus 协议并启用该协议。
参数“奇偶校验”(Parity) 应设置为与 Modbus 从站设备的奇偶校验相匹配。0(无奇偶校验)
参数“端口”(Port)设置物理通信端口(0 = CPU 中集成的 RS-485)。
参数“超时”(Timeout) 设为等待从站做出响应的毫秒数。典型值是 1000 ms (1 s)。
当 MBUS_CTRL指令完成时,指令将“真”(TURE) 返回给“完成”(Done) 输出。
“错误”(Error) 输出包含指令执行的结果。
以上的参数设置与称重仪表端的对应,即上面说的仪表的通讯参数
7、两个仪表的轮询访问
参数“从站”(Slave)
是 Modbus 从站设备的地址。允许范围为 0 至 247。地址 0 是广播地址。仅将地址 0 用于写入请求。系统不会响应对地址 0
的广播请求。并非所有从站设备都支持广播地址。S7-200 SMART Modbus 从站库不支持广播地址。
使用参数 RW 指示是读取还是写入该消息。0(读取)
参数地址 (Addr) 是起始 Modbus 地址。寄存器地址为0,对应Modbus通讯里的地址40001
参数“计数”(Count) 用于分配要在该请求中读取或写入的数据元素数。读取仪表中保持寄存器字数。
参数 DataPtr 是间接地址指针,指向 CPU 中与读请求相关的数据的 V 存储器。将 DataPtr 设置为用于存储从 Modbus 从站读取的数据的第一个 CPU 存储单元。
地址1的仪表数据被存入到VW600中,地址2的仪表数据被存入到VW610中。
编程结束,下面我们看下监控效果:
主站初始化指令运行正常,没有报错
地址1仪表数据为131,地址2仪表数据为0
总结补充:
MODBUS协议是应用于电子控制器上的一种通用语言。MODBUS协议详细定文了校验码、数据序列等,这些都是特定数据交换的必要内容。MODBUS协议在一根通讯线上使用主从应答式连接(半双工),这意味着在一根单的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。
MODBUS协议只允许在主机(PC、PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们的初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
当数据帧到达终端没备时,它通过一个简单的“端口"进入被寻址到的设备,该设备去掉数据帧的“信封"(数据头),读取数据,如果没有惜误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封"中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执五了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应,或者返回一个错误指示帧。