其他函数 1. Beep 语法 Beep () 描述 发出系统警示音。 此函数可发出 800 赫兹,30 毫秒的系统警示音。Buzzer函数与Beep类似。 2. SYNC_TRIG_MACRO 语法 SYNC_TRIG_MACRO(macro_id) 一个执行中的宏指令可以使用此函数利用同步的方式触发执行其它的宏指令,使 用 macro_id 指定被触发的宏指令 ‚编号。 使用此函数的宏指令将暂停执行,直到被触发的宏指令执行完成才会继续执行后 续的命令。 macro_id 可以是常数或使用变量来表示。 例如: macro_command main() char ON = 1, OFF = 0 SetData(ON, ‘Local HMI’, LB, 0, 1) SYNC_TRIG_MACRO(5) // call amacro (its ID is 5) SetData(OFF‚’Local HMI’, LB, 0, 1) end macro_command 3. ASYNC_TRIG_MACRO 语法 ASYNC_TRIG_MACRO(macro_id) 一个执行中的宏指令可以使用此函数,利用异步的方式触发执行其它宏指令,使 用 macro_id 指定被触发的宏指令 ‚编号‛。 宏指偷在使用此函数后将立即执行后续的命令,不需等待被触发的宏指令执行完 成。 macro_id可以是常数或使用变量来表示。 例如: macro_command main() char ON = 1, OFF = 0 SetData(ON, ‘Local HMI’, LB, 0, 1) ASYNC_TRIG_MACRO(5) // calla macro (its ID is 5) SetData(OFF, ‘Local HMI’, LB, 0, 1) end macro_command 4. TRACE 语法 TRACE(format, argument) 一个执行中的 宏指令可以使用此函数,监视变量内容的变化,并打印字符串,以 协助除错。用户应开启 EasyDiagnoser 观看此函数的输出结果。 当 TRACE 函数抓取一个%开头的特殊字符,将同时从 argument 抓取一个参数做 格式化后输出。 Format 代表打印格式,支持 % 开头的特殊字符。特殊字符格式如下,其中方括 号内的字段为可选,粗体字字段为必需: %’flags’ ‚’width’‚’precision’ type 每个字段的意义如下所述: flags (可选): + width (可选): 十进制正整数,指定应预留的字符宽度,不足部份补空格符。 precision (可选): 十进制正整数,指定精确度,以及输出字符数。 ype: C 或 c : 以字符方式输出 d : 以 signed 十进制整数输出 i : 以 signed 十进制整数输出 o : 以 unsigned 八进位整数输出 u : 以 unsigned 十进制整数输出 X 或 x : 以 unsigned 十六进制整数输出 E 或 e : 以科学表示法输出。格式为 d.dddd e‚sign ddd。其中 字段d是十进制数,字段dddd是一至多个十进制数,字段ddd必须是三个十进 制数。sign是+或-。 f : 以单倍精确度浮点数输出。格式为‚dddd.dddd。 Format 字符串最长支持 256 个字符,多出的字符将被忽略。 Argument 部份可写可不写。但一个特殊字符应搭配一个变量。 例如: macro_command main() char c1 = ‘a’ short s1 = 32767 float f1 = 1.234567 TRACE(“The results are”) // 输出:The results are TRACE(“c1 = %c, s1 = %d, f1 = %f”, c1, s1, f1) // 输出:c1 = a, s1= 32767, f1 = 1.234567 end macro_command 5.FindDataSamplingDate 语法 return_value = FindDataSamplingDate(data_log_number, index, year, month, day) 或者FindDataSamplingDate(data_log_number, index, year, month, day) 利用此函数查询资料取样文件的日期。根据所输入的资料取样编号 (data_log_number) 与资料取样文件索引 (index) 可查询该资料取样的日期,依照 年、月、日的顺序写入 year、month、day 的字段中。 资料取样文件的储存方式为:‛保存位置‛ \ ‚取样文件夹名称‛ \ yyyymmdd.dtl。 而资料取样文件索引 (index) 指的是取样文件夹下面所有资料取样文件依文件名 排序后的顺位値 (从0开始)。Index 値越小者,日期越新。例如假设某取样文件夹 下面有四个资料取样文件: 20101210.dtl 20101230.dtl 20110110.dtl 20110111.dtl 则index依序为: 20101210.dtl ->index 为 3 20101230.dtl ->index 为 2 20110110.dtl ->index 为 1 20110111.dtl ->index 为 0 当成功搜寻到所欲查询的资料取样文件时,将回传 1 至 return_value,否则将回 传 0。 data_log_number 与 index 可以为常数或是变量,但 year、month、day与 return_value 必须为变量。 return_value 为可选。 例如: macro_command main() short data_log_number = 1, index = 2, year, month, day short success // 若存在一资料取样文件 20101230.dtl,其资料取样编号为 1,文件索引为 2 // 则success == 1,year == 2010,month == 12,day == 30 success = FindDataSamplingDate(data_log_number, index, year, month,day) end macro_command 6.FindDataSamplingIndex 语法 return_value = FindDataSamplingIndex (data_log_number,year, month, day, index) 或者FindDataSamplingIndex(data_log_number, year, month, day, index) 利用此函数查询资料取样文件的文件索引值。根据所输入的资料取样编号 (data_log_number) 与日期可查询该资料取样文件的文件索引,并将其写入 index。 year、 month、day三个字段依序代表年、月、日,其输入格式为 YYYY (年)、MM (月)、 DD (日)。 资料取样文件的储存方式为:‛保存位置‛ \ ‚取样文件夹名称‛ \yyyymmdd.dtl。 而资料取样文件索引 (index) 指的是取样文件夹下面所有资料取样文件依文件名排序 后的顺位値 (从 0 开始)。Index 値越小者,日期越新。例如假设某取样文件夹下面 有四个资料取样文件: 20101210.dtl 20101230.dtl 20110110.dtl 20110111.dtl 则 index 依序为: 20101210.dtl -> index 为 3 20101230.dtl -> index 为 2 20110110.dtl -> index 为 1 20110111.dtl -> index 为 0 当成功搜寻到所欲查询的资料取样文件时,将回传 1 至 return_value,否则将回传 0。 data_log_number 与 year、month、day 可以为常数或是变量,但 index 与 return_value 必须为变量。 return_value 为可选。 例如: macro_command main() short data_log_number = 1, year = 2010, month = 12, day = 10, index short success // 若存在一资料取样文件 20101210.dtl,其资料取样编号为 1,文件索引为 2 // 则success == 1,index == 2 success = FindDataSamplingIndex (data_log_number, year, month, day,index) end macro_command 7. FindEventLogDate 语法 return_value = FindEventLogDate (index, year,month, day) 或者FindEventLogDate(index, year, month, day) 利用此函数查询事件登录文件的日期。根据所输入的事件登录文件索引 (index)可 查询该事件登录的日期,依照年、月、日的顺序写入 year、month、day的字段中。 事件登录文件索引 (index) 指的是指定的保存位置 (HMI、SD 卡或 USB)下事件登 录文件依档名排序后的顺位値 (从 0 开始)。Index 値越小者,日期越新。例如假 设有四个事件登录档: EL_20101210.evt EL_20101230.evt EL_20110110.evt EL_20110111.evt 则index依序为: EL_20101210.evt -> index为3 EL_20101230.evt -> index为2 EL_20110110.evt -> index为1 EL_20110111.dtl -> index为0 当成功搜寻到所欲查询的事件登录档时,将回传 1 至return_value,否则将回传0。 Index 可以为常数或是变量,但 year、month、day与return_value 必须为变量。 return_value 为可选。 例如: macro_command main() short index = 1, year, month, day short success // 若存在一事件登录档 EL_20101230.evt,文件索引为 1 // 则 success == 1,year == 2010,month == 12,day == 30 success = FindEventLogDate (index, year, month, day) end macro_command 8. FindEventLogIndex 语法 return_value = FindEventLogIndex (year,month, day, index) 或者FindEventLogIndex(year, month, day, index) 利用此函数查询事件登录文件的文件索引值。根据所输入的日期可查询该事件登 录文件的文件索引,并将其写入 index。year、month、day 三个字段依序代表年、 月、日,其输入格式为 YYYY (年)、MM (月)、DD (日)。 事件登录文件索引 (index) 指的是指定的保存位置 (HMI、SD 卡或 USB)下事件登 录文件依档名排序后的顺位値 (从 0 开始)。Index 値越小者,日期越新。例如假 设有四个事件登录档: EL_20101210.evt EL_20101230.evt EL_20110110.evt EL_20110111.evt 则 index 依序为: EL_20101210.evt ->index 为 3 EL_20101230.evt ->index 为 2 EL_20110110.evt ->index 为 1 EL_20110111.dtl ->index 为 0 当成功搜寻到所欲查询的事件登录档时,将回传 1 至 return_value,否则将回传0。 year、month、day 可以为常数或是变量,但 index 与 return_value 必须为变量。 return_value 为可选。 例如: macro_command main() short year = 2010, month = 12, day = 10, index short success // 若存在一事件登录档 EL_20101210.evt,文件索引为 2 // 则success == 1,index == 2 success = FindEventLogIndex (year, month, day, index) end macro_command 剩余函数为配方处理函数,当前版本软件不支持,暂不演示。 9.RecipeGetData 语法 RecipeGetData (destination, recipe_address,record_ID) 取得配方中的资料。所取得的数据存放在destination且必须为变量。recipe_addres 由配方名称与项目名称组成:"recipe_name.item_name"。record_ID指定欲取得配 方中的第几笔数据,也就是数据列编号。 例如: macro_commandmain() int data= 0 charstr[20] intrecordID boolresult recordID= 0 result =RecipeGetData(data, "TypeA.item_weight", recordID) // 从配方 "TypeA" 中取得第0笔,且item name为 "item_weight" 的资料 recordID= 1 result =RecipeGetData(str[0], "TypeB.item_name", recordID) // 从配方 "TypeB" 中取得第1笔,且 item name为 "item_name" 的资料 endmacro_command 10.RecipeQuery 语法 RecipeQuery (SQL command, destination) 通过SQL语句,对配方中的数据进行查询。查询结果的数据笔数存放在destination, 必须为变量。SQLcommand 的部份可为静态文字或传入字符数组,例如: RecipeQuery(‚SELECT* FROM TypeA‛, destination) 或 RecipeQuery(sql[0],destination) SQL 语句必须以 ‚SELECT * FROM‛ 开头,后面接配方名称及查询条件。 例如: macro_commandmain() int total_row= 0 charsql[100] = "SELECT * FROM TypeB" boolresult result =RecipeQuery("SELECT * FROM TypeA", total_row) // 查询配方 "TypeA"。查询结果的数据笔数存放在 total_row. result =RecipeQuery(sql[0], total_row) // 查询配方 "TypeB"。查询结果的数据笔数存放在 total_row. end macro_command 11.RecipeQueryGetData 语法 RecipeQueryGetData (destination,recipe_address, result_row_no) 描述 取得 RecipeQuery 的查询结果。呼叫此函数前必须先呼叫 RecipeQuery,且 recipe_address 中需指定与 RecipeQuery 相同的配方名称。 result_row_no 指定欲取得查询结果中的第几笔数据。 例如: macro_commandmain() int data= 0 inttotal_row = 0 introw_number = 0 boolresult_query boolresult_data result_query= RecipeQuery("SELECT * FROM TypeA", total_row) // 查询配方 "TypeA"。查询结果的数据笔数存放在 total_row. if(result_query) then forrow_number = 0 to total_row - 1 result_data= RecipeQueryGetData(data, "TypeA.item_weight", row_number) nextrow_number end if endmacro_command 12.RecipeQueryGetRecordID 语法 RecipeQueryGetRecordID (destination,result_row_no) 取得 RecipeQuery 查询结果的数据列编号。呼叫此函数前必须先呼叫 RecipeQuery。 result_row_no 指定欲取得查询结果中的第几笔数据的数据列编号,并将资料列编 号写入 destination。 例如: macro_commandmain() intrecorded = 0 inttotal_row = 0 introw_number = 0 boolresult_query boolresult_id result_query= RecipeQuery("SELECT * FROM TypeA", total_row) // 查询配方 "TypeA"。查询结果的数据笔数存放在 total_row. if(result_query) then forrow_number = 0 to total_row - 1 result_id= RecipeQueryGetRecordID(recordID, row_number) nextrow_number end if endmacro_command 13.RecipeSetData 语法 RecipeSetData(source, recipe_address,record_ID) 将数据写入配方数据库中。如果成功将传回True,否则将传回 False。 recipe_address由配方名称与项目名称组成:"recipe_name.item_name"。 record_ID指定欲修改配方中的第几笔数据,也就是数据列编号。 例如: macro_commandmain() intdata=99 charstr[20]="abc" intrecordID boolresult recordID= 0 result =RecipeSetData(data, "TypeA.item_weight", recordID) // setdata to recipe "TypeA", where item name is "item_weight"and the recordID is 0. recordID= 1 result =RecipeSetData(str[0], "TypeB.item_name", recordID) // setdata to recipe "TypeB", where item name is "item_name" andthe record ID is 1. endmacro_command
|