Создание нового объекта перезаписывает существующий сеанс (Modbus)

1

Я создал С# 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;
        }
    }
}

Что здесь не так?

Теги:
object
modbus

1 ответ

0

Решение заключается в удалении "статического" в этой строке:

статический мастер ModbusIpMaster;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню