2011-05-25 82 views
2

我正嘗試使用nmodbus訪問Socomec Diris A40上的地址,如50526。不像其他的例子,我已經看到哪些開始3或4,這些地址都以5開頭。50544,50550,50556是幾個更多的IM插入。如何訪問5xxxx Modbus地址

據我瞭解,目前,第一個數字表示Modbus功能,實際上並不涉及實際地址,即30000個地址使用功能04,40000個地址功能03(?)。我看到第一個數字被省略,其餘的數字被用作地址。如果我用我的50000個地址試試這個,我會獲得一些成功,但是並不是所有的值和結果都不正確。 MODPOLL返回與我的代碼相同的結果。

我真的可以用一些幫助!如果有人可以告訴我如何訪問這些5xxxx寄存器,我將非常感激。

方法的代碼:

public static void ModbusSerialRtuMasterReadRegisters() 
    { 
     using (SerialPort port = new SerialPort("COM1")) 
     { 
      // configure serial port 

      port.BaudRate = 9600; 
      port.DataBits = 8; 
      port.Parity = Parity.None; 
      port.StopBits = StopBits.One; 

      try 
      { 
       port.Open(); 
       Console.WriteLine("port " + port.PortName + " open: " + port.IsOpen + "\n"); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine("Unable to open port: " + ex); 
      } 

      // create modbus master 
      IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port); 

      byte slaveId = 1; 
      ushort startAddress = 1; 
      ushort numRegisters = 5; 
      ushort[] registers = new ushort[numRegisters];; 

      // read registers 
      try 
      { 
       registers = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters); 
       for (int i = 0; i < numRegisters; i++) 
        Console.WriteLine("Register {0}={1}", startAddress + i, registers[i]); 
      } 
      catch (Modbus.SlaveException se) 
      { 
       Console.WriteLine("Could not find register... \n \n" + se); 
      } 

      try 
      { 
       port.Close(); 
       Console.WriteLine("\nport " + port.PortName + " open: " + port.IsOpen + "\n"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Unable to close port: " + ex); 
      } 
     } 

回答

2

嘗試從5xxxx地址減去40001或40000(地址開始與1或0)。

+0

我看到這個建議好了,但是不幸的是它不適合我。通過電子郵件發送製造商,顯然他們使用9xxxx尋址,即4 + 5,這將基於4xxxx + 5xxxx即時猜測,仍然在等待澄清,但仍然沒有運氣 - 地址9xxxx也不起作用(在Modbus測試儀)。 – marked 2011-05-26 15:00:44

+0

他們在這裏解釋:「問題是我們的儀表在這個儀表上使用了非標準地址映射 通常,數據類型的地址範圍是Modbus 41001到41099--但我們的儀表地址已被映射到9xxxx範圍(4 + 5)。 我們的一個客戶正在與凱譜華OPC/Modbus驅動程序爲他的SCADA系統接口。 他們有成功的讀寫9xxxx地址 我自己,我採用MODBUS測試儀通過IP進行一些測試,並且它也能正常工作「 – marked 2011-05-26 15:08:42

+0

詢問他們在任何具有已知地址的標籤上的單個MODBUS請求的十六進制轉儲。然後,由於MODBUS消息中的每個字節都可以解碼,所以可以進行逆向工程並找出需要的真正「魔術」地址。如果他們給你一些工作設備的通信日誌的嗅探轉儲,如果你之後的地址在其中,也可以實現相同的功能。 – avra 2011-05-27 09:37:54

0

具有5xxxx地址的寄存器正在保存寄存器。 (40001到5xxxx範圍) 因此,要找到Modbus寄存器地址,你應該從40001 減去其地址例如50512 - 40001 = 10511(290F 1H)

好運