2015-09-07 207 views
1

目前,我與施耐德功率邏輯電氣設備的工作。我想從設備讀取數據並在我的系統中顯示數值。到目前爲止,我發現了J2mod,Jamod和Modbus4Java庫。我用所有的modbus4java來連接並獲取設備的數據。Modbus4J Modbus RTU主

其實我還是搞不清我是否想創建主側或從一側。基於我的理解,該設備將成爲奴隸,我的系統將成爲主人(第一個問題)。

下面是設置在我的設備。它表明處於從站模式的設備及其協議是Modbus RTU。所以,我需要創建一個主應用程序來與它進行通信,而使用ModbusRTU協議正確嗎? (第二問題)

  • 模式:從站
  • 協議:Modbus RTU的
  • 地址:1
  • 波特率:38400
  • 校驗位:無

下面是對代碼我的應用程序作爲法師和使用的ModbusRTU協議

public static void main(String[] args) throws ModbusTransportException, ErrorResponseException { 
    ModbusFactory factory = new ModbusFactory(); 

    SerialParameters params = new SerialParameters(); 
    params.setCommPortId("COM6"); 
    params.setBaudRate(9600); 
    params.setDataBits(8); 
    params.setStopBits(1); 
    params.setParity(0); 

    ModbusMaster master = factory.createRtuMaster(params); 

    master.setTimeout(1000); 
    master.setRetries(0); 
    long start = System.currentTimeMillis(); 

    try { 
     master.init(); 
    } catch (Exception e) { 
     System.out.println("Modbus Master Init Error: " + e.getMessage()); 
      return; 
    } 

    try { 
     System.out.println("Reg. 1001 Value:" + master.getValue(1, RegisterRange.HOLDING_REGISTER, 3110, DataType.FOUR_BYTE_FLOAT_SWAPPED)); 
    } 
    finally { 
     master.destroy(); 
    } 

    System.out.println("Time elapsed: " + (System.currentTimeMillis() - start) + "ms"); 
} 

這是我從Modbus4Java頁面提供的示例代碼中獲得的代碼。另一件值得關注的事情是價值params.setCommPortId("COM6");除了我可以放在那裏的「COM6」還有什麼其他價值。因爲基本上它會收到一個字符串值。那麼我能夠把它的任何字符串值?這個特定的setCommPortID的功能是什麼? (第3題)

在研究樣本代碼提供由Modbus4Java頁面,它不把設備的IP地址。但在我的情況下,我的設備有一個IP地址。而IP地址只能在Slave應用程序中使用。我的系統應該如何識別設備的IP地址? (第四個問題)。

我運行此代碼片斷後,我得到了一個錯誤:

穩定圖書館

本地庫版本= RXTX-2.1-7

的Java庫版本= RXTX-2.1-7

Modbus主初始化錯誤:com.serotonin.io.serial.SerialPortException:gnu.io.NoSuchPortException

請,請,請您幫我。我一直堅持這個近一個月。真的希望有人能幫助我。預先感謝您提供任何形式的幫助和建議。

回答

3

我是j2mod的維護者,所以我的回答是建議你看看j2mod中包含的測試程序。您可以通過以下網址找到j2mod在SourceForge -

https://sourceforge.net/projects/j2mod/

我對回答問題有相當不錯的,但我也跟着計算器,這樣我就可以更多地解釋在這裏。這裏有很多問題,所以如果我錯過了任何事情,我會提前道歉。

Schneider設備是從設備或「服務器」,您的應用程序是主設備或「客戶端」。Modbus是主/從協議,主站發起所有請求。您的應用程序將是主設備,並負責提供設備的所有請求。

確切的通信將由設備文檔提供。在這種情況下,您指示設備使用38400波特率,等等。這些是你用來用RXTX庫更新SerialParameters的參數(它恰好也被j2mod使用)。

傳遞給setCommPortId()的值是Windows COM端口標識符 - 您應該能夠傳遞與實際COM端口關聯的任何值 - 「COM1」,「COM2」等。請注意,某些USB轉換器在每次使用時都會更改其COM端口,因此您可能正在追蹤端口名稱。

你提到你的設備也有一個IP地址。您不能使用RTU類和方法訪問Modbus/TCP設備。 jamod和j2mod也是如此 - 大多數Modbus庫對於RTU和TCP傳輸具有不同的類別(對於支持其他傳輸的庫,也支持ASCII和UDP)。

+0

謝謝你的回答。但我已經知道我的錯誤是什麼。 –

+0

不用擔心 - 我會定期尋找未回答的問題並回答問題;) –