通化西门子PLC模块代理商
冗余设计其实是一个很宽泛的技术概念,而不是大家理解中的技术方法,冗余原始概念是重复配置系统的一些部件,当系统发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间。冗余按类型分为主动和被动形式,所谓主动和被动主要是主从切换的能动性上来分析,主动冗余是可以主动切换,就是可以随时自行切换;被动冗余是指当正在运行的组件坏掉或者不正常的时候才会切换到备用组件,其中也包括用户手动或者用户程序切换方式,按照功能来分又分成Hotstandby、Warm standby 和 Coldstandby,整理以后见下图:
1、 clod standby
冷备用,其实说白了就是backup,他是通过备份所有正常运行的组件放在一旁或者仓库里,等运行的组件坏了以后更换新的组件来完成系统的正常运行,这个冗余时间和更换时间息息相关。这种冷备用方式很少去关注响应时间,并且需要运维人员干预操作。举个例子,一套PLC运行系统,在做备件时做了完全的配置备件,当PLC在运行时因为夜晚雷电发现有一块AI卡件烧毁了,运维人员马上把系统断电,更换卡件,在上电运行,这就是一个完整的coldstandby的过程,至于其中耽误的时间,只能视运维人员的对系统的熟练程度而定并且必须被动接受。
2、 warm standby
温备用,是两套完全一样的配置组件,一个正常运行被视为主,另一个带机并不运行备用被视为从,每隔一段时间,主从的内容相互交换一次,当运行组件出现故障,备用组件才会运行承担工作。举个例子,西门子的300软冗余系统,两台微处理器的冗余方式就是温备,主处理器控制系统的输入和输出(I/ O),而备用处理器上电和主处理器停止控制过程中的等待时间。当发生这种情况,备用处理器承担的I / O控制,并采取指定的主处理器,处理器允许脱机成为次要处理器,并可以在不牺牲过程控制维护。
在正常操作中,主处理器提供定期更新的备用处理器。这些更新通常发生在每个程序扫描结束,并可能在任何时间只涉及了部分数据。当转换发生时,备用处理器可以工作过的数据不完整,因为它可能会采取一些备用处理器程序扫描追上来这里的主要是前转换。这可能有助于在转换过程中颠簸。
从硬件的角度来看,温,热冗余系统几乎相同,很容易混淆。
3、 hot standby
热备用,是两套完全一样的组件,全部都是上电并运行的状态,两个组件进行数据采集、数据处理和计算,只是主组件担任输出控制任务,两个组件实时交互,当主从切换的时候必须完成无扰动切换。热备组件系统是随时切换检测组件状态并报告。
热备系统在一瞬间也不能让系统godown,当主从切换的时候,需要完成系统通讯消息和数据更新以及堆栈的同步,从而苛刻实现程序执行的速度和堆栈段内容都是一致的,为了确保热备系统的操作正确性,全部数据需要实时主从交互,其交互方法有两种,种就是常规的扫描和传输方法,这种技术早期被施耐德的PLC广泛使用,先是在程序扫描结束后传输所改变的内容,程序扫描时间是程序执行和传输的时间组合,这也就是PLC的执行周期为什么有时间周期定义之说了,这样就不是每次把PLC内全部程序进行交互,减少同步任务复合,但当从plc内没有程序的时候,主plc会把全部内容同步过去,但这个过程只是上电或者运行时候做一次比较。这种热备方式是一种经典和准确的热备方法,并且这种方法延续至今。
第二种方法就是异步传输方法,在异步传输,主系统中在其电路有两个独立的微处理器。个微处理器执行程序。在执行结束,所有数据被传递给第二个微处理器。这第二个微处理器处理所有的传输任务,而个微处理器执行下一个程序扫描。一个微处理器是执行,而另一种是传输到备用处理器的数据。 由于这种从主处理器辅助处理器的数据传输是异步的程序扫描,它随时的数据传输,而不会影响程序执行和系统负荷。这种热备异步传输的方式是AB的Contrologix一项技术,他的冗余配置中主从系统各有三个CPU,个就是执行程序的CPU,第二个就是起到数据总线的背板CPU,第三个就是同步模块RM的CPU,他的任务被分配在多个CPU当中。
后还是要说一下,其实大家理解中的冗余技术其实就是热备的方法,因为传统DCS进入大家视野比较早,DCS厂家把冗余概念做到了,它把两套物理硬件在逻辑上封装成为一个独立体,造成很多技术人员认为只有物理上两个组件但在逻辑上是一个组件被称为冗余,逻辑上是两个组件的叫做热备。
老版的STEP7有一个PID参数赋值工具,其中的监控曲线对话框可显示PID的被控量、给定值和PID输出值的曲线,监控曲线画面很小。
S7-300/400和S7-1200都可以使用STEP 7V11的PID调试工具。双击项目树的文件夹“\工艺对象\PID_DI”中的“调试”,打开PID调试窗口(见下图),可以用趋势视图监视PID控制器的设定值、过程值和调节变量的曲线。调试窗口将老版STEP7的PID参数赋值工具中的监控曲线对话框、参数赋值对话框和曲线记录参数设置对话框的功能集成到一起。趋势图有Strip(连续显示)、Scope(区域跳跃显示)、Sweep(滚动显示)和Static(静态区域显示)4种显示模式。可以用多种方式方便地移动坐标轴与改变坐标轴的比例,可以修改和下载PID参数和设定值,有手动模式。下图是我用S7-300/400的仿真软件和PID调试工具模拟调试闭环控制系统得到的曲线。
请问127和127.0 转换成 IEEE浮点数结果为什么不一样啊?
127.0转换成IEEE浮点数是 01000010111111100000000000000000即(42FE0000)H
手册上是 127 转换成了00050000,请问这个 00050000是如何求得的啊,难道这个数不是IEEE浮点数啊?
答:“127.0转换成IEEE浮点数是 01000010111111100000000000000000即(42FE0000)H”
这个是正确的
“手册上是 127 转换成了00050000,请问这个 00050000是如何求得的啊”
这个不是符合IEEE754标准的浮点数
浮点数有很多种 ,对于所有厂家的PLC来说,浮点数转换遵从同样的标准,即IEEE754。
楼主提到的127.0转为寄存器表示时确实是(42FE0000)H。
而提到的00050000理论上转换为IEEE浮点数后,应该是一个DEN的数据。具体计算方法可以查看插图。
西门子S7-200的自由口通信需要通过编程设置串口的工作模式,安排发送和接受指令的触发顺序,还要设定接收的起始和结束条件。对于刚刚开始使用s7-200的工程师来说,的确有很多细微处易犯错误。一般碰到客户抱怨通信不上的问题,就要逐一帮客户确认编程配置是否正确。麻烦,逐条查下去,总能查到错误所在并解决问题。有一次客户遇到的问题颇出人意料,还真耗费了一些时间。
客户反应在编写了自由口通信程序之后,PLC可以发送数据给通信伙伴,却收不到任何伙伴方发出的数据。能发送数据给对方,说明通信端口设置没有问题。极有可能是端口被其他通信指令占用导致无法进入接收状态。比如说用常开点调用XMT,或者没有对接收的故障状态进行判断并终止接收,从而导致后续的XMT和RCV都无法被正确执行。客户表示他的程序并不存在这种情况。为了测试问题所在,客户下载了一个仅包含条件触发RCV的程序下去,还是接收不到数据。监控程序RCV指令已被正常执行。
那么是不是接收的起始条件设置不当?客户使用的是起始字符,这并无不妥。并且改成空闲线检测之后,问题依然存在。难道是对方发送的信号有问题?用串口调试软件来测试,是可以接收到的。眼见这几个常见错误都没能cover住这个问题,我只好从头一步步地跟客户确认。还是没能发现任何破绽。郁闷之下,只好让客户把程序发过来看看。
次检查程序的时候还真没注意到问题出在哪里。等到看出来了才觉得啼笑皆非:
不知道大家看出来没有?客户在设定完空闲线时间SMW90和消息定时器溢出值SMW92后,惯性地将接受地大字符数SMB94也写成了传送字SMW94。而西门子PLC的高低字节是逆序的,也就是说SMB94为高有效字节,SMB95为低有效字节。见手册中的如下说明:
结果就是大字符数100被传给了SMB95,SMB95是神马呢?神马也不是,总之与接收条件无关。而真正大字符数存储字节SMB94被赋值为0。大字符数都为0了,那当然是接收不到任何数据了。小马虎一下就耽误了这许多时间,各位看官引以为戒吧!状态字的第8位为二进制结果位BR。
在梯形图中,用方框表示功能(FC)、功能块(FB)和某些指令。
图1中的FC1有3个双整数输入参数和1个双整数输出参数。输入变量IN_VAL乘以系数Par1,除以系数Par2后,得到输出参数OUT_VAL。SAVE指令将RLO保存到BR位中。
图1
图2是OB1调用FC1的程序。I0.0的常开触点接通时,FC1的EN(Enable,使能输入)输入为1,才能执行FC1。如果FC1的EN端有能流流入,执行时无错误(除数非零),使能输出ENO(Enable Output)端有能流流出。EN和ENO均为BOOL型。
图2
如果FC1执行出错(除数Party2为零,见图2的右图),它的ENO端没有能流流出。ENO可以作为下一个方框的EN输入,即几个方框可以串联。只有前一个方框被正确执行,与它连接的后面的程序才能被执行,这种连接方式具有连锁的功能。
状态字中的二进制结果位BR对应于梯形图中方框指令的ENO。BR位为 1,ENO端有能流流出,ENO端没有能流流出。
图1中右边的SAVE指令对BR位的处理是至关重要的,如果没有它,FC1的ENO不能反映FC1的执行是否出错。
下面是删除图1中的SAVE指令后,对应的语句表程序。
A(
L #IN_VAL
L #Par1
*D
T #MID_VAL
AN OV
SAVE
CLR
A BR
)
JNB _001
L #MID_VAL
L #Par2
/D
T #OUT_VAL
_001: NOP 0
在后两条指令之间添加下面的3条指令,FC1的ENO就能反映FC1的执行是否出错。
AN OV
SAVE
CLR
执行指令“AN OV”后,如果除法指令没有出错(溢出位OV为0),RLO为1;如果除法指令出错(溢出位为1),RLO为0。SAVE指令将RLO送给BR位,CLR指令将RLO清零。
除了SAVE指令,还有两条指令影响BR位。
当RLO=1时,JCB指令中断程序的顺序执行,并跳转到跳转目的地。如果 RLO = 0, 则不跳转。
当RLO=0时,JNB指令中断程序的顺序执行,并跳转到跳转目的地。如果 RLO = 1, 则不跳转。
经常有客户咨询软冗余的问题,其中有很大一部分问题是冗余链接建立不了,即两个CPU之间不能同步冗余数据。这种情况下,就要检查相关功能块的参数设置,其中很容易出现的一个问题就是调用冗余通信块 FB101“SWR_ZYK” 时生成的背景数据块长度不对。这种问题的隐蔽性很强,一旦出现非常不容易排查。
下面我们就来分析一下出现这种问题的原因,进而避免问题的产生。这里我们以两个S7-400 CPU之间建立ISO 链接为例进行说明,这种情况下需要用到的功能块如图1所示。
图1
我们在 OB1 中调用功能块 FB101, 并为其生成背景数据块 DB5,这时我们来看看背景数据块 DB5 的长度。如图2所示,可见实际生成的 DB5 只有 100 个字节,正常的 DB5 长度应该为 358 个字节,DB5长度错误。
图2
如果这时我们下载程序到 CPU 中,则 CPU SF 亮红灯,CPU 诊断缓冲区报写区域长度错误,如图3所示。
图3
如果实际中遇到了这种问题,可以先删除已经生成的错误的 DB5,在程序中加载好FB104 “SWR_AG_COM” 后再重新为 FB101 生成一个新的背景数据块 DB5。这时我们再查看 DB5 的块长度为 358 个字节,如图4所示,问题解决。
图4
OK,回过头来分析一下问题的根源。通过上面的解决办法我们不难发现,调用 FB101 并为其生成背景数据块之前必须先加载 FB104 这个功能块到程序中。那么 FB101 与 FB104 之间是什么关系呢?通过查看FB101 的块属性,如图5所示,可以看到在 FB101 中调用了 FB104,在调用 FB101 之前需要先将FB104 加载到程序。
图5
类似 FB104 这种在其他块中被间接调用的块非常容易被忽视,在实际的应用过程中要特别留意一下。顺便说一下类似 FB104 这种块在程序中的加载方法:
1、可以先在程序中调用一次 FB104,再将 FB104 删除。
2、直接从软冗余库中将 FB104 拷贝到当前程序中。