S7-200 Smart PLC Modbus通信的常见问题

1.S7-200 SMART 是否支持 Modbus ASCII 通信模式?

STEP 7-Micro/WIN SMART 软件未提供Modbus ASCII 通信模式指令库。S7-200 SMART CPU若用于Modbus ASCII 通信时,则需要用户使用自由口通信模式进行编程。

2.S7-200 SMART CPU 集成的RS485 端口(端口 0 )以及SB CM01 信号板(端口 1 )两个通信端口能否同时作为 Modbus RTU 主站或者同时作为 Modbus RTU从站?

S7-200 SMART V2.2版本支持两个通信端口同时做MODBUS RTU主站,不支持同时做MODBUS RTU从站。

3.S7-200 SMART CPU作为 Modbus RTU 主站如何访问 Modbus 地址范围大于49999 的保持寄存器?

通常 Modbus 协议的保持寄存器范围在 40001 到 49999 之间,这个范围对于多数应用来说已经足够了,但有些 Modbus 从站保持寄存器区的地址会超出该范围。Modbus RTU 主站协议库支持保持寄存器地址范围为(40001 到 49999) 或者(400001 到 465536)。如果 Modbus 从站地址范围为 400001 – 465536,只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。

4.S7-200 SMART CPU作为 Modbus RTU 主站,多次调用 MBUS_MSG 指令时,为什么该指令会出现 6# 错误代码?

a.同一时间只能有一条 MBUS_MSG 指令处于激活状态,如果激活多条 MBUS_MSG 指令,将执行第一条 MBUS_MSG 指令,所有后续 MBUS_MSG 指令将中止执行并出现 6# 错误代码。多条 MBUS_MSG 指令的执行需要采用轮询方式 。

b.Modbus库存储区中分配的建议地址区与编程中已使用的V存储区有重叠。

5.S7-200 SMART CPU作为 Modbus RTU 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。如何减少主站的重发次数,以提高通信效率?

MBUS_MSG 指令被激活时将发送 Modbus 请求报文帧,如果在Timeout 参数定义的时间间隔内主站未接收到从站应答,Modbus RTU 主站协议库默认的情况下还会再发送 2 次 Modbus 请求报文帧;在最后一次请求报文帧发送后,经过 Timeout 参数定义的时间间隔后还未收到应答时, MBUS_MSG 指令的 Done 完成位才被设置为 1 。将 mModbusRetries 变量的数值由 2 改为 0 ,即可取消 Modbus 请求报文帧的重试次数。mModbusRetries 变量的绝对地址可通过查询Modbus RTU 主站协议库的符号表获取,如图 1. Modbus RTU 主站指令符号表所示。

Modbus RTU 主站指令符号表

6.为什么有的 HMI 软件使用 Modbus RTU 协议可以读取作为 Modbus RTU 从站 S7-200 SMART CPU 的数据,但是不能写入数据?

可能此软件使用Modbus功能15写多个开关量输出功能到S7-200 SMART CPU时,没有遵守从站协议中“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。定义HMI 软件严格执行此规律可以避免发生写入错误的情况

7.为什么有的 HMI 软件使用 Modbus RTU 协议读取作为 Modbus RTU 从站 S7-200 SMART CPU 的浮点型数据时会出现错误?

可能此HMI软件使用Modbus RTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
Modbus RTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。HMI软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。如果HMI软件一方无法处理这种浮点数,则可在S7-200 SMART CPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。

8.S7-200 SMART紧凑型CPU作为 Modbus RTU 从站时,已经将 MBUS_INIT 指令的Mode 输入参数设置为“1”了,但是 MBUS_SLAVE 指令还是会出现 10 号错误(从站功能未启用)?

S7-200 SMART紧凑型CPU 不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT 指令的MaxAI 输入参数设置不为“0”,则MBUS_SLAVE 指令会出现 10 号错误。

9.S7-200 SMART 使用S7-200的Modbus slave库无法初始化成功?

如下图所示,使用STEP 7-Micro/WIN SMART 直接打开S7-200 MODBUS 通信程序并做相关设置后测试,

首先,图中的MBUS_INIT的相关参数针对200smart来说,设置均正常,但是从测试结果可以看出,初始化MBUS_INIT报错1:存储器范围出错,而且MBUS_SLAVE报错10:从站功能未启用

Modbus Slave 报错

这是因为200的库程序里针对过程映像区MaxIQ(0-128),AaxAI(0-32)做的报警判断,如下图Modbus Slave程序所示,S7-200的过程映像区最大0-31,所以超过31会报错,【但S7-200smart的AI过程映像区最大255】

10.S7-200 SMART CPU作为 Modbus RTU 从站时,是否支持 Modbus RTU 主站发送的广播命令?

S7-200 SMART CPU 作为 Modbus RTU 从站时,不支持广播命令。

分析PLC控制系统的故障以及处理方法

为了便于PLC控制系统故障的及时解决,首先要区分故障是全局还是局部的,如上位机显示多处控制元件工作不正常,提示很多报警信息,那么可以初步判定为全局故障,这就需要检查CPU模块、存储器模块、通信模块及电源等公共部分。如果没有只有很少的报警信息,那么可能是局部性故障可从以下几方面进行分析。
1.根据上位机的报警信息查找故障
PLC控制系统都具有丰富的自诊断功能,当控制系统发生故障时立即给出报警信息,可以迅速、准确地查明原因并确定故障部位,具有事半功倍的效果,是维修人员排除故障的基本手段和方法。
2.根据动作顺序诊断故障
对于自动控制,其动作都是按照一定的顺序来完成的,通过观察控制系统的运动过程,比较故障和正常时的情况,即可发现疑点,诊断出故障原因。如某水泵需要前后阀门都要打开才能开启,如果管路不通水泵是不能启动的。
3.根据PLC输入输出口状态诊断故障
在PLC控制系统中,输入输出信号的传递是通过PLC的I/O模块实现的,因此一些故障会在PLC的1/0接口通道上反映出来,这个特点为故障诊断提供了方便。如果不是PLC系统本身的硬件故障,可不必查看程序和有关电路图,通过查询PLC的I/O接口状态,即可找出故障原因。因此要熟悉控制对象的PLC的I/O通常状态和故障状态。
4.通过PLC程序诊断故障
PLC控制系统出现的绝大部分故障都是通过PLC程序检查出来的。有些故障可在屏幕上直接显示出报警原因;有些虽然在屏幕上有报警信息,但并没有直接反映出报警的原因;还有些故障不产生报警信息,只是有些动作不执行。遇到后两种情况,跟踪PLC程序的运行是确诊故障的有效方法。对于简单故障可根据程序通过PLC的状态显示信息,监视相关输人、输出及标志位的状态,跟踪程序的运行,而复杂的故障必须使用编程器来跟踪程序的运行。如某水泵不工作,检查发现对应的PLC输出端口为0,于是通过查看程序发现热水泵还受到水温的控制,水温不够PLC就没有输出,把水温升高后故障排除。
当然,上述方法只是给出了故障解决的切入点,产生故障的原因很多,所以单纯依靠某种方法是不能实现故障检测的,需要多种方法结合,配合电路、机械等部分综合分析。

详细解释PLC控制系统

        简单介绍一下PLC,了解 PLC 的产生和发展电气电路PLC――可编程序控制器,它的应用是建立在电气控制系统上的,也就是说是建立在继电器控制回路的基础上的。

       这是一个电机启动/停止的控制回路:电路由选择开关SW建立了手动操作和自动启动两种启动方式,接触器KM是电机电源输送的执行器件;当操作方式中的手动启动或者是自动启动条件满足时,KM线圈导通将电机供电回路接通,使其运转。其中手动启动/停止电机操作是通过直接用启动按钮SB2和停止按钮SB1控制电机运行的;那么自动时,根据限位(在这里是HL高液位启动电机,LL低液位停止电机)延时后对电机控制操作。对于这样一个简单的电气控制回路,如果再增加一些功能,比如在关键的应用场所,要保证电机的长期运行,考虑到泵的可能出现故障和运行维护保养等状况,要停止电机运行,那么就要增加一台泵来备用。在这种情况下的运行泵的工况就使得电气控制回路比较复杂了。关联的接线,电器元件,等等因此增加很多。

       如果是在一个控制系统中有这样若干个不同方式的电机控制回路的话,不但电气回路复杂,占用电柜体积,电控箱数量也相当可观;更重要的是,要进行修改测试和改进设计以及安装就显得非常的麻烦。那么在60年代,产生了新型的,运用微电子和计算机技术,可以实现复杂的电气控制回路的装置,其简单易懂,操作方便,可靠性高,通用灵活,体积小,使用寿命长等一系列优点,被称为可编程序控制器――PLC。PLC不仅在功能上大大提升和完善了控制回路,而且在与设备的接口上连接简便,控制装置体积成倍缩小。

        可编程控制器是一个数字式的电子装置,是一台计算机,专为工业环境应用而设计制造的计算机,不是单纯的电气电路了。但可编程控制器产品并不针对某一具体工业应用,在实际应用时,其硬件需根据实际需要进行选用配置,其软件需根据控制要求进行设计编制。它的编程软件通用界面――梯形图,非常人性化,元器件符号就象电气部件表示一样,编程就象连线一样将电气电路连到控制器中,很容易理解和掌握,以及制作。那么它是如何替代继电器控制装置的呢?

        上述的电气控制回路大致可以分成这样几个部分:输入设备:按钮,选择开关,传感器触点信号;输出设备(执行器件):接触器,电磁阀,指示灯;逻辑控制电路,不直接与外部连接的电气电路;还有就是控制电源。那么在这个电路里:SW,SB1,SB2;FR,HL,LL是输入元件;接触器KM是执行元件;接触器的辅助触点,继电器触点,以及时间继电器中间继电器,连成了控制逻辑电路。如果要改变控制功能:对于继电器控制回路来说,要改变控制电路和实际接线;而用PLC控制,外部接线不变,改变用户程序就可以了;特别是复杂的控制逻辑,继电器控制实现是很困难的。当把这些输入元件以及执行元件用电气方式连接到PLC里,并向PLC提供控制电源,再通过编程软件编制出相关的控制逻辑,PLC就同样实现上述的控制功能。在这里编制的程序里我们看到用编程软件所作的程序,与电气连线所形成的控制功能很相似。

        比如[自动]信号是外部输入的选择开关SW的状态信号,它通过输入端子电气连接到PLC里,PLC硬件输入回路就会把这个信号的状态(在输入回路中),编译到PLC 中,当操作者将选择开关置于[手动],在PLC里表现的状态被编译成[自动]的非,或者说是自动方式断开形式;同样当执行条件满足时,程序能流流通,就象电气线路中电气回路接通一样,[电机]就接通,与此输出端点连接的接触器线圈导通,使触点闭合,电机带电运行;接通表示=1,断开表示=0。

        通过这样一些规则的程序,加上PLC内部的各种功能,很容易的就能实现电气的各种控制需求。PLC梯形图程序虽然是从继电器控制线路图发展而来的,但与其又有一些本质的区别。为适应不同需求,程序有几种表示方式,常用的是梯形图方式,适合用继电器线路熟悉的人员使用;指令语句表,用助记符方来表达PLC的各种控制功能,类似计算机的汇编语言,但通俗易懂。

         由于电气控制的逻辑是在PLC里用特殊的语言编制的,程序制作过程中可以随时增加或修改逻辑,可以用计算机的一些功能,作出复杂的控制系统。正是这个特点,PLC才得到了广泛的应用;相比之下,电气控制在修改和复杂逻辑上是得力不从心的,甚至是达不到的。