变量类型-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 1054|回复: 0

变量类型

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-13 14:13
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2024-11-6 21:28:58 | 显示全部楼层 |阅读模式
    • VAR 局部变量
    • VAR_INPUT 输入变量
    • VAR_OUTPUT 输出变量
    • VAR_IN_OUT 输入和输出变量
    • VAR_IN_OUT CONSTANT 传输变量
    • VAR_GLOBAL 全局变量
    • VAR_TEMP 临时变量
    • VAR_STAT 静态变量
    • VAR_EXTERNAL 外部变量
    • VAR_INST 实例变量


    局部变量 - VAR
    在关键字 VAR 与 END_VAR 之间,POU 的所有局部变量都已声明。这些局部变量没有任何外部关连;也就是说,无法从外部写入。
    请考虑向 VAR 添加属性的可能性。
    示例
    [AppleScript] 纯文本查看 复制代码
    VAR
     iLoc1:INT; (* 1. Local Variable*)
    END_VAR
    

    输入变量 - VAR_INPUT
    在关键字 VAR_INPUT 与 END_VAR 之间,充当 POU 的输入变量的所有变量都已声明。因此,在调用位置处,变量值可以与调用一起提供。
    请考虑添加属性的可能性。
    示例
    [AppleScript] 纯文本查看 复制代码
    VAR_INPUT 
    iIn1:INT (* 1. Inputvariable*)
    END_VAR
    

    输出变量 - VAR_OUTPUT
    在关键字 VAR_OUTPUT 与 END_VAR 之间,充当 POU 的输出变量的所有变量都已声明。因此,这些值将被被移动到进行调用的 POU。
    请考虑向 VAR_OUTPUT 添加属性的可能性。
    示例
    [AppleScript] 纯文本查看 复制代码
    VAR_OUTPUT 
    iOut1:INT; (* 1. Outputvariable*)
    END_VAR
    

    函数和方法中的输出变量:
    根据 IEC 61131-3 草案 2,函数(和方法)可以具有额外输出。您可以在函数调用中分配这些输出,如以下示例中所示。
    示例
    [AppleScript] 纯文本查看 复制代码
    fun(iIn1 := 1, iIn2 := 2, iOut1 => iLoc1, iOut2 => iLoc2);
    

    输入和输出变量 - VAR_IN_OUT
    在关键字 VAR_IN_OUT 与 END_VAR 之间,充当 POU 的输入和输出变量的所有变量都已声明。
    注: 借助于 IN_OUT 类型的变量,已传输变量的值将更改(作为指针传输,即,按引用调用)。因此,此类变量的输入值不能是常量。因此,即使是功能块的 VAR_IN_OUT 变量也无法通过 <FBinstance>.<InOutVariable> 来直接从外部读取或写入。
    注: 请勿向功能块的 [size=1em]BOOL 类型 VAR_IN_OUT 参数分配位类型符号(如,位于此类位类型地址上的 %MXaa.b 或 BOOL
    变量)。如果检测到任何此类赋值,则在消息视图中将其报告为编译错误。
    示例
    [AppleScript] 纯文本查看 复制代码
    VAR_IN_OUT 
    iInOut1:INT; (* 1. Inputoutputvariable *)
    END_VAR
    

    传输变量 - VAR_IN_OUT CONSTANT
    VAR_IN_OUT CONSTANT 变量用作常量引用传递参数。STRING 或 WSTRING 类型的变量或常量(字面量)可以被传递到此参数。此参数是只读参数。不允许传递属性。
    语法
    VAR_IN_OUT CONSTANT    <variable name> : <data type>; // formal parameterEND_VAR
    VAR_IN_OUT CONSTANT 变量的声明不需要对初始化值进行赋值。
    用法
    • 调用 POU 时,可以传递 STRING 或 WSTRING 类型的常数变量或字面量。不允许执行写访问。
    • 传递为 STRING 常量的参数时,字符串长度不受限制。字符串长度不取决于 VAR_IN_OUT CONSTANT 变量的字符串长度。

    注: 如果在属性设置 > 编译选项对话框
    中选择了替换常量选项,那么在传递基本数据类型的常量参数或者基本数据类型的常数变量参数时,编译器会生成错误。
    此变量受 EcoStruxure Machine Expert V2.0 及其更高版本支持。
    示例:传递 STRING 常量参数和 STRING 变量参数
    [AppleScript] 纯文本查看 复制代码
    FUNCTION funManipulate : BOOL
    VAR_IN_OUT    
    sReadWrite : STRING(16); (* Can be read or written here in POU *)    
    dwVarReadWrite : DWORD; (* Can be read or written here in POU *)
    END_VAR
    VAR_IN_OUT CONSTANT    
    c_sReadOnly : STRING(16); (* Constant string variable can only be read here in POU *)
    END_VAR
    sReadWrite := 'String_from_POU';
    dwVarReadWrite := STRING_TO_DWORD(c_sReadOnly);
    PROGRAM PRG_A
    VAR    
    sVarFits : STRING(16);    
    sValFits : STRING(16) :='1234567890123456';    
    dwVar: DWORD;
    END_VAR
    // The following line of code causes the compiler error C0417:
    // C0417: VAR_IN_OUT parameter 'sReadWrite' needs a variable with write access as input.
    funManipulate(sReadWrite:='1234567890123456', c_sReadOnly:='1234567890123456', dwVarReadWrite := dwVar);
    // Correct code
    funManipulate(sReadWrite := sValFits, c_sReadOnly := '23', dwVarReadWrite := dwVar);funManipulate(sReadWrite := sVarFits, c_sReadOnly := sValFits, dwVarReadWrite :=dwVar);

    在代码示例中,字符串通过不同的 VAR_IN_OUT 变量传递到 funManipulate 函数:
    • 将字符串字面量传递到 VAR_IN_OUT 变量时,会触发编译器错误。
    • 将常数变量传递到 VAR_IN_OUT CONSTANT 变量时,可生成正确的代码。这甚至适用于传递字符串变量。



    全局变量 - VAR_GLOBAL
    您可以作为全局变量来声明在工程中已知的正常变量、常量、外部变量或剩余变量。要声明全局变量,请使用全局变量列表 (GVL)。可以通过执行添加对象命令(默认情况下是在工程菜单中)来添加 GVL。
    请在关键字 VAR_GLOBAL 和 END_VAR 之间以本地方式声明变量。
    请考虑向 VAR_GLOBAL 添加属性的可能性。
    以句点开头的变量将被识别为全局变量,例如,.iGlobVar1。
    有关多次使用变量名称、全局范围操作符 dot (.) 以及命名空间的详细信息,请参阅全局范围操作符一章。
    全局变量只能在全局变量列表 (GVL) 中声明。GVL 用来管理工程中的全局变量。可以通过执行添加对象命令(默认情况下是在工程菜单中)来添加 GVL。
    注: 如果在 POU 中以本地方式定义的某个变量与某个全局变量同名,则该变量在 POU 中优先。
    注: 全局变量是在 POU 的局部变量之前进行初始化。

    临时变量 - VAR_TEMP
    该功能是对 IEC 61131-3 标准的扩展。
    临时变量在每次调用 POU 时都进行(重新)初始化。VAR_TEMP 声明仅能在程序和功能块中使用。这些变量也只能在程序 POU 或功能块的主体中访问。
    请在关键字 VAR_TEMP 和 END_VAR 之间以本地方式声明变量。
    注: 您可以使用 VAR_TEMP 代替 VAR,以减少 POU 需要的存储器空间(例如,在只是临时使用变量的情况下,降低功能块中的存储器空间)。

    静态变量 - VAR_STAT
    该功能是对 IEC 61131-3 标准的扩展。
    静态变量可以在功能块、方法和函数中使用。请在关键字 VAR_STAT 和 END_VAR 之间以本地方式声明静态变量。静态变量是在首次调用各自 POU 时进行初始化。
    如同全局变量一样,静态变量在用于声明静态变量的 POU 退出之后,不会丢失其值。静态变量在用于声明静态变量的 POU 之间共享(例如,多个功能块实例、函数或方法共享相同的静态变量)。例如,静态变量在功能中可以用作函数调用次数的计数器。
    请考虑向 VAR_STAT 添加属性的可能性。

    外部变量 - VAR_EXTERNAL
    外部变量是指导入 POU 的全局变量。
    请在关键字 VAR_EXTERNAL 和 END_VAR 之间以及在全局变量列表 (GVL) 中,以本地方式声明外部变量。该声明和全局声明必须相同。如果全局变量不存在,则会显示一条消息。
    注: 不需要将变量定义为外部变量。提供这些关键字是为了保持与 IEC 61131-3 的兼容性。

    示例
    [AppleScript] 纯文本查看 复制代码
    FUNCTION_BLOCK FB_DoSomething 
    VAR_EXTERNAL 
    iVarExt1:INT; (* 1st external variable *)
    END_VAR
    

    实例变量 - VAR_INST
    如果利用 VAR_INST 属性将方法的变量声明为实例变量,则此变量不会存储在方法堆栈上,而是存储在功能块实例的堆栈上。因此,它的行为与功能块实例其他变量的行为相似,并且在方法被调用时,不被初始化。
    VAR_INST 变量仅允许用在方法中。您只能在方法中访问这样的变量。属性(如 CONST、RETAIN)不允许用在声明中。变量的值可以在方法的声明部分中受到监视。
    示例
    [AppleScript] 纯文本查看 复制代码
    METHOD meth_last : INT
    VAR_INPUT  
    iVar : INT;
    END_VAR
    VAR_INST  
    iLast : INT := 0;
    END_VA
    Rmeth_last := iLast;
    iLast := iVar;
    




    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-11-9 03:46 , Processed in 0.147456 second(s), 43 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

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