『7x24小时有问必答』
推荐阅读:
在程序的编写过程中,可能会发生如下的几种情况:
除法运算的被除数在某些情况下会为零;
指针在赋值的过程中可能不小心指向空地址;
调用数组时数组边界别溢出了;
针对上述情况,CoDeSys 有对应的解决方案,用户可以应用下添加隐式检查POUs,隐式检查POUs能够检查函数的阵列和界限,以及除数为零和运行系统中的指针。“POUs 的隐式检查”属性中提供了以下函数功能:
1. CheckBounds 检查数组边界函数
此函数检查是否对数组的边界有超出。通常应用在可变的数组类型被分配应用中,使用该隐藏函数可以用有效的保证函数边界不被超出。
例如,在程序中,其数组类型变量“a”超出上限,其程序如下:
PROGRAM PLC_ PRGVAR a: ARRAY[0..7] OF BOOL;b: iNT:=10;END_ VAR

a:=TRUE;

在程序之初,数组a只有0~7八个成员,而在实际的程序中,a数组的第b个成员为TRUE, .
而b在程序定义时却为10, 所以程序想表达的意思是a[10]:=TRUE, 但数组变量a在定义之处却只有8个元素,10已经超出了其定义范围。
针对上述案例可能会产生的情况,可以使用CheckBound 函数,使用了之后,程序将会自动限制该索引值从“10”至上限“7”。因此,同样的表达式a:=TRUE最终会被闲置为a[7] :=TRUE 而非a[10]:=TRUE。
2. CheckDivInt/CheckDivLint/CheckDivReal/CheckDivLreal 检查除零函数
为了检查除数的值,避免程序进行除零运算,CoDeSys 中可以使用检查函数CheckDivInt/CheckDivLint/ CheckDivReal/ CheckDivLreal。在将它们包含在应用中之后每个相关代码发生的除法过程都将产生-一个此函数调用的预处理。
例如,使用除法指令,具体程序如下,
PROGRAM PLC_ PRGVARerg:REAL;v1:REAL:=799;d:REAL; END_ VAR

erg:=v1 / d;
在上例中,erg 等于v1除以d,而d在变量定义之初并没有赋予初值,故其初值为0,在程序中如果直接将数除以0,系统则会出错。但是,如果在指令中经过了指向除法运算检查的CheckDivReal函数之后除数“d”的值在初始化的时候变为“1”。因此除法最终结果为799,能够有效的避免控制器异常出错。
3. CheckRange/CheckRangeUnsigned 域边界的检查函数
为了在运行过程中检查域的限制,可以使用函数CheckRangeSigned或CheckRangeUnsigned.此检查功能的目的是恰当的子集违规处理(如设置-.个检测到的错误旗帜或改变值)。当一个变量的子集类型被确认后这个功能将被隐藏访问。当访问这个功能时得到以下输入参数:
值:域类型被分配的值
低:域的下限
高:域的上限.
如果被分配的值是在有效的域内,他将作为功能中的返回值被使用。否则,对应超过范围的数值,要么上限或下边界的范围将被返回。
例如,分配i:=10*y将被隐性替代为,
i := CheckRangeSigned(10*y, -4095, 4095);
如果y的值为1000, 变量i将不会分配到原始执行提供的10*1000=10000 ,取而代之 的是4095,因为函数设定的上限值最大为4095。
例如,死循环的例子,
VARui : UINT (0..10000);END_ VAR

FOR ui:=0 TO 10000 DOEND  _FOR

FOR循环永远不会退出,因为检查功能制止了将ui的超过10000。
4. CheckPointer 指针检查函数
函数CheckPointer检查地址的指针引用是否都在有效的内存范围内。在运行过程中,用户可以在每个指针操作都可以使用CheckPointer来进行指针访问的检查。它可以用来检查地址指针引用是.
否均在有效的内存范围。此外,还可以用来检测对齐的内存区与引用的变量数据类型的指针指向。
如果两个条件都满足,CheckPointer 返回不变输入指针。
当调用函数获得以下输入参数时:
ptToTest:指标的 目标地址;
iSize:引用变量的型号;型号的数据类型必须是整数兼容的并且必须涵盖最大潜在储存在指标
地址中的数据型号;  
iGran: 访问的间隔,这是最大的无结构数据类型,iGran的数据类型必须是整数兼容的;
bWrite:访问的类型(TRUE=写入访问,FALSE=读入访问) ;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码