控制邏輯
??通過(guò)控制邏輯功能可按照不同的判斷條件對(duì)所關(guān)聯(lián)的點(diǎn)進(jìn)行不同操作,控制邏輯分為四種類型:?jiǎn)?dòng)、循環(huán)、定時(shí)和數(shù)據(jù)改變??刂七壿嬛С謏avascript腳本語(yǔ)言。
??在控制模式下,點(diǎn)擊《控制邏輯》,在對(duì)應(yīng)的類型下新建控制邏輯

《啟動(dòng)》邏輯
??運(yùn)行程序啟動(dòng)時(shí)會(huì)執(zhí)行此腳本,目前僅支持“運(yùn)行狀態(tài)”中的“啟動(dòng)前”類型。
??當(dāng)需要給變量設(shè)置一個(gè)固定的初始值時(shí)可以通過(guò)”啟動(dòng)”邏輯中的”運(yùn)行前”配置變量的初始值。
??點(diǎn)擊《邏輯控制》,《啟動(dòng)》,《新建邏輯》,

??◆運(yùn)行狀態(tài):目前僅支持“運(yùn)行前”
??◆描述:對(duì)此邏輯的的描述
??◆變量名:變量名為自定義,變量名命名僅支持以字母為開頭,并且除下劃線外不允許有其它符號(hào),在填寫變量名時(shí)需要注意
??◆點(diǎn)名:勾選要關(guān)聯(lián)的系統(tǒng)點(diǎn)
??◆代碼:編寫控制邏輯代碼
??填寫好相應(yīng)的信息點(diǎn)擊《創(chuàng)建》,然后《重啟》生效
《循環(huán)》邏輯
??此功能是按照循環(huán)間隔時(shí)間來(lái)實(shí)現(xiàn)控制邏輯的執(zhí)行,循環(huán)間隔以秒(s)為最小間隔時(shí)間。
描述為“1”和不為“1”是兩種編寫模式。
當(dāng)《描述》不為《1》時(shí)
??點(diǎn)擊《控制邏輯》下的《循環(huán)》,然后點(diǎn)擊《新建邏輯》

??◆名稱:自定義
??◆描述:對(duì)此邏輯的說(shuō)明描述
??◆循環(huán)間隔(s):腳本執(zhí)行間隔時(shí)間,以秒為單位,最小可以設(shè)置1秒
??◆變量名:變量名為自定義,變量名命名僅支持以字母為開頭,并且除下劃線外不允許有其它符號(hào),在填寫變量名時(shí)需要注意
??◆點(diǎn)名:選擇本系統(tǒng)中數(shù)據(jù)點(diǎn)
??◆代碼:填寫要執(zhí)行的腳本代碼
??以上信息配置完成。點(diǎn)擊《創(chuàng)建》,然后《重啟》生效

??上圖表示每隔2秒對(duì)點(diǎn)1和點(diǎn)2賦值一次,點(diǎn)自增5.
當(dāng)《描述》配置為《1》時(shí)
??可使用JavaScript語(yǔ)言編寫,并且支持JavaScript的函數(shù)庫(kù),同時(shí)提供了兩個(gè)函數(shù)可供使用:
???獲取值函數(shù):qso.GetValue(‘采集點(diǎn)名’)
???返回值:數(shù)值
???設(shè)置值函數(shù):qso.SetValue(‘采集點(diǎn)名’,數(shù)值);
???返回值:無(wú)
???獲取文件內(nèi)容函數(shù):qso.ReadFile(‘文件名’);
???返回值:文件內(nèi)容
???獲取點(diǎn)數(shù)值是否有效:qso.GetValid(‘采集點(diǎn)名’);
???返回值:數(shù)據(jù)點(diǎn)數(shù)值有效返回true,數(shù)據(jù)點(diǎn)數(shù)值無(wú)效返回false
???延時(shí)函數(shù):qso.Delay(毫秒);
???返回值:無(wú)

??qso.GetValue('Serial1.設(shè)備1@電壓');,可以獲取電壓值;
??qso.SetValue('Serial1.設(shè)備1@電流',2);,可設(shè)置電流值為2。
???◆名稱:自定義
???◆描述:必須設(shè)置為“1”
???◆循環(huán)間隔(s):腳本執(zhí)行間隔時(shí)間,以秒為單位,最小可以設(shè)置1秒
???◆變量名:無(wú)需配置
???◆點(diǎn)名:無(wú)需配置
???◆代碼:填寫要執(zhí)行的腳本代碼
??配置完上述點(diǎn)擊《創(chuàng)建》,然后點(diǎn)擊《重啟》生效

??上圖表示每30秒執(zhí)行一次電表累加計(jì)算腳本
《定時(shí)》邏輯
??此功能是在固定的時(shí)間執(zhí)行某個(gè)邏輯腳本
??描述為“1”和不為“1”是兩種編寫模式
當(dāng)《描述》不為《1》時(shí)
??點(diǎn)擊《控制邏輯》下的《定時(shí)》,然后點(diǎn)擊《新建邏輯》

??◆名稱:自定義
??◆描述:對(duì)此邏輯的說(shuō)明描述
??◆時(shí)間:填寫執(zhí)行此腳本的時(shí)刻,格式為 xxxx-xx-xx xx:xx:xx, “x”代表不指定,
??◆變量名:變量名為自定義,變量名命名僅支持以字母為開頭,并且除下劃線外不允許有其它符號(hào),在填寫變量名時(shí)需要注意
??◆點(diǎn)名:選擇本系統(tǒng)中數(shù)據(jù)點(diǎn)
??◆代碼:填寫要執(zhí)行的腳本代碼
??以上信息配置完成。點(diǎn)擊《創(chuàng)建》,然后《重啟》生效

??以上表示點(diǎn)1每天00點(diǎn)賦值100,點(diǎn)2每天00點(diǎn)自增1
當(dāng)《描述》配置為《1》時(shí)
??點(diǎn)擊《控制邏輯》下的《定時(shí)》,然后點(diǎn)擊《新建邏輯》

??當(dāng)“描述”配置為“1”時(shí)可使用JavaScript語(yǔ)言編寫,并且支持js的函數(shù)庫(kù),同時(shí)提供了兩個(gè)函數(shù):
???獲取值函數(shù):qso.GetValue(‘采集點(diǎn)名’);
???返回值:數(shù)值
???設(shè)置值函數(shù):qso.SetValue(‘采集點(diǎn)名’,數(shù)值);
???返回值:無(wú)
???獲取文件內(nèi)容函數(shù):qso.ReadFile(‘文件名’);
???返回值:文件內(nèi)容
???獲取點(diǎn)數(shù)值是否有效:qso.GetValid(‘采集點(diǎn)名’);
???返回值:數(shù)據(jù)點(diǎn)數(shù)值有效返回true,數(shù)據(jù)點(diǎn)數(shù)值無(wú)效返回false
???延時(shí)函數(shù):qso.Delay(毫秒);
???返回值:無(wú)

??qso.GetValue('Serial1.設(shè)備1@電壓')函數(shù)可以獲取電壓值;
??qso.SetValue('Serial1.設(shè)備1@電流',2)可設(shè)置電流值為2。
???◆名稱:自定義
???◆描述:必須設(shè)置為“1”
???◆時(shí)間:填寫執(zhí)行此腳本的時(shí)刻,格式為 xxxx-xx-xx xx:xx:xx, “x”代表不指定,
???◆變量名:無(wú)需配置
???◆點(diǎn)名:無(wú)需配置
???◆代碼:填寫要執(zhí)行的腳本代碼
??以上信息配置完成。點(diǎn)擊《創(chuàng)建》,然后《重啟》生效
《數(shù)據(jù)變化》邏輯
??此功能是根據(jù)某個(gè)變量的實(shí)時(shí)數(shù)據(jù)變換為條件,執(zhí)行某個(gè)邏輯腳本
??描述為“1”和不為“1”是兩種編寫模式
當(dāng)《描述》配置不為《1》時(shí)
??點(diǎn)擊《控制邏輯》下的《數(shù)據(jù)變化》,然后點(diǎn)擊《新建邏輯》

??◆名稱:自定義
??◆描述:對(duì)此邏輯的說(shuō)明描述
??◆變量名:變量名為自定義,變量名命名僅支持以字母為開頭,并且除下劃線外不允許有其它符號(hào),在填寫變量名時(shí)需要注意
??◆代碼:填寫要執(zhí)行的腳本代碼
??以上信息配置完成。點(diǎn)擊《創(chuàng)建》,然后《重啟》生效
??注:此方法不推介使用,數(shù)據(jù)改變?cè)俨僮鲾?shù)據(jù),會(huì)造成死循環(huán)。
當(dāng)《描述》為《1》時(shí)
??點(diǎn)擊《控制邏輯》下的《數(shù)據(jù)變化》,然后點(diǎn)擊《新建邏輯》

??當(dāng)“描述”配置為“1”時(shí)可使用JavaScript語(yǔ)言編寫,并且支持js的函數(shù)庫(kù),同時(shí)提供了兩個(gè)函數(shù):
???獲取值函數(shù):qso.GetValue(‘采集點(diǎn)名’);
???返回值:數(shù)值
???設(shè)置值函數(shù):qso.SetValue(‘采集點(diǎn)名’,數(shù)值);
???返回值:無(wú)
???獲取文件內(nèi)容函數(shù):qso.ReadFile(‘文件名’);
???返回值:文件內(nèi)容
???獲取點(diǎn)數(shù)值是否有效:qso.GetValid(‘采集點(diǎn)名’);
???返回值:數(shù)據(jù)點(diǎn)數(shù)值有效返回true,數(shù)據(jù)點(diǎn)數(shù)值無(wú)效返回false
???延時(shí)函數(shù):qso.Delay(毫秒);
???返回值:無(wú)

??var dianliu = qso.GetValue('Net1.廠區(qū)配電數(shù)據(jù).廠區(qū)配電設(shè)備@總進(jìn)線柜A相電流');
??if(dianliu >= 10){qso.SetValue('Net1.廠區(qū)配電數(shù)據(jù).廠區(qū)配電設(shè)備@總進(jìn)線柜斷路器',1);
◆名稱:自定義
◆描述:必須設(shè)置為“1”
◆變量名:無(wú)需配置
◆點(diǎn)名:選擇本系統(tǒng)中此邏輯條件的變化數(shù)據(jù)點(diǎn),可以多選
◆代碼:填寫要執(zhí)行的腳本代碼
??以上信息配置完成。點(diǎn)擊《創(chuàng)建》,然后《重啟》生效

??上述配置表示,電流值發(fā)生變化執(zhí)行邏輯腳本,當(dāng)電流值大于10時(shí)斷開斷路器
常見(jiàn)控制邏輯腳本問(wèn)題
基于ECMAScript的腳本
??基于ECMAScript腳本語(yǔ)言,使用ECMA-262標(biāo)準(zhǔn)。微軟的JScript和網(wǎng)景的javascript也是基于ECMAScript標(biāo)準(zhǔn),有關(guān) ECMAScript的概述,可以查看ECMAScript標(biāo)準(zhǔn)。如果你不熟悉ECMAScript語(yǔ)言,有一些指導(dǎo)和書籍,例如JavaScript: The Definitive Guide.
??http://www.ecma-international.org/ecma-262/
Mathmax的使用
??在使用Math.max()前最好先將數(shù)據(jù)做Number() 計(jì)算,把對(duì)象的值轉(zhuǎn)換為數(shù)字。
??要確保參數(shù)是數(shù)字類型的,如果不確定是不是數(shù)字需要先將參數(shù)做Number()后再使用Math.max()
