Android連接OPC服務器知識總結(openscada方法)

1决乎、OPC解釋

-一系列接口违柏、方法和屬性的標準集
基于OLE吱型、COM存筏、DCOM技術碍岔、XML痴施,采用客戶端/服務器結構
將通訊協(xié)議與設備/應用隔離

2擎厢、使用openscada連接OPC

-OPC組成對象:
    服務器 OPC Server
    組對象 Group
    項對象 Item
    
-openscada開源項目
    ConnectionInformation中:
    *Host 本地主機/網絡主機IP
    *Domain 域(默認localhost)
    *User 用戶名
    *Password 用戶登錄密碼
    *Clsid 應用在注冊表中相對應的CLSID值
    *Grogid 應用在注冊表中對應的程序名稱
    Clsid和Grogid只需設置一個,優(yōu)先Clsid

3辣吃、開發(fā)過程

1)設置服務器信息

        private static String host = "172.16.31.2";
        private static String user = "admin";
        private static String passwd = "123456";
        private static String progId = "S7300ET200M station_1"

2)通過ServerList類獲取服務端所有OPCServer

        ServerList serverList = new ServerList(host,user,passwd);
        showAllOPCServer(serverList);

3)創(chuàng)建ConnectionInformation類

        final ConnectionInformation ci = new ConnectionInformation();
        ci.setHost(host);
        ci.setClsid(serverList.getClsidFromProgId("S7300ET200M station_1");
        ci.setUser(user);
        ci.setPassword(passwd);

4)創(chuàng)建Server類并連接动遭,需要處理connect方法可能拋出的異常

        ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();  
        Server server = new Server(ci, exec);  
        server.connect();

假如兩次訪問間隔較長,可以通過AutoReconnectController類來自動重新創(chuàng)立連接

        ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();  
        Server server = new Server(ci, exec);  
        AutoReconnectController autoReconnectController = new AutoReconnectController ( server );  
        autoReconnectController.connect();

5)Utgard的數(shù)據(jù)訪問方式

直接通過item的read/write方法或者使用AccessBase(讀取數(shù)據(jù))
需要注意的是神得,不管采用哪一種方式厘惦,返回結果都是通過ItemState
類來獲取,通過調用ItemState的getValue方法可以獲得訪問結果哩簿,
返回結果是JIVarant類型的宵蕉。

A:通過item的read/write方法

    /** 
    * 使用Item類write方法寫入數(shù)據(jù),并直接通過Item的read方法同步讀數(shù)據(jù) 
    * @throws Exception 
    */  
    public static void syncWrite(Server server) throws Exception{  
        final String itemId="Bucket Brigade.Int4";  
        Group group = server.addGroup("test");  
        Item item = group.addItem(itemId); //get item for writing  
  
        //第一次讀  
        ItemState itemState = item.read(true);  
        System.out.println("<<< first read: " + itemState.getValue());  
  
        final JIVariant value = new JIVariant(100);  
        try {  
            System.out.println(">>> writing value: " + value.getObjectAsInt());  
            item.write(value);  
        } catch (JIException e) {  
            e.printStackTrace();  
        }  
  
        itemState = item.read(true);  
        System.out.println("<<< after writing: " + itemState.getValue());  
    }  

B:使用AccesBase類(讀取數(shù)據(jù))

AccesBase接口有兩個實現(xiàn)類:SyncAccess類和Async20Access類

a)同步訪問SyncAccess
    /** 
    * 使用SyncAccess類隔時間段地進行同步讀取數(shù)據(jù) 
    * SyncAccess實現(xiàn)了Runnable接口节榜,實際上通過另一個線程進行同步讀 
    * @throws Exception 
    */  
    public static void syncRead(Server server) throws Exception{  
        final String itemId="Random.Int4";  
        //每隔1秒同步讀  
        AccessBase access = new SyncAccess(server,1000);  
        access.addItem(itemId, new DataCallback() {  
      
            @Override  
            public void changed(Item item, ItemState itemState) {  
                System.out.println(itemState);  
            }  
      
        });  
  
        // start reading  
        access.bind();  
        // wait a little bit  
        Thread.sleep(5*1000);  
        // stop reading  
        access.unbind();  
    }

        b)異步訪問Async20Access類
        
    /** 
    * 使用Async20Access類隔時間段地進行異步讀取數(shù)據(jù) 
    * Async20Access實現(xiàn)了IOPCDataCallback接口羡玛,基于事件回調的實現(xiàn) 
    * @throws Exception 
    */  
    public static void asyncRead(Server server) throws Exception{  
        final String itemId = "Random.Int4";  
        //第三個參數(shù)用于設置初始化時是否執(zhí)行訪問  
        AccessBase access = new Async20Access(server, 1000, false);  
        access.addItem(itemId, new DataCallback(){  

            @Override  
            public void changed(Item item, ItemState itemState) {  
                System.out.println(">>> Asynchronized read: value="   
                + itemState.getValue());  
            }  
      
        });  
        access.bind();  
        Thread.sleep(5*1000);  
        access.unbind();  
    }  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宗苍,隨后出現(xiàn)的幾起案子稼稿,更是在濱河造成了極大的恐慌,老刑警劉巖讳窟,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件让歼,死亡現(xiàn)場離奇詭異,居然都是意外死亡挪钓,警方通過查閱死者的電腦和手機是越,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌上,“玉大人倚评,你說我怎么就攤上這事浦徊。” “怎么了天梧?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵盔性,是天一觀的道長。 經常有香客問我呢岗,道長冕香,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任后豫,我火速辦了婚禮悉尾,結果婚禮上,老公的妹妹穿的比我還像新娘挫酿。我一直安慰自己构眯,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布早龟。 她就那樣靜靜地躺著惫霸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葱弟。 梳的紋絲不亂的頭發(fā)上壹店,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音芝加,去河邊找鬼硅卢。 笑死,一個胖子當著我的面吹牛妖混,可吹牛的內容都是我干的老赤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼制市,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弊予?” 一聲冷哼從身側響起祥楣,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汉柒,沒想到半個月后误褪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡碾褂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年兽间,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片正塌。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘀略,死狀恐怖恤溶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情帜羊,我是刑警寧澤咒程,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站讼育,受9級特大地震影響帐姻,放射性物質發(fā)生泄漏。R本人自食惡果不足惜奶段,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一饥瓷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痹籍,春花似錦呢铆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼砂,卻和暖如春逆航,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渔肩。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工因俐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人周偎。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓抹剩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓉坎。 傳聞我的和親對象是個殘疾皇子澳眷,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容