西门子PLC如何modbus?你知道怎么用吗?详细教程

2018年12月30日14:33:34 发表评论 81 阅读

(1)Modbus通讯

S7-200的Modbus通讯:

S7-200只支持Modbus RTU协议,不支持Modbus ASCII协议;

Modbus是一种单主站的主/从通信模式。一条Modbus网络上同时只能有一台主站,从站可以有若干个(如下图所示)。从站的地址范围为1-247;

一个Modbus通讯的传输字符应包括一个起始位,8个数据位,1个或0个校验位(奇偶校验或无校验可选择),以及一个停止位。

在S7-200 CPU通信口上实现的是RS485半双工通信,使用的是S7-200的自由口功能。

上图是一个典型的主站和从站的网络结构,对于Modbus主站而言可以对从站进行读或者写的操作,其中它所支持的功能码(FC,Function Code)包括主站左侧表格中所述功能,例如功能码为'01'时表示读取单个/多个线圈(DO)状态或功能码为'04'时表示读取单个/多个输入寄存器(AI)状态。

而对于从站,我们只需要把Modbus的标准地址和从站的地址对应关系建立好就可以了,S7-200的从站与Modbus标准的对应关系如从站右侧表格所示。

表中左侧是Modbus标准地址码,其中1-128对应于S7-200的Q0.0-Q15.7,10001-10128对应于S7-200的I0.0-I15.7,30001-30032对应于AIW0-AIW62,40001-4xxx对应的是S7-200的保持寄存器(V区),它的范围是T-T+2*(xxxx-1),T表示的是V区的起始地址,这一点由Modbus从站的指令所决定的。

Modbus的主站指令叫做MBUS_MSG,通过这条指令可以将Modbus的标准报文发给从站,例如在上图例子当中从站的第一个字节是03,表示的是从站的地址,FC功能码为03,表示的是读取单个/多个保存寄存器,Modbus标准地址是40001,长度是10。随着功能码的不同,报文的格式会发生相应的变化,具体的报文格式需要去参阅Modbus的通讯手册。

从站的指令时MBUS _SLAVE,在接到主站发给它的报文后会根据报文的需求返回报文,比如在上图例子中返回的格式是第一个字节为从站的地址,第二个为功能码,第三个是数据返回给主站,这样就完成了一次Modbus通讯的请求与应答的过程。

(2)Modbus库文件的安装和调用

如果想要应用Modbus指令库,那么首先需要到因特网上或者向西门子的客服人员申请名称为'Toolbox_V32-STEP 7-Micro WIN' 的指令库,将它解压并且安装到Micro WIN当中就可以使用了,安装后会在Micro WIN的库文件当中出现上图标记的三个库,其中Port0和Port1都可以做Modbus Master,而Slave只有Port0口可以做。

(3)Modbus库文件的使用

使用方法很简单,打开Modbus主站指令库会有相应的指令块出现,直接把指令块拖拽到程序当中进行调用就可以了。

在调用Modbus库指令的时候,需要注意一定记得为Modbus库文件分配库存储区。具体的方法是右键单击库,然后选择库存储区,在弹出来的对话框当中可以选择建议地址,自动分配一个程序里面不会用到的地址区间,也可以人为地手动填写起始地址,这个区间在程序当中不可以和其他的数据区相冲突,否则Modbus功能将不正常。

所谓的库存储区其实就是Modbus指令库能够正常工作所必须的一部分背景数据,只要给它分配好区间并保证不与程序当中其他的地址相冲突就可以了。

(4)Modbus从站指令

从站指令一共有两条,第一条是从站的初始化指令(MBUS_INIT),另一条是MBUS_SLAVE从站指令,在Modbus从站的初始化指令当中涉及哪些内容呢?

首先,第一个引脚Mode表示等于1的时候是启动Modbus,等于0的时候是关闭Modbus,Addr表示的是这个从站的从站地址,Baud表示波特率,Parity是奇偶校验,0是无校验,1是奇校验,2是偶校验,Delay是附加字符之间的延迟,MaxIQ表示的是最大I/Q地址(默认128),MaxAI表示的是最大AI长度(默认32),MaxHold表示的是最大的V存储区(VW),最关键的是HoldStart,表示的是V区起始地址(对应40001),在之前已经提到过S7-200作为从站的时候,它的V区地址对应于Modbus标准地址的起始地址是可更改的,那么就在这里进行设定,在本例中如果HoldStart写的是VB0,那么40001对应的地址就是VW0,40002对应的地址是VW2,40003对应的地址是VW4,以此类推,每一个标准的Modbus地址码对应的是一个Word,以字为单位,同样如果这里设的是VB100,那么40001对应的就是VW100,40002对应的是VW102,以此类推。

这一条初始化指令只需要调用一次就可以了,所以在上图中用的是SM0.1在上电的时候执行一次就可以了。

MBUS_SLAVE这个功能块必须要用前面的条件必须是一直为1的,上图中用SM0.0。

weinxin
plc入门知识问答
每一个PLC工程师都应该关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: