上篇文章中我们学习了西门子S7-200 SMART Modbus RTU通信,并编写了从站程序,本篇我们继续学习主站程序的编写。首先,我们来编写Modbus主站初始化程序,在Modbus主站项目中完成硬件组态和符号定义后,在指令树中展开指令树库文件夹下的Modbus RTU Master文件夹,拖放Modbus主站初始化指令到主程序中。 ![]() 拖放Modbus主站初始化指令 与从站类似,分配库存储器,使能端插入一个常开触点,输入始终接通位地址SM0.0,模式端也插入一个常开触点输入地址SM0.0,启用Modbus协议。波特率设置为9600,奇偶校验设置为偶校验,端口设置为使用CPU集成的RS485端口,超时参数设置为1000毫秒,输入初始化完成标志位地址和错误代码输出地址。 ![]() 设置Modbus主站初始化指令参数 编写实现Modbus主站读写Modbus从站的通信程序。要启动对Modbus从站的读写请求和处理响应需要使用Modbus通信指令,请注意同一时刻只能有一条Modbus通信指令处于激活状态,使用多条该指令时需要编写程序实现轮询。如下图所示,程序段2实现的功能是首次扫描时置位使用Modbus通信标志位,复位其它Modbus通信指令使能位。 ![]() 程序段2 程序段3实现的功能是,当启用或者第一次调用Modbus通信指令时,从地址为3的Modbus从站中读取地址10001开始的16个数据,也就是读取DI通道从I0.0开始的十六位的值,读取到的数据存放到主站VB0开始的存储区中。 ![]() 程序段3 程序段4实现的功能是,第一次调用完成后复位启用标志位,复位第一次调用使能位,复位第二次调用完成位,置位第二次调用使能位。 ![]() 程序段4 程序段5实现的功能是,第二次调用时向地址为3的Modbus从站写入5个保持寄存器数据,从CPU的VB10到VB19获取5个字数据,然后写入到Modbus从站中的地址40001到40005。 ![]() 程序段5 程序段6实现的功能是,第二次调用完成后复位第二次调用使能位,复位第一次调用完成位,置位第一次调用使能位。这样就通过轮询来实现了读Modbus从站输入位和写Modbus从站保持寄存器的功能,单击保存按钮保存项目,在项目树中展开程序块下的库文件夹,可以看到Modbus主站指令使用了三个子程序和一个中断程序。 ![]() 程序段6 将程序编译下载到PLC,设置CPU为RUN工作模式,这样Modbus主站的编程就完成了。通过两篇文章的内容我们分别学习了西门子S7-200 SMART Modbus RTU通信的从站程序编写和主站程序编写,在以后的文章中我们将继续学习西门子S7-200 SMART的相关内容,欢迎持续关注! |
|