使用AND_THEN与OR_ELSE为内存安全增设防护.docxVIP

使用AND_THEN与OR_ELSE为内存安全增设防护.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第PAGE6页

使用AND_THEN与OR_ELSE为内存安全增设防护

使用AND_THEN与OR_ELSE为内存安全增设防护

作者:云龙

职务:华东区技术支持工程师

邮箱:long.yun@

日期:2022-11-10

摘要:

在PLC程序代码编辑时,我们经常会使用到数组和指针的功能,当我们使用这两个功能时一定需要特别留意在程序的运行过程中是否会存在超过数组越界、指向非法/无效地址的问题,虽然也有一些方法可以在后期对这些问题进行检查,但是在程序设计的时候就应该先考虑到这部分代码的内存安全,以此我们建议合理的使用AND_THEN和OR_ELSE运算符,在设计时就尽量避免类似问题。同时,上述两个运算符的使用还能有效优化程序的执行时间、提升效率。后文将对此详细描述。

附件:

序号

文件名

备注

历史版本:

免责声明:

我们已对本文档描述的内容做测试。但是差错在所难免,无法保证绝对正确并完全满足您的使用需求。本文档的内容可能随时更新,如有改动,恕不事先通知,也欢迎您提出改进建议。

参考信息:

InfoSys中关于AND_THEN的信息

InfoSys中关于OR_ELSE的信息

目录

TOC\o1-3\h\z\u1. 软硬件版本 4

1.1. 倍福Beckhoff 4

1.1.1. 控制器硬件 4

1.1.2. 控制软件 4

2. 运算符说明 4

2.1. AND_THEN 4

2.2. OR_ELSE 4

2.3. 短路求值 4

3. 应用演示 4

3.1. 在指针引用时的应用 4

3.2. 在数组索引时的应用 6

3.3. 不同优先级的错误判断与状态输出 7

4. 总结 8

软硬件版本

倍福Beckhoff

控制器硬件

TwinCAT控制器,IPC、EPC或者PC,

此处使用:个人笔记本电脑

控制软件

个人笔记本电脑安装FullTwinCAT3:TwinCAT3.1Build4024.22版本

运算符说明

AND_THEN

该运算符是IEC61131-3标准的拓展,只允许在ST编程中使用,是对BOOL和BIT类型的操作数进行逻辑“与运算”,并具有短路求值(short-circuitevaluation)的属性。

与“AND”运算符的功能类似,当所有的操作数都为TRUE时,运算的结果也为TRUE,否则就为FALSE。

使用“AND_THEN”运算符时,只有在前一个操作数为“TRUE”时,TwinCAT才会继续运算后续操作数的表达式。例如在IF(ptr0AND_THENptr^=99)THEN的条件中,只有当ptr0条件满足时,才会执行后面的(prt^)取值动作,这样的特性可以在程序设计时有效的避免出现引用空指针的问题。

相反,如果使用“AND”运算符,TwinCAT总是会运算所有操作数,那么在上例中,如prt=0时,再执行(ptr^)取值动作就会出现引用空指针的问题。

OR_ELSE

该运算符是IEC61131-3标准的拓展。只允许在ST编程中使用,是对BOOL和BIT操作数进行逻辑“或运算”,并具有短路求值(short-circuitevaluation)的属性。

与“OR”运算符的功能类似,当至少一个操作数产生“TRUE”结果时,操作的结果也为“TRUE”,否则为“FALSE”。

与使用“OR”运算符相比,对于“OR_ELSE”来说,只要其中一个操作数产生为“TRUE”的结果,所有其他操作数上的表达式就不会被运算。

短路求值

只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值(short-circuitevaluation)

应用演示

在指针引用时的应用

变量声明:

PROGRAM?MAIN

VAR?

?pData??:POINTER?TO?INT;

?iData??:INT;

?bSwitch,bResult

???? :BOOL;

END_VAR

测试程序:

pData?:=?ADR(iData)?*?TO_UDINT(bSwitch);

IF?pData??0?AND_THEN?pData^??99?THEN

?bResult?:=?TRUE;

ELSE

?bResult?:=?FALSE;

END_IF

运行效果:

AND_THEN检查到没有满足前提条件,后续的操作数不再进行运算,即使后续操作数中出现空指针引用的表达式也不会导致PLC程序停止运行。

当所有条件都满足时,执行IF中要输出的表达式。

在数组索引时的应用

变量声明:

PROGRAM?MAIN

VAR?

?aData??:ARRAY[2..9]?OF?INT;

您可能关注的文档

文档评论(0)

汉化手册大全 + 关注
实名认证
文档贡献者

教师资格证持证人

汉化手册

领域认证该用户于2023年12月02日上传了教师资格证

1亿VIP精品文档

相关文档