1.ENO 的误解
对于初学者来说,容易在EN0的使用上出错误,由于不清楚EN0来龙去脉,经常认为只要调用FC是无条件的,那么EN0也是永远导通的,实则不然。下图中的例子将说明这个问题。程序原目的:进行模拟量转换,并无条件地将MD10的数值传送至MD14。
在图中可以看出,当FC105的输入端PIW256在正常范围内的时候,MOVE指令被执行(ENO=EN),当PIW256超出了上限值后,MOVE指令不再被执行(ENO≠EN)。此故障还是比较隐蔽的,因为大部分情况下,输入可能都处于正常范围。
故障分析:在STEP7的LAD编程手册中有对EN/EN0机制的详细描述,这里不再赘述。仅列出主要部分内容:
ENO的值取决于公式:EN0=EN与非error)
如果程序调用没有错误(error=0),则ENO=EN。
如果程序调用有错误(error=1),则EN0=0。EN/ENO 机制用于:
数学运算指令
传输及转换指令
移位及循环移位指令
块调用
EN/ENO 机制不能用于:
比较指令
计数器
定时器
如果用户要创建自己在 FBD或LAD中调用的块,那么必须确保退出块时,置位 BR位。这并不是一个自动处理过程。不能使用BR作为存储位,因为EN/ENO机制会不断重写BR位。作为代替,可使用一个临时变量(例如#error)来保存发生的所有错误,并用0初始化此变量。在块内部程序中,如果用户某处程序执行为错误状态,则可以将此变量置1。并且在块结尾编写以下程序段:
end:AN error
SAVE
确保在任何情况下都处理本程序段,这表示禁止在块内使用BEC,并禁止跳过本程序段。
2.停止对 FC 调用后引起的故障:
下面的程序非常简单,看似正确,但存在着一定隐患。程序原目的:
在0B1中当M0.0为1的时候,调用FC13在0B1中当M0.0为01的时候,不调用FC13FC13中包含简单逻辑及定时器的使用
故障现象:
假设某个时刻,MO.0,M0.1,M2.0都为1,并且维持数值1的时间超过了10秒,那么Q0.1,M2.1 也都会为 1。
假设此时 M0.0变为0,FC13不再被调用,结果如图:
对于初学者来说,容易忽视的问题为:M0.0变为0后,FC13中的Q,M,会保持原来状态,T,C会继续工作,如果M0.0再次变为1,并且此时M2.0也为1,由于定时器保持着计时到达的状态,M2.1会立刻变为1,这种情况可能会导致某些在FC被调用后必须延时执行的逻辑立刻被执行。在实际应用中,如此逻辑为某个设备启动信号,那么这个设备可能会跳过延时或保护逻辑而马上运行! 对于编程人员如果能够确保上述现象不构成对人身及财产的伤害,则可以不采取措施,否则应当加入限制程序,例如下面的复位语句。
3.FC 中临时变量的使用:
很多初学者容易将FC及FB相混淆,认为FB仅仅是比FC多了一个背景数据块,这种认识是非常危险的。在STEP7的关于FC的描述是这样的:
FC是一个没有存储空间的逻辑块。FC的临时变量存储在本地数据堆中,这些数据在FC执
行完毕后将会丢失。为了永久的保存数据,FC可以使用共享数据块。由于FC没有自己的存储空间,所以必须指定实参给它的参数(这就是为什么FC的输入输出管脚必须填写参数的原因)。FC的临时变量(位于本地数据堆栈中)是无法指定初始值的(由于本地数据堆栈是由系统自动动态使用的)。为了更形象的说明这一点,我们来看下面的例子,此例子对L堆栈在程序调用时的分配进行了详细的讲解:
L堆栈永远以地址“0”开始。在L堆栈中,会为每个FC提供一定地址空间,作为存放每个块所拥有的固有数据或局部数据。当某个块终止时,那么它的空间随之也被重新释放出来。 指针总是指向当前打开块的第一个字节。
由上面的例子可以看出:对于FC20曾经使用过的系统中L堆60-80区间(FC20中地址范围为LB0-LB19)在FC20调用结束后,被提供给FC21使用(FC21中地址范围同样为LB0-LB19)。
对于FC的临时变量认识不清晰,用户在对临时变量的使用当中,也经常会出现一些错误,下面将使用一个例子非常直观地说明上面的问题
程序原目的:
在0B1在程序中调用FC20后立即调用FC21
FC20中将20赋值给临时变量FC20TEMP1,将21赋值给临时变量FC20TEMP2FC21中将FC21 TEMP1,FC21 TEMP2 相加
程序分析:我们发现FC20中的临时变量曾经出现的数值(20,21)被FC21中的临时变量FC21 TEMP1,FC21TEMP2得到了,如果直接使用这两个临时变量进行加法操作,可以得到结果 41。对于编程人员来说,临时变量必须要在所在程序段中赋值,而后使用。用户对此例中的FC21 TEMP1,FC21 TEMP2必须先做清零处理,否则其在使用前即可能拥有数值。
结论:对于FC或FB中的临时变量,不要希望将本次调用的数值可以存储在里面以供下次程序调用使用,因为这些临时变量所使用的L堆栈空间在FC或FB调用结束就释放给系统了,其它后续程序可以任意使用。所以下列用法都是错误的:
将临时变量用于上升/下降沿指令
将临时变量用于自保持逻辑
临时变量未在所在程序段中赋值,直接使用
警告:不要试图利用L堆栈的这种特点进行功能或功能块之间的数据传递。程序逻辑改变,语句执行顺序改变,临时数据区长度定义改变,中断程序都会影响L堆中的数据存储顺序。
.4.FC 输出处理
对于FC的使用,另一个的常见的错误是对输出的错误处理:导致这个错误的原因还是对FC认识的不清楚。再次强调:相比较于FB,FC是一个没有存储空间的逻辑块。如果没有数据被写至FC的 OUT参数,FC将会输出一个随机值!对于FB,因为其可以使用背景数据块来存储 0UT 参数的数值,即使某次调用没有对0UT参数进行写操作,0UT参数依然可以输出上一次的旧值。
下面的程序将说明这一点:
程序原本目的:
在 0B1中调两次FC22,将MWO,MW2作为输入参数,DB1.DBX0.0,DB1.DBX0.1分别作为输出参数赋给 FC22
FC22 检测当输入大于10时,置位输出为1
FC22 检测当输入小于-10时,复位输出为0
FC22的输出的动作死区为-10至10
此程序乍看是没有错误的,但是,如果0B1中调用了两次FC22,而且M位于死区(-10至10)之间时,MW0的数值改变将不仅仅改变DB1.DBX0.0的状态,同时会影响输出 DB1.DBX0.1的数值。
故障分析:在上面的例子,0B1中调用了两次FC22,而且MW2位于死区(-10至10)之间时,其输出在FC22没有被赋值,DB1.DBX0.1正常情况下不应当改变数值。但是本例中,MW0的数值改变将不仅仅改变 DB1.DBX0.0的状态,同时会影响输出DB1.DBX0.1的数值。如下图。
结论:
对于FC的输出变量,必须要在每次执行FC时赋给一个确定的值,否则输出有可能会输出一个随机值。下列用法都是错误的:
将输出变量用于上升/下降沿指令
将输出变量用于自保持逻辑
输出变量未在所在程序段中赋值
警告:不要因为在FC编程中遇到没有对输出赋值,而程序执行正确,就忽略了对FC输出编程的注意事项,否则将承担这个错误有可能带来的风险。
建议:
用IN/OUT变量代替UTPUT量
不论何时调用块,FC中的0UT参数都必须被赋值
广州巨控手机 APP 监控PLC 方案
如何从wincc上采集数据
如何实现手机APP控制PLC
如何采集wincc数据并转成HTTPS协议给第三方软件
wincc异地监控1200PLC的方法
组态王与PLC的无线4G通讯
工控人如何用云组态做手机APP实现PLC远程监控
如何实现PLC短信微信报警
两台PLC之间的4G远程无线通讯
如何远程读取wincc数据
如何快速实现互联网远程监控plc?
S7-400H和WINCC通讯
WinCC 画面中浏览 PDF 文件
WinCC V7.5 SP1VBS全局变量的使用
200smart怎么通过4G网络与wincc通讯
WINCC中比较实际趋势曲线和设定值(理想)曲线的实现方法
西门子1500PLC怎样异地远程监控
经典WinCC移植到WinCC Professional
WinCC 数据使用MQTT传送到云端
NET421/NET431西门子plc与ABplc通讯网关
S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器
如何在 WinCC Runtime Professional 中自动调整画面分辨率适应窗口的大小?
如何实现简单的 WinCC 项目分屏?
s7-1200通过4G网连接中控室
WinCC C/S结构快速入门
如何防止多个WinCC客户机同时操作或更改数值?
精智Comfort屏如何周期性调用脚本
巨控协议转换网关GRM321GRM322GRM323应用场景
精智面板/二代精简PN面板如何使用Modbus TCP/IP 通信组态
如何快速实现OPC DA转为WEBSEVER
200smart数据日志的功能
HMI如何通过PLC变量控制开始和停止数据记录
WinCC flexible配方与PLC的同步
HMI面板与S7-1500 R/H 冗余PLC的通信
WinCC Flexible Smart快速导入 Smart PLC变量
巨控OPC560系列远程智能控制终端
S7_1200配方功能快速入门
PLC远程调试监控模块-巨控GRM530
PN IO设备ET 200SP将支持R1模式
SCL 常见问题
PLC协议转换网关:巨控NET400
如何判断S7通信中断
S7-1500R/H PROFIBUS DP 通信
如何实现PLC短信报警
WinCC Modbus TCP 通信
wincc 远程和PLC通讯方案
1500PLC与wincc通过4G网络远程通讯
WINCC中自定义 XY 轴的多功能曲线的实现方法
wincc报警如何通过短信发送给手机
在WinCC(TIA Portal)项目中,如何正确的使用面板,模板,弹出窗口和滑入窗口?
通过巨控GRM532Y-C远程调试下载国外PLC
巨控GRM远程模块配置使用流程简介
巨控远程模块微信报警配置方法
TIA中如何将数据块的实际值转到初始值中
wincc 远程和PLC通讯方案
如何使用EXCEL访问WinCC中的实时数据实现报表
西门子PLC无线通讯解决方案
巨控无线通讯模块在带式输送机行业的应用
WinCC激活故障排除及解决思路
Wincc在手机端监控_巨控OPC560解决方案
PLC之间的Profibus 通讯
怎么远程控制国外的PLC