在(zai)一(yi)些(xie)大(da)型(xing)的(de)生(sheng)產(chan)管(guan)理(li)係(xi)統(tong)中(zhong),往(wang)往(wang)都(dou)會(hui)應(ying)用(yong)到(dao)人(ren)工(gong)錄(lu)入(ru)曆(li)史(shi)數(shu)據(ju)功(gong)能(neng),從(cong)而(er)對(dui)生(sheng)產(chan)數(shu)據(ju)進(jin)行(xing)係(xi)統(tong)的(de)管(guan)理(li),這(zhe)部(bu)分(fen)的(de)數(shu)據(ju)不(bu)能(neng)夠(gou)在(zai)儀(yi)表(biao)中(zhong)采(cai)集(ji)到(dao),隻(zhi)能(neng)通(tong)過(guo)人(ren)為(wei)的(de)填(tian)寫(xie),這(zhe)部(bu)分(fen)數(shu)據(ju)不(bu)但(dan)要(yao)存(cun)儲(chu)到(dao)客(ke)戶(hu)端(duan),還(hai)要(yao)上(shang)傳(chuan)到(dao)服(fu)務(wu)器(qi)端(duan)進(jin)行(xing)顯(xian)示(shi),這(zhe)樣(yang)就(jiu)會(hui)引(yin)發(fa)一(yi)個(ge)關(guan)鍵(jian)問(wen)題(ti):如何做到服務器端與客戶端的數據同步?下麵提供三種解決方案。
第一種:服務器端直接調取客戶端數據。
這種方案製作過程比較簡單,隻需要在服務器端針對於相應的客戶端建立一個數據源,選擇遠程節點,並將 IP 指向客戶端即可。如下圖所示。
其中:主機名 / 地址為客戶端的 IP 地址。當這一切配置好之後,隻需在自由報表中調用 GetHisDataEx() 函數,在運行的情況下就可以調取到客戶端的曆史數據。 GetHisDataEx() 函數的聲明如下:
GetHisDataEx(string DataSource,string VarName,int StartTime,int MilliSecond) 。
其中: DataSource 要填寫相應客戶端的數據源名稱, VarName 要(yao)填(tian)寫(xie)該(gai)數(shu)據(ju)源(yuan)下(xia)的(de)數(shu)據(ju)庫(ku)變(bian)量(liang)名(ming)稱(cheng)。這(zhe)樣(yang)當(dang)係(xi)統(tong)運(yun)行(xing)時(shi),在(zai)服(fu)務(wu)器(qi)端(duan)就(jiu)可(ke)以(yi)調(tiao)取(qu)到(dao)客(ke)戶(hu)端(duan)的(de)數(shu)據(ju)了(le)。但(dan)這(zhe)中(zhong)方(fang)案(an)存(cun)在(zai)一(yi)個(ge)弊(bi)端(duan),即(ji)當(dang)客(ke)戶(hu)端(duan)停(ting)止(zhi)運(yun)行(xing)或(huo)著(zhe)客(ke)戶(hu)端(duan)與(yu)服(fu)務(wu)器(qi)端(duan)通(tong)訊(xun)終(zhong)端(duan)時(shi),那(na)麼(me)在(zai)服(fu)務(wu)器(qi)端(duan)則(ze)看(kan)不(bu)到(dao)客(ke)戶(hu)端(duan)的(de)任(ren)何(he)數(shu)據(ju)。
第二種:客戶端直接向服務器端插入曆史數據。
這種方案與第一種方案基本類似,需要在客戶端建立一個數據源,並指向服務器端,客戶端在保存曆史數據時調用 InsertHisDataEx() 函數,該函數的聲明如下:
InsertHisDataEx (string DataSource,string VarName,real Data,int StartTime,int MilliSec) 。
其中, DataSource 要填寫相應服務器端的數據源名稱, VarName 要(yao)填(tian)寫(xie)該(gai)數(shu)據(ju)源(yuan)下(xia)的(de)數(shu)據(ju)庫(ku)變(bian)量(liang)名(ming)稱(cheng)。這(zhe)樣(yang)在(zai)客(ke)戶(hu)端(duan)與(yu)服(fu)務(wu)器(qi)端(duan)通(tong)訊(xun)正(zheng)常(chang)的(de)狀(zhuang)態(tai)下(xia),保(bao)存(cun)動(dong)作(zuo)執(zhi)行(xing)時(shi),客(ke)戶(hu)端(duan)就(jiu)會(hui)直(zhi)接(jie)向(xiang)服(fu)務(wu)器(qi)端(duan)插(cha)入(ru)曆(li)史(shi)數(shu)據(ju)。服(fu)務(wu)器(qi)端(duan)在(zai)報(bao)表(biao)中(zhong)調(tiao)用(yong) GetHisDataEx() hanshujiukeyitiaoqudaobendixiangyingdeshuju。zhezhongfangandebiduanzeshizengdalekehuduandefuhe,huidaozhikehuduanyunxingsudubianman。youdianzeshizaifuwuqiduanhekehuduandoucunyoushuju,xiangdangyuzuoleyicishujubeifen。
第三種:客戶端觸發服務器端自行保存曆史數據。
這(zhe)種(zhong)方(fang)案(an)製(zhi)作(zuo)過(guo)程(cheng)相(xiang)對(dui)於(yu)前(qian)兩(liang)種(zhong)要(yao)複(fu)雜(za)一(yi)些(xie),首(shou)先(xian)要(yao)在(zai)服(fu)務(wu)器(qi)端(duan)建(jian)立(li)一(yi)個(ge)數(shu)據(ju)源(yuan)指(zhi)向(xiang)客(ke)戶(hu)端(duan),並(bing)在(zai)服(fu)務(wu)器(qi)端(duan)建(jian)立(li)相(xiang)應(ying)的(de)點(dian)關(guan)聯(lian)到(dao)客(ke)戶(hu)端(duan)的(de)點(dian)上(shang)。其(qi)次(ci),在(zai)服(fu)務(wu)器(qi)端(duan)數(shu)據(ju)庫(ku)全(quan)局(ju)腳(jiao)本(ben)中(zhong)編(bian)寫(xie)一(yi)段(duan)存(cun)儲(chu)這(zhe)些(xie)點(dian) PV 值的曆史數據的腳本,通過一個標誌位觸發存儲動作。客戶端在保存曆史數據時要把相應點的 PV 值也做修改,這樣服務器上做了相應關聯的點的 PV zhiyehuigenzhezuogaibian。zaitongguokehuduanchufafuwuqiduandebaocunbiaozhiwei,fuwuqiduanjiuhuizixingdejiangzhebufenshujucunchuxialai,zaiyunxingdezhuangtaixiatongguobaobiaotiaoyong GetHisDataEx() 把ba曆li史shi數shu據ju調tiao取qu出chu來lai即ji可ke。還hai可ke以yi在zai數shu據ju源yuan高gao級ji選xuan項xiang中zhong把ba數shu據ju故gu障zhang恢hui複fu勾gou選xuan上shang,如ru下xia圖tu所suo示shi。即ji使shi因yin通tong訊xun中zhong斷duan,客ke戶hu端duan無wu法fa觸chu發fa服fu務wu器qi端duan的de保bao存cun標biao誌zhi而er導dao致zhi兩liang端duan數shu據ju不bu同tong步bu,在zai通tong訊xun恢hui複fu時shi,客ke戶hu端duan也ye會hui自zi動dong的de把ba這zhe部bu分fen數shu據ju長chang傳chuan到dao服fu務wu器qi中zhong,這zhe樣yang就jiu更geng加jia全quan麵mian的de保bao證zheng了le兩liang端duan數shu據ju的de同tong步bu性xing。
disanzhongfanganwanquandejiejueledierzhongfanganzhongzengjialekehuduanfuhedebiduan,yejiejuelediyizhongfanganzhongtongxunzhongduanshifuwuqiduankanbudaozhiqianlishishujudebiduan,tongshihaijubeileqianliangzhongfanganzhongbujubeideyoushi:故障數據恢複,因此在類似這種的案例中,推薦使用第三種方案。