查看: 1791|回复: 6
收起左侧

[教程经验] 分享:编程小技巧

Slimming 2022-11-19 11:45:19 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

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

x
本帖最后由 Slimming 于 2022-11-19 11:54 编辑

codesys编译器相关功能和指令介绍。文章使用markdown语法,可在网页左侧查看目录。

数据相关

可变数组 ARRAY[星] OF

  可变数组只可以在FB中定义为IN_OUT类型变量,一维数组定义为ARRAY[星号]OF ...,二维数组定义ARRAY[星号,星号] OF ...。
可变数组
  定义为可变数组后,在外部调用时数组便不受限制。
可变数组赋值
  在功能块外部使用可变数组,内部需要确定数组的上限和下限,防止数组调用时出现越界情况,导致plc宕机。可变数组的上限使用方法UPPER_BOUND( 变量名 , 维数),下限使用LOWER_BOUND( 变量名 , 维数)获取。用法如下:
上下限获取说明
上下限获取样例

引用类型 reference to

  引用类型类似指针,在定义一些对象数据时使用比较安全,不必像指针^(显) ADR(隐)调用,使用简单。引用的安全性在于不可变址,防止空指针,建议在轴、结构体、联合体等对象类型的数据中使用。
  比如系统指令相关的轴指令中,Axis变量的定义就是引用类型。
轴的引用类型

retain、persistent区别

对象属性property

  与本地变量隐藏相对应的就是查看和修改本地变量,由于安全考虑,不开放本地变量,但是部分变量有可能需要被外界修改,需要使用属性对本地变量进行中转修改。
  属性属于FB的一种特性,属性的本质和input、output类型一致,都是读或写类型的变量,属性的存在对比输入输出类型,相当于多了一层保护,安全性能更好。属性添加之后,会出现读取方法Get、写入方法Set,在对应的方法中去读写本地变量,就可以从外部调用属性对本地变量进行读写。

声明相关

结构数据对齐 Pack_Mode

  数据对齐的功能是让多个变量按照设定的间隔地址进行排列,可以使变量地址更易查找,但是过大的间隔会引起内存的浪费。
对其说明
  一般在结构体中会用到对齐功能,在指定结构体的初始地址后,很容易就获取到其余变量的地址,部分编译器此功能可能异常,可在软件F1中搜索Pack_Mode查找相关说明。
对齐例子

数组初始化

  数组在定义后,如果需要其存在一组初始值,可在定义的时候就进行初始化,用来防止数据运算异常。

显示进制转换 displaymode

  编译器默认的显示进制为10进制,如果仅需要一部分数据需要显示为2进制或16进制,就可以更改这些数据的显示模式,尤其是在字位转换的过程中,使用2进制显示数据调试更方便。


隐藏本地变量 hide_all_locals

  本地变量默认在本地范围内有效,但是在视图和监视中都可以调用到本地变量,外部空间修改内部变量可能会引起数据安全问题,而且本地变量过多不利于变量的查找,所以在FB和FC中的最上方,建议声明隐藏本地变量


变量权限 qualified_only

  数据定义之后,仅在声明的区间内生效,若在不同的区域设定相同的变量名,容易导致混淆,所以部分场合需要用到权限,限定变量的调用需要使用 (区域.变量名)的方式。
  对于权限,一般在全局变量表和枚举中使用,例如在gvl全局变量列表中定义了xData1,那么在声明权限后,调用变量的方式为gvl.xData1。枚举类型在新建后默认开启了权限。

数据运算

取整 trunc

  取整函数对于个数计算非常实用,例如 trunc(1.8)=1 , trunc(-1.8)=-1,不同于强制类型转换,强制类型转换默认使用四舍五入,例如any_to_int(1.8)=2 , any_to_int(-1.8)=-2。

选择语句SEL、MUX、MAX、MIN、LIMIT

  选择语句SEL(判断 , 结果0,结果1 ),功能和if else 相同,但是表达更为简洁,同c和js中的(判断)?(结果0):(结果1);

  选择MUX(判断 , 结果0,结果1,... ),功能和case 相同,但是表达更为简洁。

  选择语句Max(数据0,数据1,..,)取最大值,Min(数据0,数据1,..,)取最小值,limt(下限,数据,上限)限定数据在范围内。
  多个数据的最大值和最小值选择可以使用Max或Min,同时Max和Min可以单边限定数据范围,部分数据可能只要求限制最大值、或最小值,使用limit不满足要求,那么就可以使用Max(自身数据,下限)限定数据不小于下限,Min(自身数据,上限)限定数据不小于下限。

)

强制类型转换anyto

  强制类型转换一般需要指定源类型和转换类型,使用any_to_type 可以自动识别源类型,提高便携性。





上一篇:AM401配置CANopen通讯控制伺服仿真不了吗?
下一篇:InoDriverShop伺服参数导入导出

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

w1518092258 2022-11-21 20:51:38 | 显示全部楼层
内容丰富 感谢分享      
回复 送花

使用道具 举报

liujunyan1205 2022-11-24 09:14:58 | 显示全部楼层
感谢分享,受益匪浅
回复 送花

使用道具 举报

Patrical 2022-11-24 11:01:44 | 显示全部楼层
写得很好,,,,,,,,值得参考,,,,,,,,感谢,,
回复 送花

使用道具 举报

Cool 2022-12-24 17:31:14 | 显示全部楼层
不错,学习了一些技能,值得分享
回复 送花

使用道具 举报

瞬间AK 2023-3-23 10:56:28 | 显示全部楼层
感谢分享,受益匪浅
回复 送花

使用道具 举报

dancekey 2023-3-24 13:54:31 | 显示全部楼层
写的很好,深入研究,值得学习。。。
回复 送花

使用道具 举报

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

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部