Я создал С# DLL, используя modbus-protocoll для чтения аналогового значения из модуля.
Во второй С# -project я использую dll и создаю объект с "новым 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);
Функция 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;
}
}
}
Что здесь не так?
Решение заключается в удалении "статического" в этой строке:
статический мастер ModbusIpMaster;