我使用modbus-protocoll创建了一个C#DLL,用于从模块中读取模拟值。
在第二个c#项目中,我使用dll并使用" new ET18Z_A"创建一个对象。只要我只使用一个模块,一切都很好。当我创建第二个对象(ET18Z_B)时,第一个对象不再工作。
好像第二个"新"覆盖第一个会话。
这里是我用来读取一个值的代码。如果第二个"新"被跳过,它运行良好,函数ReadInputRegister读取正确的值。如果我让三条线路处于活动状态而第二条线路处于活动状态并且#34;也是活动的,然后函数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);
Initialize函数如下所示:
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 :(得分:0)
解决方法是删除此行中的“静态”:
静态ModbusIpMaster master;