举例看懂西门子MODBUS通信程序
前一篇文章写了西门子PLC与PLC之间MODBUS通信地址与实际PLC地址的对应关系,下边以实际举例来看懂MODBUS通信程序。
Modbus地址有4类:
00001---09999是离散输出地址,对应PLC的Q线圈。
10001---19999是离散输入地址,对应PLC的I输入点。
30001---39999是输入寄存器地址,对应PLC模拟量输入AIW
40001---49999是保持寄存器地址,对应PLC的V存储器
案例一:

主站定义通信参数
为常为“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:主站读写指令

从程序看出:
EN:指令使能位。常通信号1
First:触发该指令。要用沿信号。
Slave:从站站号为1,(1-247均可)
RW:读写选择:0——读,1——写
Addr:为1,表明是0类地址,实际为00001,对应从站起始地址是
Count:“计数”8,表示要读取或写入的位数,本例是写到到的八个点。
DataPtr:表示主站读取或写入第一个CPU存储器位置。必须指针用符号。本例是主站的IB0。
Done:完成位
Error:错误代码
该案例表示:
主站执行写指令RW=1,主站的IB0(到)控制从站的到八个位。
MBUS_INIT:从站定义参数

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:从站应答指令

EN:使能位,用常通1信号
Done:完成位
Error:错误代码
案例2

主站程序表明:从站地址是1,RW=1表明给从站写数据
40001---表明要给从站的第一个V存储器写数据,本例是给从站VW0,可以从从站程序看出来
Count:1表示写主站的一个字,本例是IW0
主站起始指针是IB0,第一个字是IW0
从站程序

从站程序可看出:Addr—从站地址是1
VB0---表明从站存储器的起始地址是VW0
以上案例表示是---主站IW0控制从站VW0。可利用的有16个位
控制
控制直到控制

案例如上图
表明读10001对应的从站1IB0到主站的VB0,8个位。
即从站IB0控制主站VB0

如上图40001表明主站的一个字VW2(VB2VB3)写给从站1的第一个字V区,即主站VW2控制从站1的第一个V区。
从开始到个位控制40001对应的从站第一个V区,比如VW10(到)