创建一个新对象覆盖现有会话(modbus)

问题描述:

我使用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; 
     } 
    } 
} 

这里有什么问题?

解决方法是删除此行中的“静态”:

static ModbusIpMaster master;