合信论坛

快捷导航
查看: 7089|回复: 0

CODESYS的隐含检测功能

[复制链接]

14

主题

27

帖子

1133

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1133
发表于 2020-2-25 18:37:23 | 显示全部楼层 |阅读模式
本帖最后由 徐展鸿 于 2020-2-25 18:41 编辑

在程序的编写过程中,可能会发生如下的几种情况:
 除法运算的被除数在某些情况下会为零;
 指针在赋值的过程中可能不小心指向空地址;
 调用数组时数组边界别溢出了;
针对上述情况,CoDeSys 有对应的解决方案,用户可以应用下添加隐式检查 POUs,隐式检查
POUs 能够检查函数的阵列和界限,以及除数为零和运行系统中的指针。
有以下这四种函数功能:
 CheckBounds; (检查数组边界函数)
 CheckDivInt /CheckDivLInt/CheckDivReal/CheckDivLreal; ( 检查除零函数 )
 CheckRange/CheckRangeUnsigned; ( 域边界的检查函数 )
 CheckPointer ( 指针检查函数 )
关于上面四种类型函数,CheckPointer ( 指针检查函数 )时需要用户自己编写的,其他的是不可编写的。
隐含检查的函数选择.png
1.操作步骤:
在应用下鼠标右键选择“添加对象”,选择“用于隐含检查的 POU”,随后系统则
会弹出对话框,进行函数选择

添加方法.png
2.函数分析:
(2-1)  CheckDivInt/CheckDivLint/CheckDivReal/CheckDivLreal 检查除零函数为了检查除数的值,避免程序进行除零运算,CoDeSys 中可以使用检查函数 CheckDivInt/
CheckDivLint/ CheckDivReal/ CheckDivLreal。在将它们包含在应用中之后每个相关代码发生的除法
过程都将产生一个此函数调用的预处理。
当我们新建一个变量没有初始赋值,直接拉出来进行除法运算,这个时候系统会报错,因为没有初始赋值这个变量系统会默认为0
INT类型的除法检测.png
当使用了隐含检测除0时,系统会将为初始赋值的变量默认为1,避免产生程序错误

使用了隐含检测除0的显示.png

(2-2)CheckBounds 检查数组边界函数

此函数检查是否对数组的边界有超出。通常应用在可变的数组类型被分配应用中,使用该隐藏
函数可以用有效的保证函数边界不被超出。


如果没有采用,数组的最大值会从头开始算,如图中
没有采用数组检测.png
采用了数组边界检测变量最大值会按照数组的最大边界来赋值,如图中
数组检测.png


(2-3) CheckRange/CheckRangeUnsigned 域边界的检查函数为了在运行过程中检查域的限制,可以使用函数 CheckRangeSigned 或 CheckRangeUnsigned。
此检查功能的目的是恰当的子集违规处理(如设置一个检测到的错误旗帜或改变值)。当一个
变量的子集类型被确认后这个功能将被隐藏访问。当访问这个功能时得到以下输入参数:
 值:域类型被分配的值
 低:域的下限
 高:域的上限
如果被分配的值是在有效的域内,他将作为功能中的返回值被使用。否则,对应超过范围的数
值,要么上限或下边界的范围将被返回。
如图中演示的是上限值,当没有用边沿检测的时候最大值是大于边沿的。
没有用边沿检测.png


使用了边沿检测就是按照编写的最大值,这个地方使用了要注意避免计算陷入死循环,因为他是不会超出最大值的。

采用了边沿检测.png

(2-4) CheckPointer 指针检查函数 (需要用户自己编写,格式有很多种下面只是我个人编写检测数据类型不对的时候如何产生报警)函数 CheckPointer 检查地址的指针引用是否都在有效的内存范围内。在运行过程中,用户可以
在每个指针操作都可以使用 CheckPointer 来进行指针访问的检查。 它可以用来检查地址指针引用是
否均在有效的内存范围。此外,还可以用来检测对齐的内存区与引用的变量数据类型的指针指向。
如果两个条件都满足,CheckPointer 返回不变输入指针。
当调用函数获得以下输入参数时:
ptToTest: 指标的目标地址;
iSize:引用变量的型号;型号的数据类型必须是整数兼容的并且必须涵盖最大潜在储存在指标
地址中的数据型号;
iGran:访问的间隔,这是最大的无结构数据类型, iGran 的数据类型必须是整数兼容的;

bWrite:访问的类型(TRUE=写入访问,FALSE=读入访问);
(关于iSize和iGran这两个变量类型的意思是检测关于指针数据类型代表的字节是不是正确的,如INT是2,REAL是4)
指针编写.png
如果没有开指针检测,数据类型传递是不正确的如图
指针演示2.png
正确的如图
指针演示1.png

如果采用了隐含指针检测会产生报警
指针错误演示.png









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

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2024-4-20 19:30 , Processed in 0.109583 second(s), 23 queries .

快速回复 返回顶部 返回列表