举例看懂西门子MODBUS通信程序

前一篇文章写了西门子PLC与PLC之间MODBUS通信地址与实际PLC地址的对应关系,下边以实际举例来看懂MODBUS通信程序。

Modbus地址有4类:

00001---09999是离散输出地址,对应PLC的Q线圈。

10001---19999是离散输入地址,对应PLC的I输入点。

30001---39999是输入寄存器地址,对应PLC模拟量输入AIW

40001---49999是保持寄存器地址,对应PLC的V存储器

案例一

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(1)

主站定义通信参数

SM0.0----为常为“1”状态,因此

EN端----常为1,保证该指令每个扫描周期被调用。

Mode---常为1,表示启用Modbus协议。

Baud---“波特率“9600

Parity---“奇偶校验参数“,0-无校验,1-奇校验,2-偶校验。

Timeout---“超时”参数。“超时”参数设为等待来自从站应答的毫秒时间数。

Done--- 1=执行完定义参数,0=没执行.

Error---错误代码,VB0=0 无错误

VB0=1 奇偶校验选择无效

VB0=2 波特率选择无效

VB0=3 超时选择无效

VB0=4 模式选择无效

MBUS_MSG : 主站读写指令

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(2)

从程序看出:

EN:指令使能位。常通信号1

First:触发该指令。要用沿信号。

Slave:从站站号为1,(1-247均可)

RW:读写选择:0——读,1——写

Addr:为1,表明是0类地址,实际为00001,对应从站起始地址是Q0.0

Count:“计数”8,表示要读取或写入的位数,本例是写到Q0.0到Q0.7的八个点。

Data Ptr:表示主站读取或写入第一个CPU存储器位置。必须指针用&符号。本例是主站的&IB0。

Done:完成位

Error:错误代码

该案例表示:

主站执行写指令RW=1,主站的IB0(I0.0到I0.7)控制从站的Q0.0到Q0.7八个位。

MBUS_INIT: 从站定义参数

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(3)

1、EN:使能,要用沿信号,只接通一次。

2、Mode:模式0=禁止modbus通信, 1=允许modbus通信

3、Addr:从站地址1(1-247均可)(要与主站读写指令里地址一致

4、Baud:波特率。与主站一致

5、Parity:奇偶校验。与主站一致

6、Delay:通信延时,0=立即应答

7、MaxIQ:可以被主站读取的从站的I/Q点的范围

8、MaxAI:可以被主站读取的从站的模拟量输入范围

9、MaxHold:可以被主站读取的从站的V存储区的个数

10、Holdstar:从站V存储区的首地址,本例是VB0

11、Done:完成位

12、Error:错误代码

MBUS_SLAVE:从站应答指令

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(4)

EN:使能位,用常通1信号

Done:完成位

Error:错误代码

案例2

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(5)

主站程序表明:从站地址是1,RW=1表明给从站写数据

40001---表明要给从站的第一个V存储器写数据,本例是给从站VW0,可以从从站程序看出来

Count:1表示写主站的一个字,本例是IW0

主站起始指针是&IB0,第一个字是IW0

从站程序

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(6)

从站程序可看出:Addr—从站地址是1

&VB0---表明从站存储器的起始地址是VW0

以上案例表示是---主站IW0控制从站VW0。可利用的有16个位

I0.0---控制V0.0

I0.1---控制V0.1 ------- 直到I1.7---控制V1.7

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(7)

案例 如上图

表明读10001对应的从站1 IB0到主站的VB0,8个位。

即从站IB0控制主站VB0

西门子modbus通信库地址怎么分配(举例看懂西门子MODBUS通信程序)(8)

如上图 40001 表明主站的一个字VW2(VB2VB3)写给从站1的第一个字V区,即主站VW2控制从站1的第一个V区。

从VB2.0开始到VB3.7 16个位控制40001对应的从站第一个V区,比如VW10(VB10.0到VB11.7)

,