Macro指令使用手册时间2005年7月版权所有台湾威纶科技有限公司概要此文文件为宏指令功能模块的使用文文件,说明宏语言的语法、宏指令编写的方法与操作顺序。使用文档包含以下几个部分宏语言说明宏语言使用说明与PLC的通信(包括本地地址LocalBit、LocalWord)宏指令操作说明有关宏指令的一些限制编译错误提示范例程序WeintekEasyBuilder500Macro使用说明2一.宏语言说明1.常数与变量a.常数(1)十进制常数(2)十六进常数(3)单引号内的ASCII常数(字符常数)(4)逻辑常数:True(非零),False(零)b.常数(1)变量命名必须以英文字母为开头,不得超过32个字符的长度(2)数据类型char字符类型short短整数类型int整数类型float浮点数类型bool逻辑类型WORD字类型DWORD双字类型c.运算符(1)赋值运算赋值运算:=(2)算术运算加:+减:-乘:*WeintekEasyBuilder500Macro使用说明3除:/余:%(3)关系运算小于:小于等于:=大于:大于等于:=等于:==不等于:(4)逻辑运算逻辑于:And逻辑或:Or逻辑:Xor逻辑非:Not(5)位运算(a)移位运算左移:右移:(b)逻辑位运算位与运算:&位或运算:|位异或运算:^位取反运算:~2.运算符号的优先级表达式中执行多个运算符号的操作时,需按照规定的顺序作计算,这种运算符号间的计算顺序,叫运算符的优先级。a.同一种类运算符号的优先级(按左到右,依次从高到低)WeintekEasyBuilder500Macro使用说明4算术运算符号:^Æ(*,/)Æ%Æ(+,-)移位运算符号:依照在表达式中出现的次序从左到右进行处理关系运算符号:依照在表达式中出现的次序从左到右进行处理逻辑运算符号:NotÆAndÆOrÆXorb.算术运算优先于位运算位运算优先于关系运算逻辑运算优先于赋值运算3.数组只支持静态一维数组,形式为:数组名[数组的大小],如Array[10]数组的下标大小为整数,其可取值区间为0---4294967295,下标的最小值为0,下标的最小值为(数组的大小–1),如intarray[MAX]MAX=100下标最小值:0下标最大值:99(由(100–1)获得)4.表达式a.运算对象(1)常数(2)变量(3)数组元素(4)函数呼叫b.表达式组成表达式由运算对象和运算符号按一定规则组合而成WeintekEasyBuilder500Macro使用说明55.语句a.宣告语句(1)typename宣告type类型的变量例如inta,宣告变量a为整数(2)typename[constant]宣告type类型的一维数组例如intarray[10],宣告变量a为整数类型的一维数组b.赋值语句形式为:变量=表达式例如a=2c.逻辑判断与分支赋值语句(1)单行形式IfConditionThen[Statements]EndIf例如Ifa==2Thenb=1Elseb=2EndIf(2)区块形式IfConditionThen[Statements]WeintekEasyBuilder500Macro使用说明6[Else[IfCondition–nThen[Else_If_Statements]….[Else[Else_Statements]]]]EndIf例如Ifa==2Thenb=1ElseIfa==3b=2Elseb=3EndIf语法说明Condition必要,为一条件表达式,条件表达式值为零,则视为假(FALSE),条件表达式值为非零,则视为真(TRUE)。Statements在区块形式中是可选择的参数,在单行形式中,且没有Else子句时,为必要参数,该语句在Condition为真时执行。Condition–n可选,解释同ConditionElse_If_Statements可选,一条或多条语句,在相对应的Condition–n为TRUE时执行。WeintekEasyBuilder500Macro使用说明7Else_Statements可选,在上述Condition和Condition–n都不为TRUE时执行。(3)多重分支选择SelectCase语句SelectCaseTest_Expression[CaseExpression–n[Starements–n]]….Break[CaseElse[Else_Statements]]BreakEndSelect例如SelectCaseaCase1b=1BreakCase2b=2BreakCaseElseb=3EndSelect语法说明Test_Expression必要,任何数值或字符串表达式。WeintekEasyBuilder500Macro使用说明8Expression–n如果有Case出现则为必要参数,为字符串或整数型态的常数。Statements–n可选,为一条或多条语句,当Test_Expression和对应的Expression–n相等时,被执行。Else_Statements可选,为一条或多条语句,当Test_Expression不和任一Expression–n相等时,被执行。d.循环控制(1)For–Next语句常用于次数已确定的情况,当为’To’时,此时按步长递增,当为’Down’时,此时按步长(step)递减。ForCounter=StartTo(Down)End[Stepstep][Statements]Next[Counter]例如Fora=0To10Step2b=aNexta语法说明Counter必要,循环计数器的数值变量,该变量只能是整数或字符型态的变量。Start必要,Counter的初值。End必要,Counter的终值。step可选,Counter的步长,只能是数值,如果没有指定,则预设为。WeintekEasyBuilder500Macro使用说明9则预设为1。Statements可选,For和Next之间的语句区块,该语句区块将执行指定的次数。(2)While–Wend语句包含条件控制的循环,条件放置于循环顶部,当条件的逻辑表达式值为TRUE时,执行循环体中的语句区块。WhileCondition[statements]Wend例如Whilea==2b=b+1GetData(a,LB_bin,5,1)Wend语法说明Condition必要,逻辑表达式,其计算结果为TRUE或FALSE,Condition为TRUE时执行循环体。Statements可选,为一语句区块,当Condition的值为TRUE时,执行语句区块。(3)break使用在循环和条件选择语句中,执行到此语句时,退出循环或条件语句。WeintekEasyBuilder500Macro使用说明10(4)continue使用在循环语句中,执行到continue时,立即中断这一次循环的执行,直接执行下一次循环。(5)return函数返回语句6.关键词集在宏语言中规定,用作特定用途的关键词,不能作为函数名称、数组名、变量名称等。这些关键词包含+,-,*,/,^,%,=,,,=,,==,And,Or,Xor,Not,,,=,&,|,^,~,If,Then,Else,EndIf,Select,Case,For,To,DownStep,Next,while,wend,break,continue,return等。WeintekEasyBuilder500Macro使用说明11二.宏语言使用说明1.局部变量及全局变量a.局部变量:仅在一个函数范围内有效b.全局变量:从定义或宣告的地方开始,到宏程序结束为止皆有效。在一个函数内当有相同名称的全局变量与局部变量时,以局部变量为准。2.变量赋于初值及常数种类a.变量赋于初值(1)在宣告语句中直接赋于变量初值,例如inttemp=9(2)在宣告或定义后,用赋值语句赋于变量初值,例如temp=9(3)赋于数组变量初值形式如:intg[10]={1,2,3,,3}初值包含在括号中,各数组分量用逗号隔开,从左到右按数组下标从零开始的顺序,赋于初值给各数组分量。b.常数宏语言支持(1)十进制整数形态常数(2)十六进制整数形态常数,以0x开头(3)字符形态常数(4)逻辑常数,True代表真,False代表假3.逻辑变量及表达式a.逻辑变量它有真(True),假(False)两种取值的情况,所有非零的值认为是真(True),零值认为是假(False)。b.表达式WeintekEasyBuilder500Macro使用说明12条件表达式的值为零值即为假,代表条件不成立;条件表达式的值为非零值即为真,代表条件成立。4.宣告语句a.宣告语句在函数外宣告或定义全局变量b.宣告语句在函数内宣告或定义局部变量,同时局部变量的宣告语句在函数内的最前面,其间不能有其它的语句,否则编译会出现错误讯息。Forexample:Macro_Commandmain()charii=9//在宣告语句间的非宣告语句,编译将出现错误讯息intg[10]Forg[2]=0To2g[3]=4Nextg[2]EndMacro_Command5.函数呼叫及参数传递方式a.函数呼叫被呼叫的函数需在函数被呼叫前定义,否则编译会出现错误讯息。Forexample:Macro_Commandmain()intii=Func(i)//编译时将出现函数Func没有被定义的提示WeintekEasyBuilder500Macro使用说明13EndMacro_CommandSubintFunc(inti)inth=9i=9*hreturniEndSubb.参数传递方式(1)通过局部变量传值的方式传递参数(2)通过函数间共享全局变量的方式传递参数6.主函数宏指令程序有且只能有一个主函数,它是宏指令程序开始执行的入口,其形式为:Macro_Command函数名()EndMacro_CommandWeintekEasyBuilder500Macro使用说明14三.与PLC的通信(包括与本地地址LocalBit,LocalWord间的通讯)功能:使用通讯函数实现与PLC的沟通在宏指令程序中,可以使用通讯函数GetData(…)从HMI连接的PLC中取得资料;也可以使用通讯函数SetData(…)把资料送到HMI连接的PLC中,也就是把处理PLC信息的繁杂工作交给了GetData(…)与SetData(…)等操作函数。1.GetData(各种支持的数据类型DestData,CStringstrAddrType,intnAddrOffset,intnDataCount)说明从PLC中读取资料参数说明:DestData用来储存所撷取数据的地址strAddrTypePLC地址类型和编码方式nAddrOffsetPLC地址偏移nDataCount数据项数返回值没有strAddrType的格式为AAA_BBBCCCAAA表示PLC地址类型,例如LB或LW等。BBB表示选择资料格式为Bin或Bcd。WeintekEasyBuilder500Macro使用说明15CCC表示选择的装置为PLC或AUX装置,可选择plc或aux,如果使用的是PLC,可省略plc关键词。举例来说,如果strAddrType等于LB_Binplc(或LB_Bin),表示使用bin格式,对PLC的LB地址进行操作;如果strAddrType等于LW_Binaux,表示使用bin格式,对AUX装置的LW地址进行操作。nAddrOffset的格式为N#AAAAAN表示PLC的站号,范围从0到7。如果站号为0,’N#’可省略;AAAAA则为PLC的地址偏移。举例来说,strAddrOffset如果等于2#10,表示PLC站号为2,PLC的偏移地址为10。因此对GetData(a,4x_Binplc,2#10,1)此句函数的内容可解读为:从站号为2的PLC,读取4x10地址的资料。Forexample:bool