17838383235
新闻中心
6SL3210-5BE21-5CV0现货西门子代理
发布时间:2024-05-23        浏览次数:7        返回列表

6SL3210-5BE21-5CV0现货西门子代理

6SL3210-5BE21-5CV0现货西门子代理

6SL3210-5BE21-5CV0现货西门子代理


【续】西门子S7-200 PLC modbus通讯控制变频器(二)




(5)Modbus主站指令


图片


Modbus主站指令当中的个块叫做MBUS_CTRL,MBUS_CTRL有哪些内容呢?

我们来看一下引脚定义的说明:首先Mode写1的时候是选择Modbus,写0的时候是选择PPI;Baud表示波特率;Parity是奇偶校验,0是无校验,1是奇校验,2是偶校验,这与从站的设置相类似;

Timeout表示的是主站等待从站响应的时间(ms);Done位是初始化完成;Error位表示的是故障代码。其中值得一提的是Timeout这个时间,主站等待从站响应的时间指的是什么呢?让我们来看一下主站和从站之间通讯的过程:

图片


首先,主站会发一帧读写请求给从站,在主站的读写请求发出后,从站应当在Timeout指定的时间内返回应答;


如果在此时间内从站没有应答,则主站发第2次读写请求,第2次还不行发第3次读写请求,如果连续3次在此时间内从站没有应答,则主站认定从站无相应,放弃该从站并报错。


图片


下面来看主站的读写命令(MBUS_MSG),看一下引脚说明:首先First指的是读写请求触发(沿触发),每当First这一端来了一个沿,Modbus指令便会做出一次读或者写请求,RW标示的是这一次的命令是读还是写,0表示读,1表示写;


Addr表示的是从站数据地址(Modbus标准地址格式),0开头、1开头、3开头和4开头的;Count指的是通讯数据的长度,大120个字,单位可能是bit或word;DataPtr指的是参与通讯的本方数据区,如果是读指令标示的是读回来的指令放在本地的哪一块数据区,如果是写命令表示的是把本地的哪一块数据发给对方;Done位和Error位分别是功能完成和故障代码。

图片


其中值得一提的是Count,刚才讲过它的单位可能是bit或word,究竟是bit或word取决于当时所用的Modbus标准的地址码是用的哪一块,如果对于1-128而言这是一个DO的输出,对于1开头的是一个DI的输入点,这个时候Count的单位指的是bit,而对于3开头和4开头的,那么是AI和保存寄存器,它们的单位是word。


需要注意的是当Count的单位是Bit时,一定Count的数值设置为8的整数倍,否则会出错,这是因为一个基本传输的字符是包含8个数据位的,没有办法只传送一个或几个bit。


(6)Modbus主从站轮询

图片


当存在Modbus多主站轮询的时候,在程序当中我们应当如何处理呢?


上图中展示了这种方法。例如个MBUS_MSG指令我们可以利用它的Done位(本例中为M2.1),把它作为第二条MBUS_MSG指令的First前面的激活端,也就是说个MBUS_MSG完成的时候才会去激活下一条MBUS_MSG指令。


那么同样,第二条指令完成时我们把它作为第三条MBUS_MSG指令的激活条件,在后又把第三条指令的完成位还给条网络,这样的话就构成了一个循环的轮询方式。

(7)Modbus FAQ


问1:S7-200是否支持Modbus ASCII模式?

答:S7-200可以支持上述模式,但是没有现成的指令库,需要用户自己利用自由口的方式编程。

问2:项目编译后为何出现很多错误?


答:使用指令库时,若编译后出现很多错误,一般是因为未指定库指令数据存储区。

问3:Modbus从站的网络地址与S7-200的CPU网络地址有何关系?


答:没有关系。支持网络通信的通信协议必须有其自己的网络寻址规定。Modbus从站的地址只是它在Modbus网络上的地址,而通常所说的S7-200 CPU地址是CPU在西门子的PPI网络上的站地址。


问4:MBUS_MSG指令中代表数据长度的COUNT引脚单位是什么?


答:对于Modbus地址=0xxxx或1xxxx的,引脚单位为Bit;对于Modbus地址=3xxxx或4xxxx的,引脚单位为Word。


问5:如何访问大于9999的保持寄存器地址?


答:Modbus Master协议库支持超过9999的保持寄存器地址。地址范围为。只需在调用MBUS_MSG子程序时给Addr参数赋相应的值即可,如416768。


问6:为何有些HMI软件使用Modbus RTU读取S7-200中的实数会出现错误?

答:不同的厂家关于浮点数格式定义的不同,西门子的PLC遵循的是高位低存的规律,和其他的厂家有可能会不一样,这样读回来的实数或整数的高低字节会发生反转,这个时候可以通过监控、判断,在程序当中把它掉过来就可以了。

问7:MBUS_MSG显示Error 6#?


答:Error 6#表示Modbus正在忙于其它请求。MBUS_MSG指令同时只能允许有一个读写操作处于运行过程,如果在一个读写操作尚未完成时启用另外一个读写请求,就会发生Error 6#。利用Done位可以对规避这一问题。

问8:MBUS_MSG显示Error 3#?


答:Error 3#表示从站无应答。即主站的读写请求发出后,从站没有在Timeout时间内返回报文。多种原因可以引起此故障,包括:


硬件故障(线路,端口等问题)。

错误的从站地址,波特率,奇偶校验。

从站不支持此功能码,或不能被从站识别的从站数据地址。

Timeout时间过短(从站响应较慢),通过延长Timeout可以解决这个问题。




核心提示:西门子PLC代理,西门子变频器代理,西门子伺服电机代,西门子工控机代理,西门子触摸屏代理
刚发布的文章
联系方式
  • 地址:中国(湖南)自由贸易试验区长沙片区开元东路1306号开阳智能制造产业园(一期)4#栋301
  • 手机:17838383235
  • 联系人:徐嘉泉
新闻分类
最新发布
企业新闻
站内搜索