admin 管理员组

文章数量: 887040


2024年1月25日发(作者:倩女幽魂手游紫色字体颜色代码)

第十八章 宏指令(macro)使用说明

第十八章 宏指令(macro)使用说明宏指令提供了应用程式之外所需的附加功能。在MT8000触摸屏运行时,宏指令可以自动的执行这些命令。它可以担负执行例如复杂的运算、字符串处理和用户与工程之间的交流等功能。本章主要介绍宏指令的语法、如何使用和编辑方法等。希望通过本章的说明,能够使各位快速的掌握EB8000软件提供的强大的宏指令功能。18.1 宏指令的结构宏指令是由各种语句组成的。这些语句包含常量、变量和各种运算符号。这些语句放置在特定的顺序位置以便执行后达到一个希望的执行结果。宏指令的结构一般为以下格式:一个宏指令必须有一个且只有一个主函数,用来开始宏指令的执行。格式为:macro_command 函数名称()

end macro_command变量声明必须放在宏指令语句的前面,否则如果语句放置在变量声明的前面,将会造成宏指令无法编译通过。局部变量一般用在宏指令主函数或者自定义的子函数中。他的合法性只在指定的函数中有效。总体变量一般是定义在所有宏指令函数的前面,且它在整个宏指令中均具有效性。在同一个函数中,当局部变量和总体变量被定义为相同的名称时,只有局部变量有效。下面就是一个简单的宏指令,其中就包含了变量声明和函数调用。macro_command main()

-343-

Easy Builder8000使用手册 short pressure = 10

end macro_command

// 局部变量声明

SetData(pressure, “Allen-Bradley DF1”, N7, 0, 1) // 函数调用此章节将说明宏指令的语法与编写的方式,包含以下几个部分:18.2 宏指令的语法 1. 常量与变量a. 常量 常量是一个可以被各式语句直接使用的固定资料。有如下格式:下面即为一个简单的常量使用的范例:macro_command main()

short A, B

A = 1234

B = 0x12

// 1234 和 0x12 即为常量// 声明A和B为短整型变量end macro_commandb. 变量变量是程序执行时保存数据的量,在宏指令中,这些数据可以随着宏指令语句执行的结果而改变。(1) 变量的命名规则 必须以英文字母为开头

变量名称长度不得超过32个字符 系统保留字名称不能作为变量名称下面为8种不同的变量类型,前5种为有符号数据,后3种为无符号数据。-344-

第十八章 宏指令(macro)使用说明

(2) 变量声明变量必须在使用前声明,所以,在宏指令中,所有的变量都必须在语句使用前进行声明。声明变量时,先定义变量的类型,后面再跟上变量名称。如下范例:int ashort b, switchfloat pressureunsigned 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]”-345-

Easy Builder8000使用手册(4) 变量和数组的初始化有两种方法可以让变量初始化1、使用语句中的赋值语句(=)如下范例:int afloat b[3]a = 10b[0] = 12、声明变量时直接赋值char a =‘5’, b = 9数组变量的声明是一个特殊的情况,一个完整的数组被初始化时,可以在数组变量声明时将资料放置在“{}”中,各资料使用逗号分开。如下所示:float data[4] = {11, 22, 33, 44} //这样data[0] = 11, data[1] = 22….c. 运算符号运算符通常被用来指定资料是如何被操作的,在任何一个语句中,运算符左边的变量结果均依据运算符右边的条件而获得。-346-

第十八章 宏指令(macro)使用说明

移位运算符和位运算符通常被用来操作字符型变量、短整型变量和双整型变量的位。在一个语句中,这些运算符号的优先权是在从该语句的左边到右边依次执行的,即在语句中左边位置的优先执行,依次从左到右执行;1) 所有运算符号的优先权:上述所有运算符号的优先权从高到低详细如下所述:位于圆括号里的运算符号最优先数学运算符号移位和位运算符号比较运算符号逻辑运算符号赋值运算符号

2) 关键字下面的关键字为宏指令保留使用。这些均不能用来作为变量名称、数组名或者函数名称等:+, -, *, /, %, >=, >, <=, <, <>, ==, 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, falseACOS、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、-347-

Easy Builder8000使用手册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

举例:int B[10]    //定义了一维数组变量B的长度为10,类型为双整型2. 赋值语句赋值语句使用赋值运算符号将赋值运算符号右边表达式运算的结果放置到运算符左边的变量中,一个表达式是由变量、常量和各种运算符号组成,执行后产生一个新的结果:变量 = 表达式举例:A = 2 //这样变量A就被赋值为2 //定义了变量A为双整型数据类型类型 数组名称[数组长度] 当定义数组名称的类型3. 逻辑运算逻辑运算语句是根据逻辑(布尔)表达式的结果来执行相应的动作,它的语句如下所示:(1) 单行-348-

第十八章 宏指令(macro)使用说明

举例:if a = = 2 then b = 1 else b = 2end if(2) 区块形式 if a = = 2 then b = 1 else if a = = 3 then b = 2 else b = 3 end if语法说明-349-

Easy Builder8000使用手册(3) 循环控制循环可控制依据循环条件来反复执行一个任务,循环控制有两种表达方式。1) for-next语句For-next语句通常用于循环次数已确定的情况,一个变量用作任务执行次数的计数器和结束循环任务执行的条件,这个变量为固定执行的次数。语法结构如下:或者举例: for a = 0 to 10 step 2 b = a next a语法说明-350-

第十八章 宏指令(macro)使用说明

2) while-wend语句while-wend语句是用来执行不确定次数的循环任务,设置一个变量用来判断结束循环的条件,当条件为TRUE时,该语句将一直循环执行直到条件变为FALSE,语法结构如下:举例: while a < 10 a = a + 10 wend语法说明3) select-case语句select-case可用来处理多重判断的语句,其功能类似if-else语句,根据所指定变量的值,分别对应到符合该值的case,并执行case下面的语句,直到遇到break语句时,才跳到结束符号end

select处,语法结构如下:没有预设case的形式:举例:

Select Case A Case 1-351-

Easy Builder8000使用手册 b=1 breakend Select有预设case的形式举例:

Select Case A Case 1 b=1 break Case else b=0 break end Select多个不同case对应到相同区域:-352-

第十八章 宏指令(macro)使用说明

举例:

Select Case A Case 1 Case 2 b=2 Case 3 b=3 break break end Select语法描述:4) 其他控制命令-353-

Easy Builder8000使用手册18.4 子函数使用子函数可以有效的减少循环命令的代码,子函数必须在使用前被定义,且可以使用任何变量和语句类型。在主函数中,将子函数的参数放置在子函数名称后面的圆括号中,即可调用子函数,子函数被执行后,将执行后的结果返回到主函数需要的赋值语句或条件中。定义子函数时,不一定要有返回值,且参数部分可以为空。在主函数中调用子函数时,调用方式符合其定义。语法结构如下:有返回值的子函数语法:举例:sub int Add(int x, int y) int result result = x +y return resultend submacro_command main() int a = 10, b = 20, sum sum = Add(a, b)

end macro_command或:sub int Add() int result, x=10, y=20 result = x +y return resultend submacro_command main() int sum-354-

第十八章 宏指令(macro)使用说明

sum = Add()

end macro_command没有返回值的子函数语法:举例:sub Add(int x, int y) int result result = x +yend submacro_command main() int a = 10, b = 20 Add(a, b)

end macro_command或:sub Add() int result, x=10, y=20 result = x +yend submacro_command main() Add()

end macro_command-355-

Easy Builder8000使用手册语法描述:18.5 内置函数功能Easybuilder8000软件宏指令中本身提供了一些内建的函数用来从PLC获取资料和传输资料到PLC,资料处理和数学运算等。 (1)数值运算-356-

第十八章 宏指令(macro)使用说明

-357-

Easy Builder8000使用手册-358-

第十八章 宏指令(macro)使用说明

-359-

Easy Builder8000使用手册-360-

第十八章 宏指令(macro)使用说明

(2) 数值转换-361-

Easy Builder8000使用手册-362-

第十八章 宏指令(macro)使用说明

-363-

Easy Builder8000使用手册

-364-

第十八章 宏指令(macro)使用说明

(3) 数值操作-365-

Easy Builder8000使用手册-366-

第十八章 宏指令(macro)使用说明

-367-

Easy Builder8000使用手册(4) 位操作-368-

第十八章 宏指令(macro)使用说明

(5) 通讯-369-

Easy Builder8000使用手册-370-

第十八章 宏指令(macro)使用说明

-371-

Easy Builder8000使用手册-372-

第十八章 宏指令(macro)使用说明

-373-

Easy Builder8000使用手册-374-

第十八章 宏指令(macro)使用说明

-375-

Easy Builder8000使用手册-376-

第十八章 宏指令(macro)使用说明

      -377-

Easy Builder8000使用手册-378-

第十八章 宏指令(macro)使用说明

-379-

Easy Builder8000使用手册-380-

第十八章 宏指令(macro)使用说明

-381-

Easy Builder8000使用手册-382-

第十八章 宏指令(macro)使用说明

(6) 其他函数

-383-

Easy Builder8000使用手册-384-

第十八章 宏指令(macro)使用说明

18.6 如何建立和执行宏指令(1) 如何建立一个宏指令按照以下步骤可以建立一个宏指令。步骤1单击EB8000软件工具栏的宏指令图标 ,打开宏指令管理框,如下图所示:-385-

Easy Builder8000使用手册在宏指令管理框中,已经编译成功的宏指令会出现在“已编译成功”列表上,未完成编译的会出现在“未完成编译”列表中,下面时宏指令管理框中个按键的功能描述:[新增]新增一个宏指令,并打开新建宏指令的编辑器[删除]删除选择的宏指令[编辑]打开宏指令的编辑器,并开启选择的宏指令[复制]复制选择的宏指令[粘贴]将刚刚选择需要复制的宏指令,粘贴到“已编译完成”列表区,并产生一个新的宏指令名称-386-

第十八章 宏指令(macro)使用说明

[密码保护]宏指令提供密码保护功能。步骤2触控“新增”按钮,打开一个新增的宏指令编辑器,每一个宏指令都有一个唯一的编号,定义在“编号”这个位置。在“宏指令名称”这个栏目中也必须输入宏指令的名称,否则编译将无法通过。

步骤3设计属于您的宏指令程序,如果有必要的话,使用内建的函数,例如Setdata或者Getdata等函数。单击“函数…”按键打开一个函数列表对话框,选择需要的函数,并设定必要的参数。-387-

Easy Builder8000使用手册步骤4编辑完成一个新建的宏指令程序后,单击“编译”按钮对该宏指令进行编译工作。-388-

第十八章 宏指令(macro)使用说明

如果没有错误,单击“关闭”按键,这样在“已编译成功”区会发现新增了一个“test”这个名称的宏指令。

-389-

Easy Builder8000使用手册(2)如何执行宏指令执行宏指令有多种不同的方法,下面分别说明:a. 使用“PLC控制”元件1.打开PLC控制元件,并设定属性为“执行宏指令”2.选择需要执行的宏指令名称,设定一个位作为宏指令的触发地址并设置触发条件,在条

件满足时,该宏指令将会被重复执行,为了每次只让宏指令执行一次,设计时需在宏指令

最后将该触发位复位。3.使用一个“位状态设定”元件或者“位状态切换开关”元件作为这个位的控制开关b. 使用“位状态设定”元件或者“位状态切换开关”元件1.在“位状态设定”元件或者“位状态切换开关”元件的一般属性页中,勾选“使用宏指令”2.选择执行宏指令的编号,当这个元件被执行时,选择的宏指令就会被执行一次c. 使用功能键1.在功能键的一般属性页对话框中,勾选“触发宏指令”2.选择需要执行的宏指令的编号,每按一下这个功能键时,选择的宏指令就会被执行一次18.7 使用宏指令时的注意事项1. 存储局部变量的空间为4KB,所以各种不同变量类型的最大数组大小如下:char a[4096]bool b[4096]short c[2048]int d[1024]float e[1024]2. 一个EasyBuilder8000工程中最多包含256条宏指令3. 宏指令有可能造成HMI当机,可能的原因为:-

-

宏指令执行了一个闭环命令数组的大小超过了宏指令的变量容量4. 使用过多的宏指令,可能会造成与PLC的通讯速度慢-390-

第十八章 宏指令(macro)使用说明

18.8 使用自由协议去控制一个设备当EasyBuilder8000还没有一个建立好的驱动程序与某一个设备通讯时,用户也可以使用宏指令中的OUTPORT和INPORT函数来实现与该设备的通讯。使用OUTPORT和INPORT函数发送和接收资料,必须遵行该设备的通讯协议。下面的范例程序说明了如何使用两个函数来控制一个MODBUS

RTU设备。首先,在系统参数/设备列表中建立一个新的设备,这个新建的“PLC 类型”设置为“Free

Protocol”,“PLC名称”设置为“MODBUS RTU Device”,如下图所示:这里的设备连接使用RS232,如果连接一个MODBUS TCP/IP设备,这个界面接口类型必须设定为“以太网口”,同时必须设定正确的IP地址和端口号,如下图所示:-391-


本文标签: 指令 变量 使用 执行 语句