Показано с 1 по 2 из 2

Тема: ПЛК 110-32M slave, libmodbus TCP, ошибка чтения регистров: Bad file descriptor

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    23.10.2013
    Адрес
    Новосибирск
    Сообщений
    2

    Question [Решено] ПЛК 110-32M slave, libmodbus TCP, ошибка чтения: Bad file descriptor

    Доброго времени суток!

    Прошу помощи в подключении ПЛК 110-32М к ПК в режиме slave
    ПЛК подключен по TCP напрямую к сетевой карте ПК без роутера.
    CodeSys по сети работает отлично.

    Для получения данных из ПЛК использую программу на QT, libmodbus
    Программа довольно стандартная,
    подключение к ПЛК проходит без ошибок, а при чтении выдается ошибка -1 Bad file descriptor
    перепробовал все функции чтения - результат одинаковый.
    Связь с тестовым сервером из комплекта драйвера работает отлично (libmodbus-3.0.6\tests\bandwidth-server-many-up.exe)
    ПЛК проверил два экземпляра, сейчас ещё 110-32L проверил - Результат отрицательный
    Попробовал программу QModMaster - на машине с ПЛК не подключается, на моей машине с эмулятором работает отлично.
    Значит практически наверняка я что-то не так делаю в настройках ПЛК. Вопрос, что именно?
    Инфо о ПЛК:
    Код:
    PLCInfo
    PLC model MODEL PLC 110-32 
    Binary  VERSION 2.14.0 
    Need Target version 2.10 
    Compiled: 14:37:41 Apr 28 2011 
    MAC 0A:06:0A:0A:0A:0A 
    IP 10.0.6.10
    GATE 10.0.6.1
    MASK 255.255.255.0
    PIC upper version is 15
    Licence unlimited
    Код программы C++
    Код:
    void MainWindow::on_modbusButton_pressed()
    {
        modbus_t *mb;
        uint8_t tab_reg[6];
        int res;
        char* ip; // = "10.0.6.10";
        int port; //=502;
        ip = ui->plcIPLineEdit->text().toLatin1().data();
        port = ui->plcPortLineEdit->text().toInt();
    
        mb = modbus_new_tcp(ip, port);
        ui->plcReturnText->appendPlainText(QString("Create connection host=").append(QString(ip)).append(" port=").append(QString::number(port)).append(" mb=").append(QString::number((int)((char*)mb))));
        if(mb == NULL) {
            ui->plcReturnText->appendPlainText(modbus_strerror(errno));
            return;
        }
        modbus_set_debug(mb, TRUE);
        modbus_set_slave(mb,255);
    
        res = modbus_connect(mb);
        ui->plcReturnText->appendPlainText(QString("Connect. Res=") + QString::number(res));
        if (res == -1) {
            ui->plcReturnText->appendPlainText(modbus_strerror(errno));
            modbus_free(mb);
            return;
        }
    
        /* Read 1 register from the address plcByteLineEdit */
        res = modbus_read_bits(mb, ui->plcByteLineEdit->text().toInt(), 1, tab_reg);
    //
    //     Процедура чтения всегда возвращает ошибку -1 Bad file descriptor
    //
        ui->plcReturnText->appendPlainText(QString("Read. Res=") + QString::number(res));
        if (res == -1) {
            ui->plcReturnText->appendPlainText(modbus_strerror(errno));
            modbus_close(mb);
            modbus_free(mb);
            return;
        }
    
    
        ui->plcReturnText->appendPlainText(QString("Done!!! Value=") + QString::number(tab_reg[0]));
    
        modbus_close(mb);
        modbus_free(mb);
    }
    Последний раз редактировалось SerJK; 22.04.2014 в 12:03.

  2. #2
    Пользователь
    Регистрация
    23.10.2013
    Адрес
    Новосибирск
    Сообщений
    2

    По умолчанию

    Таки победил
    Проблема была в номере slave устройства при вызове функции modbus_set_slave. В примерах я видел значения 71 и 255, у меня заработало со значением 1.
    QModMaster изначально не работал из-за странного способа ввода IP адреса
    010.000.006.010 не работал
    10_.0__.6__.10_ заработал
    В диагностике помог совет поддержки ОВЕНа использовать WireShark для анализа сетевого трафика
    Но запутал совет использовать для проверки взаимодействия с ПЛК программу Modbus Tester, первая что нашлась с таким именем не умеет работать по TCP, других программ с таким названием не нашел.

Похожие темы

  1. Адресация регистров Modbus-RTU, ПЛК(Slave)
    от Лёша в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 03.07.2019, 08:02
  2. ПЛК63, modbus slave, адреса регистров
    от monteg в разделе ПЛК63/73
    Ответов: 43
    Последнее сообщение: 19.06.2017, 08:46
  3. СП270 Slave. Чтение и запись регистров PFW
    от petera в разделе Панели оператора (HMI)
    Ответов: 4
    Последнее сообщение: 02.05.2015, 18:36
  4. ошибка #0 ПЛК 110
    от moroz в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 23.02.2011, 00:12
  5. ошибка чтения температуры с помощью Dll
    от незарегистрированный в разделе OWEN Proces Manager
    Ответов: 3
    Последнее сообщение: 16.04.2007, 19:58

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •