2014-08-28 56 views
1

我使用modbus-protocoll創建了一個C#DLL以從模塊讀取模擬值。創建一個新對象覆蓋現有會話(modbus)

在第二個c#項目中,我使用dll並用「new ET18Z_A」創建一個對象。一切工作正常,只要我只使用一個模塊。當我創建第二個對象(ET18Z_B)時,第一個不再工作。

看起來好像第二個「新」覆蓋了第一個會話。

這裏是我用來讀取一個值的代碼。如果第二個「新」被跳過並且運行良好,並且函數ReadInputRegister讀取正確的值。如果我使三條線路處於活動狀態,並且第二個「新」也處於活動狀態,則函數ReadInputRegister不會讀取正確的值。也沒有錯誤,但結果是錯誤的。

ET7018Z.ET7018Z ET18Z_A = new ET7018Z.ET7018Z(); 
string IP_ET7018Z = "192.168.100.110"; 
Res = ET18Z_A.Initialize(IP_ET7018Z, out Message); 

//The next three lines open connection to a second module with different IP 
//ET7018Z.ET7018Z ET18Z_B = new ET7018Z.ET7018Z(); 
//IP_ET7018Z = "192.168.100.210"; 
//Res = ET18Z_B.Initialize(IP_ET7018Z, out Message); 

int AI_7018Z = 0 
Res = ET18Z_A.ReadInputRegister(AI_7018Z, out Value, out Message); 

的初始化函數如下所示:

public class ET7018Z 
{ 
    static ModbusIpMaster master; 

    public int Initialize(string IP, out string Message) 
    { 
     Message = "No Error"; 

     try 
     { 
      string ipAddress = IP; 
      int tcpPort = 502; 
      TcpClient tcpClient = new TcpClient(); 
      tcpClient.BeginConnect(ipAddress, tcpPort, null, null); 
      master = ModbusIpMaster.CreateIp(tcpClient); 
      Thread.Sleep(100); 

      string message = ""; 
      int Res = 0; 
      Res = SetEngineeringFormat(CState.ON, out message); 
      return 0; 
     } 
    } 
} 

這裏有什麼問題?

回答

0

解決方法是刪除此行中的「靜態」:

static ModbusIpMaster master;