收藏 分享(赏)

威纶HMI宏指令使用说明.pdf

上传人:HR专家 文档编号:5546680 上传时间:2019-03-07 格式:PDF 页数:84 大小:801.79KB
下载 相关 举报
威纶HMI宏指令使用说明.pdf_第1页
第1页 / 共84页
威纶HMI宏指令使用说明.pdf_第2页
第2页 / 共84页
威纶HMI宏指令使用说明.pdf_第3页
第3页 / 共84页
威纶HMI宏指令使用说明.pdf_第4页
第4页 / 共84页
威纶HMI宏指令使用说明.pdf_第5页
第5页 / 共84页
点击查看更多>>
资源描述

1、第三十章 宏指令说明. 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

2、.6.1 怎样建立一个宏指令. 52 30.6.2 执行宏指令. 57 30.7 使用宏指令时的注意事项 58 30.8 使用自由协议去控制一个设备 59 30.9 编译错误提示信息 67 30.10 宏指令范例程序 78 1 第三十章 宏指令说明 宏指令提供了应用程序之外附加的你所需要的功能。在MT8000人机界面运行时,宏指令可以自动的执行这些命令。它可以担负执行譬如复杂的运算、字符串处理,和使用者与工程之间的交流等功能。本章主要介绍宏指令的语法、如何使用和编程方法等功能。希望通过本章的说明,能够使各位能够快速的掌握EB8000软件提供的强大的宏指令功能。 30.1 宏指令的结构 宏指令是

3、由各种语句组成的。这些语句包含常数、变量和各种运算符。这些语句放置在特定的顺序位置以执行后达到一个希望的执行结果。 宏指令的结构一般为以下格式: 全局变量声明 -可选 Sub Function Block Declarations(子函数声明) - -可选 局部变量声明 End Sub(结束子函数) macro_command main() 主函数 - -必须 局部变量声明 各式语句 2 end macro_command 结束主函数 -必须 一个宏指令必须有一个且只有一个主函数,用来开始宏指令的执行。格式为: macro_command 函数名称() end macro_command 变量

4、声明必须放在宏指令语句的前面,否则如果语句放置在变量声明的前面,将会造成宏指令无法编译通过。 局部变量一般用在宏指令主函数或者自定义的子函数中。它的合法性只在指定的函数中有效。 全局变量一般是定义在所有宏指令函数的前面,且它在整个宏指令中均具有有效性。当局部变量和全局变量被定义为相同的名称时,只有局部变量有效。 下面就是一个简单的宏指令,其中就包含了变量声明和功能执行。 macro_command main() short presure = 10 / 局部变量声明 SetData(pressure, “Allen-Bradley DF1“, N7, 0, 1) / 功能执行 end macr

5、o_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 即为常量 e

6、nd 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 (双字

7、) 变量声明 变量必须在使用前声明。所以,在宏指令,所有的变量都必须在语句使用前都被声明完成。声明变量时,先定义变量的类型,后面再跟着变量名称。 如下范例: int a short b, switch float pressure 5 数组声明 宏指令支持一维数组(下标从0开始)。声明数组变量时,先定义数组变量的类型,变量名称,接着就是该数组变量的个数,变量个数必须放置在“”符号中。数组变量的长度为14096。一个宏指令中只支持4096个变量。 如下范例: int a10 short b20, switch30 float pressure15 数组的下标最小为0,最大下标为(数组的长度-1)

8、 如下范例: char data 100 / 数组变量的长度是100 所以: 最小的数组为“data0”,最大的数组为“data99”,即100-1=99。 变量和数组初始化 有两种方法可以让变量初始化: 1. 使用语句中的赋值语句(=) 如下范例: int a float b3 6 a = 10 b0 = 1 2. 声明变量时直接赋值 char a = 5, b = 9 数组变量的声明是一个特殊的情况。一个完整的数组被初始化时,可以在数组变量声明时,将数据放置在波形括号“”里面,各数据使用逗号分开。 如下所示: float data4 = 11, 22, 33, 44 /这样 data0 =

9、 11, data1 = 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

10、 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 所有运算符的优先权 上述所有运算符的优先权从高到低详细如下所述: 位于圆括号里面的运算符最优先 数学运算符 移位

11、和位运算符 比较运算符 逻辑运算符 赋值运算符 关键词 下面的关键词为宏指令保留使用。这些均不能用来作为变量名称、数组名称或者函数名称等。 +, -, *, /, %, =, , , =, 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,

12、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,

13、 GetError, GetData, GetDataEx, SetData, SetDataEx 30.3 语句 30.3.1 定义语句 这个定义语句包含了变量和数组的声明。正式的格式如下: 类型 名称 当定义一个名称的类型时 举例: int A /定义了变量A为双整型格式 类型 数组名称数组长度 当定义数组名称的类型时 举例: int B10 定义了一维数组变量B的长度为10,类型为双整型 10 30.3.2 赋值语句 赋值语句使用赋值运算符将赋值运算符右边表达式运算的结果放置到运算符左边的变量中。一个运算表达式是由变量、常量和各种运算符组成,执行后产生一个新的数据。 变量 = 表达式 举

14、例 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 en

15、d if 语法描述: if 必须用在该语句的开始部分 12 必要条件。 这是一个控制语句。当为0时,即为“FALES”,(条件为假);当为非0时,即为“True”(条件为真)。 then 当执行为“TRUE”(真)时,必须放置在需要执行的语句之前。Statements 在区块形式中是可选择的参数,在单行形式中,且没有else子句时,为必要参数,该语句在为真时执行。 else if 可选,一条或多条语句,在相对应的为true时执行。 可选,解释同Condition else 可选,在上述Condition和Condition n都不为true时执行。 end if 必须。在一个if-then语句

16、中使用这个来结束if-then语句。 30.3.4 循环语句 循环语句依据循环条件来反复的执行一个任务。循环语句有两种表达方式。 30.3.4.1 for-next 语句 For-next语句通常用来执行次数固定的循环任务。一个变量用作为任务执行次数的计数器和结束循环任务执行的条件。这个变量为固定执行的次数。语法结构如下: for Counter = to step Statements next Counter 或者 13 for Counter = down step Statements next Counter 举例: for a = 0 to 10 step 2 b = a next

17、 a 语法描述: for 必须用在该语句的开始部分。 Counter 必要,循环计数器的数值变量,该变量的结果用来计数循环的次数。 必要,Counter的初值。 to/down 必要。用来决定步长是递增还是递减。 This determines if the increments or decrements the . “to” 递增 by . “down” 递减 by . 必要,Counter的终值。测试点。当大于该值时,宏指令将结束这个循环任务。 step 可选,指定的步长,指定为1以外的数值。 StepValue 可选,Counter的步长,只能是数值,如果没有指定,则预设为1。 Sta

18、tements 可选,for和next之间的语句区块,该语句区块将执行所指定的次数。 next 必须的。 Counter 可选。 14 30.3.4.2 while-wend 语句 While-wend语句是用来执行不确定次数的循环任务。设置一个变量用来判断结束循环的条件。当条件为“True”时,该语句将一直循环执行直到条件变为“False”。语法结构如下: while Statements wend 举例: while a (parameters) Local variable declarations Statements return value end sub 举例: sub int

19、Add(int x, int y) int result result = x +y return result end sub macro_command main() 16 int a = 10, b = 20, sum sum = Add(a, b) end macro_command 语法描述: sub 必须用在该子函数的开始部分。 type 必须的。用来定义子函数执行后返回的数据类型。 (parameters) 可选。这些参数保留了从主函数传入的数值。这些被传入的参数必须使用与在参数变量声明的类型一致。 举例: sub int MyFunction(int x, int y). x

20、和 y 必须为从主函数中传过来的双整型数据格式的数据。调用此子函数的语句格式大致为这样: ret = MyFunction(456, pressure) 当执行这个子函数后,一个双整型数据将会返回给变量“ret”。 Local variable declaration 除了被传递的参数之外,子函数中使用的变量必须事先声明。在上面的“举例”中,X和Y就是子函数可以使用的变量。全局变量也可以用在子函数中。 Statements 需要执行的语句。 return value 用来将执行的结果返回给调用语句。这个结果可以是一个常数或者变量。返回后同时也结束了子函数的执行。 end sub 必须的。用来结

21、束子函数。 30.5 内置函数功能 EasyBuilder8000软件宏指令中本身提供了一些内建的函数用来从PLC获取数据和传输数据到PLC、数据处理和数学运算等。 17 30.5.1 数学运算函数 函数名称 SQRT 语法 SQRT(source, result) 描述 开平方根。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。数据来源必须为一个正数。 举例 macro_command main() float source, result SQRT(15, result) source = 9.0 SQRT(source, result)/ 执行后re

22、sult = 3.0 end macro_command 函数名称 SIN 语法 SIN(source, result) 描述 三角函数的正弦计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result 18 SIN(90, result)/ result is 1 source = 30 SIN(source, result)/ result is 0.5 end macro_command 函数名称 COS 语法 COS(source, result) 描述 三角函数的

23、余弦计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result COS(90, result)/ result is 0 source = 60 GetData(source, “Local HMI“, LW, 0, 1) COS(source, result)/ result is 0.5 end macro_command 语法名称 TAN 19 语法 TAN(source, result) 描述 三角函数的正切计算。数据来源“source”可以是常数或者变量,但是存

24、放结果的“result”必须为变量。 举例 macro_command main() float source, result TAN(45, result)/ result is 1 source = 60 TAN(source, result)/ result is 1.732 end macro_command 函数名称 COT 语法 COT(source, result) 描述 三角函数的余切计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result COT(45

25、, result)/ result is 1 source = 60 COT(source, result)/ result is 0.5774 20 end macro_command 函数名称 SEC 语法 SEC(source, result) 描述 反三角函数中反正割计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result SEC(45, result)/ result is 1.414 source = 60 SEC(source, result)/ if s

26、ource is 60, result is 2 end macro_command 函数名称 CSC 语法 CSC(source, result) 描述 反三角函数中反余割计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result 21 CSC(45, result)/ result is 1.414 source = 30 CSC(source, result)/ result is 2 end macro_command 函数名称 ASIN 语法 ASIN(sour

27、ce, result) 描述 反三角函数中反正弦计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result ASIN(0.8660, result)/ result is 60 source = 0.5 ASIN(source, result)/ result is 30 end macro_command 函数名称 ACOS 22 语法 ACOS(source, result) 描述 反三角函数中反余弦计算。数据来源“source”可以是常数或者变量,但是存放结果的“r

28、esult”必须为变量。 举例 macro_command main() float source, result ACOS(0.8660, result)/ result is 30 source = 0.5 ACOS(source, result)/ result is 60 end macro_command 函数名称 ATAN 语法 ATAN(source, result) 描述 反三角函数中反正切计算。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() float source, result ATA

29、N(1, result)/ result is 45 source = 1.732 ATAN(source, result)/ result is 60 23 end macro_command 函数名称 RAND 语法 RAND(result) 描述 产生一个随即数 存放结果的“result”必须为变量。 举例 macro_command main() short result RAND (result)/ result is not a fixed value when executes macro every time end macro_command 30.5.2 数据转换函数 函数

30、名称 BIN2BCD 语法 BIN2BCD(source, result) 描述 将BIN格式的数据(source)转换为BCD格式的数据(result)。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() short source, result 24 BIN2BCD(1234, result)/ result is 0x1234 source = 5678 BIN2BCD(source, result)/ result is 0x5678 end macro_command 函数名称 BCD2BIN 语法

31、BCD2BIN(source, result) 描述 将BCD格式的数据(source)转换为BIN格式的数据(result)。数据来源“source”可以是常数或者变量,但是存放结果的“result”必须为变量。 举例 macro_command main() short source, result BCD2BIN(0x1234, result)/ result is 1234 source = 0x5678 BCD2BIN(source, result)/ result is 5678 end macro_command 25 函数名称 DEC2ASCII 语法 DEC2ASCII(so

32、urce, resultstart, len) 描述 将十进制的数据(source)转换为ASCII格式的数据,并存放在一个一维数组(result)中。len表示这个转换后的字符串的长度,同时这个长度也取决于存放结果的一维数组的数据格式。例如:如果result一维数组的格式为“char”,(字符型,长度为一个字节),则长度为“字节数*len”。如果result一维数组的格式为“short”(短整型数据,2个字节),则长度为“word*len”。依此类推。 转换后的第一个字符放在resultstart中,第二个字符放在resultstart+1中,最后一个字符放在resultstart+(len

33、-1)中。 source和len可以是常量或者变量,单数result必须为变量。start也必须为常数。 举例 macro_command main() short source char result14 short result24 source = 5678 DEC2ASCII(source, result10, 4) / result10 is 5, result11 is 6, result12 is 7, result13 is 8 / the length of the string (result1) is 4 bytes( = 1 * 4) DEC2ASCII(source,

34、 result20, 4) / result20 is 5, result21 is 6, result22 is 7, result23 is 8 / the length of the string (result2) is 8 bytes( = 2 * 4) 26 end macro_command 函数名称 HEX2ASCII 语法 HEX2ASCII(source, resultstart, len) 描述 十六进制格式数据(source)转换为ASCII格式的数据,并将结果存放在一个一维数组(result)中。len表示这个转换后的字符串的长度,同时这个长度也取决于存放结果的一维数

35、组的数据格式。例如:如果result一维数组的格式为“char”,(字符型,长度为一个字节),则长度为“字节数*len”。如果result一维数组的格式为“short”(短整型数据,2个字节),则长度为“word*len”。依此类推。 source和len可以是常量或者变量,单数result必须为变量。start也必须为常数。 举例 macro_command main() short source char result4 source = 0x5678 DEC2ASCII(source, result0, 4) / result0 is 5, result1 is 6, result2 i

36、s 7, result3 is 8 end macro_command 27 函数名称 ASCII2DEC 语法 ASCII2DEC(sourcestart, result, len) 描述 将字符型ASCII数据(source)转换为十进制格式的数据,并存放在result变量中。ASCII的长度即为len,第一个字符的位置即为sourcestart的数据。 source和len可以是常量或者变量,单数result必须为变量。start也必须为常数。 举例 macro_command main() char source4 short result source0 = 5 source1 =

37、6 source2 = 7 source3 = 8 ASCII2DEC(source0, result, 4) / result is 5678 end macro_command 函数名称 ASCII2HEX 语法 ASCII2HEX (sourcestart, result, len) 描述 将ASCII字符型数据(source)转换为十六进制的数据,并存放在result变量中。字符的长度即为len的数据。第一个字符存放在sourcestart中。 28 source和len可以是常量或者变量,单数result必须为变量。start也必须为常数。 举例 macro_command main

38、() char source4 short result source0 = 5 source1 = 6 source2 = 7 source3 = 8 ASCII2DEC(source0, result, 4) / result is 0x5678 end macro_command 30.5.3 数据操作函数 函数名称 FILL 语法 FILL(sourcestart, preset, count) 描述 依序将预设值(preset)放置到一维数组sourcestart开始的数组中,放置的数据个数有count决定。 source和start必须为变量,preset可以为一个常量或者变量。

39、举例 macro_command main() char result4 char preset 29 FILL(result0, 0x30, 4) / result0 is 0x30, result1 is 0x30, , result2 is 0x30, , result3 is 0x30 preset = 0x31 FILL(result0, preset, 2) / result0 is 0x31, result1 is 0x31 end macro_command 函数名称 SWAPB 语法 SWAPB(source, result) 描述 将一个16位字的高低字节颠倒,并将结果存放在result变量中。 Source可以是常量或者是变量,单数result必须为变量。 举例 macro_command main() short source, result SWAPB(0x5678, result)/ result is 0x7856 source = 0x123 SWAPB(source, result)/ result is 0x2301 end macro_command 30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报