
威纶HMI宏指令使用说明.pdf
84页第三十章第三十章 宏指令说明宏指令说明 .2 30.1 宏指令的结构宏指令的结构 2 30.2 宏指令的语法宏指令的语法 4 30.2.1 常量和变量常量和变量.4 30.2.2 运算符运算符 7 30.3 语句语句 10 30.3.1 定义语句定义语句 10 30.3.2 赋值语句赋值语句 11 30.3.3 逻辑运算语句逻辑运算语句 11 30.3.4 循环语句循环语句.13 30.3.4 其他控制命令其他控制命令 15 30.4 子函数子函数 16 30.5 内置函数功能内置函数功能 17 30.5.1 数学运算函数数学运算函数.18 30.5.2 数据转换函数数据转换函数.24 30.5.3 数据操作函数数据操作函数.29 30.5.4 位状态转换位状态转换.34 30.5.5 通讯有关的函数通讯有关的函数.37 30.6 怎样建立和执行宏指令怎样建立和执行宏指令52 30.6.1 怎样建立一个宏指令怎样建立一个宏指令.52 30.6.2 执行宏指令执行宏指令.57 30.7 使用宏指令时的注意事项使用宏指令时的注意事项58 30.8 使用自由协议去控制一个设备使用自由协议去控制一个设备59 30.9 编译错误提示信息编译错误提示信息67 30.10 宏指令范例程序宏指令范例程序78 1 第三十章第三十章 宏指令说明宏指令说明 宏指令提供了应用程序之外附加的你所需要的功能。
在 MT8000 人机界面运行时,宏指令可 以自动的执行这些命令它可以担负执行譬如复杂的运算、字符串处理,和使用者与工程之 间的交流等功能本章主要介绍宏指令的语法、如何使用和编程方法等功能希望通过本章 的说明,能够使各位能够快速的掌握 EB8000 软件提供的强大的宏指令功能 30.1 宏指令的结构宏指令的结构 宏指令是由各种语句组成的这些语句包含常数、变量和各种运算符这些语句放置在特定 的顺序位置以执行后达到一个希望的执行结果 宏指令的结构一般为以下格式: 全局变量声明 -----------------------------------可选 Sub Function Block Declarations(子函数声明) -----------------------------------可选 局部变量声明 End Sub(结束子函数) macro_command main() [主函数] ------------------------------------必须 局部变量声明 [各式语句] 2 end macro_command [结束主函数] ------------------------------------必须 一个宏指令必须有一个且只有一个主函数,用来开始宏指令的执行。
格式为: macro_command 函数名称() end macro_command 变量声明必须放在宏指令语句的前面,否则如果语句放置在变量声明的前面,将会造成宏指 令无法编译通过 局部变量一般用在宏指令主函数或者自定义的子函数中它的合法性只在指定的函数中有 效 全局变量一般是定义在所有宏指令函数的前面,且它在整个宏指令中均具有有效性当局部 变量和全局变量被定义为相同的名称时,只有局部变量有效 下面就是一个简单的宏指令,其中就包含了变量声明和功能执行 macro_command main() short pressure = 10 // 局部变量声明 SetData(pressure, “Allen-Bradley DF1“, N7, 0, 1) // 功能执行 end macro_command 3 30.2 宏指令的语法宏指令的语法 30.2.1 常量和变量常量和变量 30.2.1.1 常量常量 常量是一个可以被各式语句直接使用的固定的数据有如下格式: 常量类型常量类型 使用说明使用说明 举例举例 十进制整型数 345, -234, 0, 23456 十六进制数 必须以 0x 开头 0x3b, 0xffff, 0x237 字符型 字符必须使用单引号 ‘a’, ‘data’, ‘函数名称’ 布尔型 true, false 下面即为一个简单的常量使用的范例。
macro_command main() short A, B // 声明A和B为短整型变量 A = 1234 B = 0x12 // 1234 和 0x12 即为常量 end macro_command 30.2.1.2 变量变量 4 变量是一个代表着各种资料的名称在宏指令中,这些资料可以随着宏指令语句执行的结果 改变而改变 变量的命名规则变量的命名规则 1. 必须以英文字母开头 2. 变量名成长度不超过 32 个字符 3. 系统保留寄存器名称不能作为变量名称 下面为 5 种不同的变量类型: 变量类型变量类型 描述描述 范围范围 Bool 布尔型 1 bit (一个位) 0, 1 Char 字符型 8 bits (一个字节) ±127 Short 短整型 16 bits (一个字) ±32767 Int 双整型 32 bits (双字) ±2147418112 Float 浮点型 32 bits (双字) 变量声明变量声明 变量必须在使用前声明所以,在宏指令,所有的变量都必须在语句使用前都被声明完成 声明变量时,先定义变量的类型,后面再跟着变量名称 如下范例: int a short b, switch float pressure 5 数组声明数组声明 宏指令支持一维数组(下标从 0 开始)。
声明数组变量时,先定义数组变量的类型,变量名称, 接着就是该数组变量的个数,变量个数必须放置在“[]”符号中数组变量的长度为 1~4096 一个宏指令中只支持 4096 个变量 如下范例: int a[10] short b[20], switch[30] float pressure[15] 数组的下标最小为 0,最大下标为(数组的长度-1) 如下范例: char data 100] // 数组变量的长度是 100 所以: 最小的数组为“data[0]”,最大的数组为“data[99]”,即 100-1=99 变量和数组初始化变量和数组初始化 有两种方法可以让变量初始化: 1. 使用语句中的赋值语句(=) 如下范例: int a float b[3] 6 a = 10 b[0] = 1 2. 声明变量时直接赋值 char a = ‘5’, b = 9 数组变量的声明是一个特殊的情况一个完整的数组被初始化时,可以在数组变量声明时, 将数据放置在波形括号“{}”里面,各数据使用逗号分开 如下所示: float data[4] = {11, 22, 33, 44} //这样 data[0] = 11, data[1] = 22…. 30.2.2 运算符运算符 运算符通常被用来指定数据是如何被操作的。
在任何一个语句中,运算符左边的变量结果均 依据运算符右边的条件而获得 运算符运算符 描述描述 举例举例 = 赋值运算符 pressure = 10 数学运算符数学运算符 描述描述 举例举例 + 加 A = B + C - 减 A = B – C * 乘 A = B * C 7 / 除 A = B / C % 求余 (返回剩余数) A = B % 5 比较运算符比较运算符 描述描述 举例举例 = 10 then B = 5 大于 if A = 大于或者等于 if A 不等于 if A = 10 or B 5 then C = 10 Xor 异或 if A xor 256 then B = 5 Not 非 if not A then B = 5 移位和位运算符通常被用来操作字符型变量、 短整型变量和双整型变量的位 在一个语句中, 这些运算符的优先权是在从该语句的左边到右边依此执行的 即在语句中左边位置的优先执 行,依次从左到右执行 移位运算符移位运算符 描述描述 举例举例 往右移动指定的位数 A = B 8 8 位运算符位运算符 描述描述 举例举例 & 位与运算 A = B & 0xf | 位或运算 A = B | C ^ 位异或运算 A = B ^ C ~ 位取反运算 A = ~B 所有运算符的优先权所有运算符的优先权 上述所有运算符的优先权从高到低详细如下所述: 位于圆括号里面的运算符最优先 数学运算符 移位和位运算符 比较运算符 逻辑运算符 赋值运算符 关键词关键词 下面的关键词为宏指令保留使用。
这些均不能用来作为变量名称、 数组名称或者函数名称等 +, -, *, /, %, =, , , ==, and, or, xor, not, ,=, &, |, ^, ~ exit, macro_command, for, to, down, step, next, return, bool, short, int, char, float, void, if, then, else, break, continue, set, sub, end, while, wend, true, false 9 SQRT, CUBERT, LOG, LOG10, SIN, COS, TAN, COT, SEC, CSC, ASIN, ACOS, ATAN, BIN2BCD, BCD2BIN, DEC2ASCII, FLOAT2ASCII, HEX2ASCII, ASCII2DEC, ASCII2FLOAT, ASCII2HEX, FILL, RAND, DELAY, SWAPB, SWAPW, LOBYTE, HIBYTE, LOWORD, HIWORD, GETBIT, SETBITON, SETBITOFF, INVBIT, ADDSUM, XORSUM, CRC, INPORT, OUTPORT, POW, GetError, GetData, GetDataEx, SetData, SetDataEx 30.3 语句语句 30.3.1 定义语句定义语句 这个定义语句包含了变量和数组的声明。
正式的格式如下: 类型 名称 当定义一个名称的类型时 举例: int A //定义了变量 A 为双整型格式 类型 数组名称[数组长度] 当定义数组名称的类型时 举例: int B[10] 定义了一维数组变量 B 的长度为 10,类型为双整型 10 30.3.2 赋值语句赋值语句 赋值语句使用赋值运算符将赋值运算符右边表达式运算的结果放置到运算符左边的变量中 一个运算表达式是由变量、常量和各种运算符组成,执行后产生一个新的数据 变量 = 表达式 举例 A = 2 这样变量 A 就被赋值为 2 30.3.3 逻辑运算语句逻辑运算语句 逻辑运算语句是根据逻辑(布尔)表达式的结果来执行相应的动作它的语句如下所示: 单行格式单行格式 if then [Statements] else [Statements] end if 举例: if a = = 2 then b = 1 else 11 b = 2 end if 区块格式区块格式 If then [Statements] else if then [Statements] else [Statements] end if 举例: if a = = 2 then b = 1 else if a = = 3 b = 2 else b = 3 end if 语法描述: if 必须用在该语句的开始部分 12 必要条件。
这是一个控制语句当为 0 时,即为“FALES”, (条件为假);当为非 0 时,即为“True”(条件为真) then 当执行为“TRUE”(真)时,必须放置在需要执行的语句之前 [Statements] 在区块形式中是可选择的参数,在单行形式中,且没有 else 子句时,为必 要参数,该语。












