
威纶通宏指令使用说明简体)xin资料.pdf
67页第十八章 宏指令(macro)使用说明 -343- 第十八章 宏指令(macro)使用说明 宏指令提供了应用程式之外所需的附加功能 在MT8000触摸屏运行时, 宏指令可以自动的执 行这些命令 它可以担负执行例如复杂的运算、 字符串处理和用户与工程之间的交流等功能 本章 主要介绍宏指令的语法、 如何使用和编辑方法等 希望通过本章的说明, 能够使各位快速的掌握 EB8000软件提供的强大的宏指令功能 18.1 宏指令的结构 宏指令是由各种语句组成的 这些语句包含常量、 变量和各种运算符号 这些语句放置在特定 的顺序位置以便执行后达到一个希望的执行结果 宏指令的结构一般为以下格式: 一个宏指令必须有一个且只有一个主函数, 用来开始宏指令的执行 格式为: macro_command 函数名称() end macro_command 变量声明必须放在宏指令语句的前面, 否则如果语句放置在变量声明的前面, 将会造成宏指令 无法编译通过 局部变量一般用在宏指令主函数或者自定义的子函数中 他的合法性只在指定的函数中有效 总体变量一般是定义在所有宏指令函数的前面, 且它在整个宏指令中均具有效性 在同一个函 数中, 当局部变量和总体变量被定义为相同的名称时, 只有局部变量有效。
下面就是一个简单的宏指令, 其中就包含了变量声明和函数调用 macro_command main() Easy Builder8000使用手册 -344- short pressure = 10 // 局部变量声明 SetData(pressure, “Allen-Bradley DF1” , N7, 0, 1) // 函数调用 end macro_command 此章节将说明宏指令的语法与编写的方式, 包含以下几个部分: 18.2 宏指令的语法 1. 常量与变量 a. 常量 常量是一个可以被各式语句直接使用的固定资料 有如下格式: 下面即为一个简单的常量使用的范例: macro_command main() short A, B // 声明A和B为短整型变量 A = 1234 B = 0x12 // 1234 和 0x12 即为常量 end macro_command b. 变量 变量是程序执行时保存数据的量, 在宏指令中, 这些数据可以随着宏指令语句执行的结果而 改变。
(1) 变量的命名规则 必须以英文字母为开头 变量名称长度不得超过32个字符 系统保留字名称不能作为变量名称 下面为8种不同的变量类型, 前5种为有符号数据, 后3种为无符号数据 第十八章 宏指令(macro)使用说明 -345- (2) 变量声明 变量必须在使用前声明, 所以, 在宏指令中, 所有的变量都必须在语句使用前进行声明 声明 变量时, 先定义变量的类型, 后面再跟上变量名称 如下范例: int a short b, switch float pressure unsigned short c (3) 数组声明 宏指令支持一维数组 (下标从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]” Easy Builder8000使用手册 -346- (4) 变量和数组的初始化 有两种方法可以让变量初始化 1、 使用语句中的赋值语句 (=) 如下范例: int a float b[3] a = 10 b[0] = 1 2、 声明变量时直接赋值 char a = ‘5’ , b = 9 数组变量的声明是一个特殊的情况, 一个完整的数组被初始化时, 可以在数组变量声明时将资 料放置在 “{}” 中, 各资料使用逗号分开。
如下所示: float data[4] = {11, 22, 33, 44} //这样data[0] = 11, data[1] = 22…. c. 运算符号 运算符通常被用来指定资料是如何被操作的, 在任何一个语句中, 运算符左边的变量结果均依 据运算符右边的条件而获得 第十八章 宏指令(macro)使用说明 -347- 移位运算符和位运算符通常被用来操作字符型变量、 短整型变量和双整型变量的位 在一个 语句中, 这些运算符号的优先权是在从该语句的左边到右边依次执行的, 即在语句中左边位置的优 先执行, 依次从左到右执行; 1) 所有运算符号的优先权: 上述所有运算符号的优先权从高到低详细如下所述: 位于圆括号里的运算符号最优先 数学运算符号 移位和位运算符号 比较运算符号 逻辑运算符号 赋值运算符号 2) 关键字 下面的关键字为宏指令保留使用 这些均不能用来作为变量名称、 数组名或者函数名称等: +, -, *, /, %, =, , ,=, &, |, ^, ~ 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 ACOS、 ADDSUM、 ASCII2DEC、 ASCII2FLOAT、 ASCII2HEX、 ASIN、 ASYNC_TRIG_MACRO、 ATAN、 BCD2BIN、 Beep、 BIN2BCD、 COS、 COT、 CRC、 CSC、 CUBERT、 DEC2ASCII、 DELAY、 FILL、 FindDataSamplingDate、 FindDataSamplingIndex、 FindEventLogDate、 FindEventLogIndex、 FLOAT2ASCII、 GETBIT、 GetCTS、 GetData、 GetDataEx、 GetError、 HEX2ASCII、 HIBYTE、 HIWORD、 Easy Builder8000使用手册 -348- INPORT、 INVBIT、 LOBYTE、 LOG、 LOG10、 LOWORD、 OUTPORT、 POW、 PURGE、 RAND、 SEC、 SETBITOFF、 SETBITON、 SetData、 SetDataEx、 SetRTS、 SIN、 SQRT、 StringBin2DecAsc、 StringBin2HexAsc、 StringCat、 StringCompare、 StringCompareNoCase、 StringCopy、 StringDecAsc2Bin、 StringDecAsc2Float、 StringExcluding、 StringFind、 StringFindOneOf、 StringFloat2DecAsc、 StringGet、 StringGetEx、 StringHexAsc2Bin、 StringIncluding、 StringInsert、 StringLength、 StringMid、 StringReverseFind、 StringSet、 StringSetEx、 StringToLower、 StringToReverse、 StringToUpper、 StringTrimLeft、 StringTrimRight、 SWAPB、 SWAPW、 SYNC_TRIG_MACRO、 TAN、 TRACE、 XORSUM。
18.3 语句 1. 定义语句 这个定义语句包含了变量和数组的声明, 正式的格式如下: 类型 名称 当定义一个名称的类型时 举例: int A //定义了变量A为双整型数据类型 类型 数组名称[数组长度] 当定义数组名称的类型 举例: int B[10] //定义了 一维数组变量B的长度为10, 类型为双整型 2. 赋值语句 赋值语句使用赋值运算符号将赋值运算符号右边表达式运算的结果放置到运算符左边的变量 中, 一个表达式是由变量、 常量和各种运算符号组成, 执行后产生一个新的结果: 变量 = 表达式 举例: A = 2 //这样变量A就被赋值为2 3. 逻辑运算 逻辑运算语句是根据逻辑 (布尔) 表达式的结果来执行相应的动作, 它的语句如下所示: (1) 单行 第十八章 宏指令(macro)使用说明 -349- 举例: if a = = 2 then b = 1 else b = 2 end if (2) 区块形式 if a = = 2 then b = 1 else if a = = 3 then b = 2 else b = 3 end if 语法说明 Easy Builder8000使用手册 -350- (3) 循环控制 循环可控制依据循环条件来反复执行一个任务, 循环控制有两种表达方式。
1) for-next语句 For-next语句通常用于循环次数已确定的情况, 一个变量用作任务执行次数的计数器和结束 循环任务执行的条件, 这个变量为固定执行的次数 语法结构如下: 或者 举例: for a = 0 to 10 step 2 b = a next a 语法说明 第十八章 宏指令(macro)使用说明 -351- 2) while-wend语句 while-wend语句是用来执行不确定次数的循环任务, 设置一个变量用来判断结束循环的条 件, 当条件为TRUE时, 该语句将一直循环执行直到条件变为FALSE, 语法结构如下: 举例: while a 0 and response[1] == 0x3) then read_data[0] = response[4] + (response[3] 2 b[3]= 403 9 + 3 = 9 + 3 4 + 3 = 8 + 8 == 8 b[4]= not 8 + 1 and 2 + 1 or 0 + 1 xor 2 b[5]= 405 and 3 and not 0 b[6]= 8 & 4 + 4 & 4 + 8 | 4 + 8 ^ 4 b[7]= 6 - (〃4) b[8]= 0x11 b[9]= 409 for i = 0 to 4 step 1 if (a[0] == 400) then GetData(a[0], “Device 1” , 3x, 0,9) GetData(b[0], “Device 1” , 3x, 11,10) end If next i end macro_command 2) while, if, break语句 macro_command main() int b[10], i i = 5 while i == 5 - 20 % 3 GetData(b[1], “Device 1” , 3x, 11, 1) if b[1] == 100 then break 第十八章 宏指令(macro)使用说明 -405- end if wend end macro_command 3) 全域变量,子函数调用 char g sub int fun(int j, int k) int y SetData(j, “Local HMI” , LB, 14, 1) GetData(y, “Loca。