日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

基于局域網(wǎng)絡(luò)應(yīng)用Java語(yǔ)言完成遠(yuǎn)程自動(dòng)選擇終端的控制

基于局域網(wǎng)絡(luò)應(yīng)用Java語(yǔ)言完成遠(yuǎn)程自動(dòng)選擇終端的控制

更新時(shí)間:2022-05-01 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

摘 要:在簡(jiǎn)要介紹Java語(yǔ)言和PCL839卡的基礎(chǔ)上,通過(guò)編程來(lái)實(shí)現(xiàn)對(duì)智能節(jié)點(diǎn)PCL839卡的遠(yuǎn)程控制.
  關(guān)鍵詞:ava;PCL839;遠(yuǎn)程控制;本地方法

Remote Controlling the Intelligent Terminal by Java Based on LAN

Zou Huajun, Zeng Yuxing
(Dept. of Mechanical & Electronical Engineering, Guangdong Industrial University, Guangzhou 510090)

  Abstract Based on briefly introducing Java and PCL839 card, a method of remote controlling the intelligent terminal (PCL 839 card) is describe.
  Key word Java; PCL839; Remote control; Mative Method

  當(dāng)前Internet的技術(shù)發(fā)展異常迅猛,對(duì)Internet技術(shù)的利用也如火如荼。許多集科研與生產(chǎn)為一體的部門本身就存在著一個(gè)網(wǎng)絡(luò),然而對(duì)這些網(wǎng)絡(luò)的利用還遠(yuǎn)遠(yuǎn)沒(méi)有充分發(fā)揮Internet網(wǎng)絡(luò)的潛力,尤其在控制領(lǐng)域。目前計(jì)算機(jī)界流行著SUN公司的一句名言"網(wǎng)絡(luò)就是計(jì)算機(jī)",而隨著控制領(lǐng)域應(yīng)用網(wǎng)絡(luò)技術(shù)的進(jìn)一步研究,又迎來(lái)了新的一句名言"網(wǎng)絡(luò)就是控制"。本文正是以此為起點(diǎn),在現(xiàn)有局域網(wǎng)絡(luò)的基礎(chǔ)上,應(yīng)用Java編程語(yǔ)言,實(shí)現(xiàn)對(duì)智能或可編程遠(yuǎn)程終端的控制。下面以可編程的PCL839卡為例,介紹實(shí)現(xiàn)其遠(yuǎn)程控制的一種方案。

1 Java語(yǔ)言

  Java語(yǔ)言是SUN公司于1995年5月推出的新一代面向?qū)ο蟮挠?jì)算機(jī)通用編程語(yǔ)言,是繼WWW之后又一引起世界轟動(dòng)的產(chǎn)品。Java語(yǔ)言的特點(diǎn)是跨平臺(tái)和強(qiáng)大的網(wǎng)絡(luò)編程功能。在Java語(yǔ)言誕生之前,Internet已存在,所以Java語(yǔ)言本身就封裝了大量進(jìn)行網(wǎng)絡(luò)編程的類庫(kù),使得網(wǎng)絡(luò)編程功能強(qiáng)大,同時(shí)又簡(jiǎn)化了網(wǎng)絡(luò)編程的操作。因此利用Java語(yǔ)言可以開(kāi)發(fā)出功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序。

2 PCL839卡

  研華公司的PCL839卡是一種高速步進(jìn)電機(jī)驅(qū)動(dòng)卡,采用光隔保護(hù),抗干擾能力強(qiáng),具有數(shù)字I/O口,可以采樣其他現(xiàn)場(chǎng)數(shù)據(jù)等。它簡(jiǎn)化了步進(jìn)電機(jī)的控制。PCL839卡內(nèi)部有3個(gè)獨(dú)立的脈沖發(fā)生器,能夠同步產(chǎn)生脈沖控制3個(gè)電機(jī),每個(gè)脈沖發(fā)生器每秒可以產(chǎn)生1至16k個(gè)脈沖。

3 遠(yuǎn)程控制

3.1 遠(yuǎn)程控制機(jī)和現(xiàn)場(chǎng)工控機(jī)的互連
  在現(xiàn)有局域網(wǎng)絡(luò)基礎(chǔ)上構(gòu)成的互連系統(tǒng)如圖1。實(shí)現(xiàn)遠(yuǎn)程控制,首先必須實(shí)現(xiàn)遠(yuǎn)程控制機(jī)對(duì)現(xiàn)場(chǎng)工控機(jī)的控制,再由工控機(jī)對(duì)PCL839卡加以控制。
  應(yīng)用Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)程序的開(kāi)發(fā)可以采取3種方法:URL(統(tǒng)一資源定位器)、Socket(套接字)、Datagram(數(shù)據(jù)包)。URL一般用于Web上某一特定資源的獲取,不適合于底層應(yīng)用程序的開(kāi)發(fā);Datagram是以不可靠傳輸協(xié)議UDP為基礎(chǔ)的,但對(duì)于現(xiàn)場(chǎng)中的數(shù)據(jù),必須保證傳輸?shù)目煽亢蜏?zhǔn)確,因此對(duì)于該網(wǎng)絡(luò)通信程序一般采用基于可靠傳輸協(xié)議TCP基礎(chǔ)上的Socket編程加以實(shí)現(xiàn)。



圖1 遠(yuǎn)程控制機(jī)和現(xiàn)場(chǎng)工控機(jī)互連結(jié)構(gòu)圖

  對(duì)本方案網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā),采用Server/Client方式,以遠(yuǎn)程控制主機(jī)為服務(wù)器,每個(gè)工控機(jī)為客戶端。客戶機(jī)的程序開(kāi)發(fā)如下所示:
  public class agnetclass
  {public static void main(String args[])
  {try {
       Socket agentsocket=new Socket
  ("remotecontrolcomputer",5555);
       PrintStream os=new PrintStream(agentsocket.getOutputStream());
       DataInputStream is=new DataInputStream(agentsocket.getInputStream());
       StringBuffer buf=new stringBuffer(50);
     ................
       }catch(IOException e){};
  }
  }
  在該程序段中,首先定義一個(gè)客戶端socket,通過(guò)該agent socket與遠(yuǎn)程控制機(jī)remote control computer建立連接,并且指定程序使用的端口號(hào),該端口號(hào)應(yīng)大于1024,以避免與系統(tǒng)的端口號(hào)發(fā)生沖突;然后定義輸出和輸入流os和is ,輸出流是從客戶機(jī)向服務(wù)器發(fā)送信息的通道,輸入流是服務(wù)器向客戶機(jī)傳遞命令和參數(shù)的途徑;再定義數(shù)據(jù)緩存區(qū),用于把服務(wù)器傳過(guò)來(lái)的命令和參數(shù)與其它程序段進(jìn)行交互。在整個(gè)程序段中用try catch語(yǔ)句進(jìn)行異常捕獲。
  服務(wù)器段的程序編制應(yīng)與客戶端程序的編制相適應(yīng),由于一個(gè)遠(yuǎn)程控制機(jī)可以控制多臺(tái)現(xiàn)場(chǎng)工控機(jī),所以服務(wù)器程序必須采用多線程機(jī)制,這也是Java語(yǔ)言的一大特色。服務(wù)器端的程序編寫如下:
  public class serverclass
  {public static void main(String args[])
  { boolean listen;
  try {
    ServerSocket serversocket =new ServerSocket(5555);
    }catch(IOException e){};
       while(listen)
  {
  Socket agentsocket=serversocket.accept();
  }catch(IOException e){};
  new serverthread(agentsocket).start();
  ..........
  }}
  class serverthread extends Thread{
  Socket socket=null;
  serverthread(Socket socket)
  {super("serverthread");
  this.socket=socket;}
  public void run(){
      try{
  DataInputStream  is=new  DataInputStream(new BufferedOutputStream (socket. getOutputStream()));
  PrintStream os=new PrintStream (new BufferedOutputStream (socket.getOutputStream (),5555),false);
  ..........
  }catch(IOException e){}; }
  該程序段由兩個(gè)類組成:主類和線程類。主類負(fù)責(zé)建立服務(wù)器套接字server socket,端口號(hào)必須與客戶機(jī)的端口號(hào)一致,然后通過(guò)server socket的accept方法創(chuàng)建一個(gè)套接字接口,專門處理與客戶機(jī)的通信;線程類用于創(chuàng)建一個(gè)新的線程,負(fù)責(zé)處理各個(gè)現(xiàn)場(chǎng)工控機(jī)的輸入和輸出請(qǐng)求。在線程類程序段中,首先創(chuàng)建一個(gè)構(gòu)造方法,用于初始化一個(gè)新的線程,然后再定義一個(gè)輸入和輸出流。該服務(wù)器程序的設(shè)計(jì)是以各客戶程序用同一個(gè)端口號(hào)向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器程序在端口處偵聽(tīng)各個(gè)客戶的請(qǐng)求,創(chuàng)建多個(gè)線程,依次處理。當(dāng)然各個(gè)客戶端也可以采用不同的端口號(hào)向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器相應(yīng)地也創(chuàng)建不同端口號(hào)的線程與端口號(hào)一致的客戶端進(jìn)行通信。
  遠(yuǎn)程控制主機(jī)服務(wù)器程序必須具有與數(shù)據(jù)庫(kù)進(jìn)行動(dòng)態(tài)交互的能力。數(shù)據(jù)庫(kù)中存放著大量的現(xiàn)場(chǎng)數(shù)據(jù)以及控制現(xiàn)場(chǎng)操作的參數(shù)和命令等。服務(wù)器程序中的某一線程體負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)的存取、修改和維護(hù)等操作,Java語(yǔ)言通過(guò)JDBC實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接,該功能類的實(shí)現(xiàn)方法如下:
  public class database
  {public void drivedata()
  {String url="JDBC:odbc:component";
    ..........
  try{
  Class.forName("sun.jdbc.odbc.JDBCODBCDriver");
  Connection con=DriverManager.getConnection(url);
    ..........
  }catch(SQLException se){};
  }
  該程序段最主要的功能是加載JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,使得Java語(yǔ)言能夠通過(guò)驅(qū)動(dòng)程序訪問(wèn)數(shù)據(jù)庫(kù)。

4 利用Java語(yǔ)言的本地方法技術(shù)

  由于Java語(yǔ)言的跨平臺(tái)特性,所以使得Java語(yǔ)言無(wú)法操作硬件。對(duì)智能節(jié)點(diǎn)的控制只能采用第三方語(yǔ)言進(jìn)行,例如C或匯編語(yǔ)言。而整個(gè)工控機(jī)的通信部分由Java語(yǔ)言編寫,為實(shí)現(xiàn)遠(yuǎn)程主機(jī)對(duì)智能節(jié)點(diǎn)的控制,就必須實(shí)現(xiàn)Java語(yǔ)言與其它語(yǔ)言的結(jié)合。令人欣慰的是Java語(yǔ)言擴(kuò)充了這方面的功能,可以與C和C++語(yǔ)言完美無(wú)缺地結(jié)合起來(lái),這雖然在某種程度上犧牲了移植性,卻使Java語(yǔ)言能夠和具體的環(huán)境打交道,具備了驅(qū)動(dòng)硬件的能力。在本文所討論的例子中,PCL839卡的應(yīng)用和驅(qū)動(dòng)程序是用C語(yǔ)言開(kāi)發(fā)的,Java語(yǔ)言把C語(yǔ)言編制的程序做成本地方法體,從而實(shí)現(xiàn)對(duì)PCL839卡的控制。
  對(duì)智能節(jié)點(diǎn)的驅(qū)動(dòng)程序用C語(yǔ)言編寫,程序中所采用的函數(shù)大部分是研華公司開(kāi)發(fā)的C庫(kù)函數(shù),利用這些庫(kù)函數(shù)可以開(kāi)發(fā)出高效的應(yīng)用程序,驅(qū)動(dòng)步進(jìn)電機(jī)完成各種操作。因此把這些程序集成為Java本地方法體,成為用Java語(yǔ)言實(shí)現(xiàn)遠(yuǎn)程控制的關(guān)鍵技術(shù)。其程序段如下:
  int pcl839dirve()
   { …………………………
     int i ;
     clrscr();
     set_base(0x2c0); /* 設(shè)置pcl839的基地址*/
  set_mode(CH1,DIR); /* 設(shè)置pcl839通道1 "Direction" mode */
  set_mode(CH2,DIR); /* 設(shè)置pcl839通道2 "Direction" mode */
  set_mode(CH3,PUS); /* 設(shè)置pcl839通道3"Pulse" mode */
  set_speed(CH123,600,3000,600); /* 設(shè)置pcl839通道速度 */
  pmove(CH123 , P_DIR,FH,4000 , N_DIR,FH,2000 , P_DIR,FH,4000);
  waitrdy(CH123); /* 等待所有通道就緒*/
  cmove(CH123 , N_DIR,FH , N_DIR,FH , N_DIR,FH);
  ………………………/*進(jìn)行具體的現(xiàn)場(chǎng)操作,以下的程序語(yǔ)句僅作為演示*/
    printf("按任何鍵降速...");
    getch();
    printf("\n");
    slowdown(CH123); /* 把通道1,2,3降速到低速狀態(tài)*/
    for(i=2999;i>-1;i--)
     { cprintf("%d \r",i);
      delay(1);
     }
    stop(CH123); /* 通道停止運(yùn)行*/
    return(0);
  }
  對(duì)于工控機(jī),Java程序的編寫必須集成本地方法。對(duì)于本地方法的集成采取以下步驟:首先在一個(gè)Java程序中定義一個(gè)本地的方法,編譯該Java代碼;然后當(dāng)用JDK環(huán)境下的JavaH命令創(chuàng)建一個(gè)C語(yǔ)言的頭文件時(shí),必須注意其中的類結(jié)構(gòu)和函數(shù)定義,接著創(chuàng)建一個(gè)Stub文件,Stub文件中包含與其C結(jié)構(gòu)緊密聯(lián)系在一起的C代碼;Stub文件建立以后,編寫相應(yīng)的C代碼,在原有的C代碼前面必須加上《stubpreamble.h》和《drive.h》兩個(gè)頭文件;最后再由
VC++等集成開(kāi)發(fā)環(huán)境將C語(yǔ)言程序編譯成DLL程序,這樣就實(shí)現(xiàn)了本地方法的集成。對(duì)于工控機(jī)的本地程序按以上步驟完成以后,工控機(jī)的主程序編制如下:
  public class main
  {public static void main(String args[])
  { .............
  /*負(fù)責(zé)與遠(yuǎn)程控制主機(jī)通信部分的程序段
  new drive().pcl839drive();
    .............
  }}
  public class dirve
  {public native void pcl839drive();
  .........
  static{
  System.loadLibrary("drive");
  .........} }
  該段程序由主類和本地方法類組成,主類除完成通信部分的程序外,還必須實(shí)例化本地方法類,并且調(diào)用本地方法;本地方法類在定義本地方法時(shí),必須加上關(guān)鍵詞native,并且程序段中有一段靜態(tài)代碼,該靜態(tài)代碼通過(guò)系統(tǒng)函數(shù)為本地方法類加載drive庫(kù)。
  通過(guò)采用Java語(yǔ)言編程技術(shù),就可以實(shí)現(xiàn)本地方法的集成和網(wǎng)絡(luò)的通信,有效地把控制主機(jī)和遠(yuǎn)程主機(jī)通過(guò)網(wǎng)絡(luò)連接起來(lái),以實(shí)現(xiàn)遠(yuǎn)程控制。該套方案是在已有本地局域網(wǎng)絡(luò)的基礎(chǔ)上建成的,充分利用了Java網(wǎng)絡(luò)編程和集成本地方法的技術(shù),具有經(jīng)濟(jì)實(shí)惠和高效的特點(diǎn)。由于Java的平臺(tái)無(wú)關(guān)性,使得Java在與本地方法的集成中隱藏了大量的技術(shù)細(xì)節(jié)。因而進(jìn)一步對(duì)Java的關(guān)鍵技術(shù)開(kāi)展研究,充分和高效地利用這一富有特色的語(yǔ)言,實(shí)現(xiàn)對(duì)底層智能節(jié)點(diǎn)的控制,達(dá)到網(wǎng)絡(luò)監(jiān)控的目的,無(wú)疑是一個(gè)非常有意義的課題。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 精品国产一区二区三区麻豆小说 | 欧美精品亚洲精品日韩 | 色狠狠一区二区三区香蕉蜜桃 | 国产精品视频福利 | 青青青激情视频在线最新 | www在线视频在线播放 | 97免费公开视频 | 国产福利福利视频 | 99精品免费在线 | 久久成年视频 | 天天爽视频 | 亚洲精品一区二区三区中文字幕 | 狠狠干天天射 | 伊人久久波多野结衣中文字幕 | 黄网站色视频免费看无下截 | 亚洲欧美日韩国产综合高清 | jizz日本女护士 | 亚洲精彩视频在线观看 | 中文字幕有码在线播放 | 色综合狠狠操 | 国模私拍福利视频在线 | 一区二区欧美视频 | 欧美亚州一区在线 | 日韩精品中文字幕久久 | 欧美aaaaaaaaa| 日韩欧美亚洲另类 | 国产欧美亚洲精品第一区 | 亚洲乱码在线播放 | 久久密| 九九99久久 | 2019国产在线| 99ri精品| 天天干天天干天天插 | 色婷婷5月 | 夜夜夜夜猛噜噜噜噜噜 | 亚洲精品综合一二三区在线 | 欧美操操操 | 日本zzzzzzz毛片 | 91久久国产露脸精品 | 亚洲乱码视频在线观看 | 欧美性视频在线播放黑人 |