理论教育 SoMachine控制器变量命名规则

SoMachine控制器变量命名规则

时间:2023-10-22 理论教育 版权反馈
【摘要】:前缀用来指示数据类型,剩下的就称为基本名。变量命名的限制性规定如下:●变量名只能有单下画线;●不能有空格;●不能有IEC关键字和操作符;●不能有特别字符如+,-.*,/…ADR运算符可以用于函数名、程序名、功能块名和方法名。若满足上述两个条件,指针校验应当返回这个输入指针。

SoMachine控制器变量命名规则

1.标准变量的命名

变量名由两部分组成,即<前缀><基本名>。前缀用来指示数据类型,剩下的就称为基本名。基本名可以很短,是变量功能的意义解释。

例如:变量名bySubindex:表示这个变量是一个子索引命令,类型为字节。

sFileName:表示这个变量是一个文件名,类型为字符串。

iCounter:表示是一个计数变量,类型为整数INT。

变量命名的限制性规定如下:

●变量名只能有单下画线;

●不能有空格;

●不能有IEC关键字和操作符;

●不能有特别字符如+,-.*,/…

●不能与功能块同名。

2.引用(Reference)指针(Pointer)

引用是用来给标识符定义数据类型的,它的语法结构为:标识符:REFERENCE TO数据类型;这样就在变量声明区完成了对标识符的数据类型声明。也就意味着这个标识符可以是所有具有同样数据类型的变量的别名。当在程序编辑区执行程序时,可以使用以下语法结构来把其他同类数据类型变量与标识符关联起来。标识符REF=同类型变量。

引用的使用如图6-1所示。

978-7-111-46531-7-Chapter06-2.jpg

图6-1 引用的使用

有效引用的检查:

操作符“ISVALIDREF”可用来检查引用是否指向一个不等于0的有效值

语法:

布尔变量:=ISVALIDREF(标识符);

如果引用指向一个有效值,则<布尔变量>为真(TRUE),否则为假(FALSE)。有效引用的检查如图6-2所示。

978-7-111-46531-7-Chapter06-3.jpg

图6-2 有效引用的检查

引用检查的仿真如图6-3所示。

978-7-111-46531-7-Chapter06-4.jpg

图6-3 引用检查的仿真

指针(Pointer)

作为IEC 61131-3标准的扩展,您可以使用指针。

指针用来在应用程序运行时存储变量、程序、功能块、方法和函数的地址。它可以指向上述的任何一个对象以及任意数据类型,包括用户定义数据类型。请注意,您可以使用隐含的指针校验功能。

声明指针的语法如下:

<标识符>:POINTER TO<数据类型|功能块|程序|方法|函数>;取指针地址内容即意味着读取指针当前所指地址中存储的数据。通过在指针标识符后添加内容操作符“^”,可以取得指针所指地址的内容:请看下面“pt^”的使用示例。通过地址操作符ADR可以将变量的地址赋给指针。

指针的应用如图6-4所示。

978-7-111-46531-7-Chapter06-5.jpg(www.daowen.com)

图6-4 指针的应用

指针的仿真运行如图6-5所示。

978-7-111-46531-7-Chapter06-6.jpg

图6-5 指针的仿真运行

函数指针

与CoDeSys V2.3不同的是,本版本用函数指针取代了INDEXOF操作符。这类指针可以指向外部库,但不可以在编程系统的应用程序内部调用函数指针!注册回调函数(系统库函数)的运行时函数需要函数指针,之后根据注册所需的回调函数的不同,各自的函数将由运行时系统隐式调用(例如STOP)。若需要使能这样的系统调用(运行时系统),必须为函数对象设置各自的属性(类别“编译”)。

ADR运算符可以用于函数名、程序名、功能块名和方法名。由于函数在在线修改之后有可能被移动,因此运算结果不是函数的地址,而是指向函数的指针的地址。只要函数存在,这一地址就将一直有效。

指针的索引访问

作为IEC 61131-3标准的扩展,允许对POINTER、STRING和WSTRING等类型的变量进行索引访问“[]”。

■pint[i]返回被指向的数据类型。

■指针的索引访问的算法:如果对指针变量进行索引访问的操作,则偏移量将按照下式计算:pint[i]=(pint+i*被指向的数据类型的长度)^。索引访问也隐含了获取指针地址内容的操作。所得结果的数据类型是指针所指的数据类型。请注意:pint[7]!=(pint+7)^!

■如果对STRING类型的变量进行索引访问的操作,则会得到索引表达式偏移量处的字符。所得结果是BYTE类型。str[i]将会以SINT的形式(ASCII编码)返回字符串中的第i个字符。

■如果对WSTRING类型变量进行索引访问的操作,则会得到索引表达式偏移量处的字符。所得结果是WORD类型。wstr[i]将会以INT形式(Unicode编码)返回字符串中的第i个字符。

注意:请注意引用与指针不同,它们将直接修改所指的数据。

指针校验函数(CheckPointer function)

为了在程序运行时检查指针的指向,您可以在每次访问指针的地址之前使用隐含的“指针校验”功能。您可以通过添加对象对话框向应用程序中添加“用于隐含检查的POU”对象。点选指针校验的复选框,选择一种实现语言,确认无误后点击打开。校验功能将会在编辑器中以您选择的语言打开。声明部分是预先设置的,与前述选项的选择无关,并且只有添加了其他局部变量之后才可以更改!与其他校验函数不同的是,没有提供指针校验函数的默认实现,这一部分需要由用户编写。

指针校验函数需要检查指针指向的地址是否在有效的存储范围之内,另外还需要检查引用的连续内存空间与指针所指的变量的数据类型是否匹配。若满足上述两个条件,指针校验应当返回这个输入指针。出现错误时则交由用户进行适当的处理。

模板

声明部分://隐含生成的代码:请勿修改FUNCTION CheckPointer:POINTER TO BYTE VAR INPUT

ptToTest:POINTER TO BYTE;

iSize:DINT;

iGran:DINT;

bWrite:BOOL;

END VAR

实现部分:

//没有标准的实现。请在此处添加您编写的代码

CheckPointer:=ptToTest;

调用本函数时需要以下输入参数:

■ptToTest:指针的目标地址。

■iSize:引用的变量的长度;iSize的数据类型必须与整型兼容且能涵盖存储在指针地址中的可能的最大数据长度。

■iGran:存取的单位长度,如用于被引用变量的最大的未结构化的数据类型;iGran的数据类型必须与整型兼容。

■bWrite:读取方式(TRUE为写方式,FALSE为读方式);bWrite必须是布尔类型返回值:取指针地址内容时使用的地址,因此最好是第一个输入参数的地址(ptToTest)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈