创建一个新对象覆盖现有会话(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;