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

Тема: Получение данных с ПЛК73 и PLCWinNT

  1. #1

    По умолчанию Получение данных с ПЛК73 и PLCWinNT

    Есть контроллер Овен ПЛК73 с некой программой, в которой настроены ModBus регистры для переменных. Пишу программу-сервер для опроса контроллера на Qt. В связи с этим возникло несколько вопросов:

    1. Нужно ли что-то дописывать в программе контроллера, чтобы получать данные с него по ModBus RTU? Или достаточно того, что поставил галочки Modbus и указал регистры у каждой нужной переменной?

    2. Если есть специалисты по Qt, то как правильно написать функцию для получения данных. Я написал вот так:
    Код:
    //Функция подключения к контроллеру
    void MainWindow::on_comStart_triggered()
    {
            foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
                if ( info.portName() != config.value("PLC/COMPORT").toString() ) continue;
                else {
                    port = info;
                    break;
                }
            }
            if ( port.isNull() ) {
                Log("Не удалось найти указанный порт для подключения к контроллеру!", "red");
                return;
            }
            if ( port.isBusy() ) {
                Log("Не удалось подключиться к контроллеру. Указанный порт используется другой программой!", "red");
                return;
            }
            com.setPort(port);
            if ( com.open(QIODevice::ReadWrite) ) {
                connect(&com, SIGNAL(readyRead()), this, SLOT(comReady_read()));
                Log("Подключение к контроллеру прошло успешно", "blue");
            } else
                Log("Не удалось подключиться к контроллеру!", "red");
    }
    //Функция чтения информации с контроллера
    void MainWindow::comReady_read()
    {
        QByteArray msg = com.readAll();
        if ( msg.length() > 0 ) {
            Log("Сообщение от контроллера получено!", "blue");
            Log(msg, "green");
        }
        Log("Удалось выполнить функцию comReady_read()", "blue");
    }
    Подключиться к контроллеру у меня удалось, а вот получить с него данные никак не получается. Никаких записей из функции comReady_read() на экран не выводилось. То есть функция ни разу не выполнялась.
    Последний раз редактировалось Dobrosed; 23.10.2015 в 14:29. Причина: Вопрос про PLCWinNT более не актуален

  2. #2

    По умолчанию

    А где вы в ПЛК73 порт Ethernet (протокол TCP) нашли ?

  3. #3

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    А где вы в ПЛК73 порт Ethernet (протокол TCP) нашли ?
    Согласен, поправил сообщение.

    У меня и RS-485 нет, заказывали контроллер с платой ПИ73-5, думал она будет сразу припаяна и выведена сзади. А в итоге то ли она отдельно пришла, то ли её вообще нет. Заказчик пока не отдал все платы мне.

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Пишу программу-сервер для опроса контроллера на Qt.
    Если вы опрашиваете контроллер, то сервером является контроллер. Server — slave, Client — Master.
    В программу контроллера для Codesys PLCWinNT надо что-то дописывать, чтобы я мог получать информацию с софт-контроллера по Modbus RTU/TCP?
    PLCWinNT вообще не знает про модбас. Тут правильнее говорить «писать с нуля», а не «дописывать». SysLibSockets, SysLibCom, и вперёд! Если нужно просто что-то отладить, то проще взять какой-нибудь симулятор модбас-слейва и пока (если) нет контроллера, всё делать с ним.
    Если есть специалисты по Qt, то как правильно написать функцию для получения данных.
    Я не специалист по Qt, но выглядит этот код не очень хорошо. По крайней мере он не выглядит самодостаточно. Сейчас загуглил пример работы с последовательным портом и там как-то иначе всё. В вашем коде ни отркытия порта, ни выставления его параметров не вижу. И потом не забывайте, что сообщения могут фрагментироваться. Вам их предстоит собирать по кусочкам. А может, и вовсе велосипед изобретать не стоит? Есть же QModbus, libmodbus. С последним я и сам работал.

  5. #5

    По умолчанию

    Yegor, а ПЛК110 может быть Client в сети Ethernet, если пользоваться конфигуратором ?

  6. #6

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Если вы опрашиваете контроллер, то сервером является контроллер. Server — slave, Client — Master.
    И что в этом случае? В контроллере надо что-то дописывать? Или просто надо правильно к контроллеру обратиться? Или что-то отправить на контроллер надо, чтобы получить ответ?

    Цитата Сообщение от Yegor Посмотреть сообщение
    Я не специалист по Qt, но выглядит этот код не очень хорошо. По крайней мере он не выглядит самодостаточно.
    Это лишь кусок кода. Естественно, у меня написано всё более развёрнуто и, по-моему, правильно. Поправил код в сообщении, чтобы не смущало. Программа подключается к контроллеру (по крайней мере, занимает порт), но данные с него не читает. Мною используется библиотека QSerialPort, которая поставляется вместе с Qt.

    Ещё один вопрос. При подключении к Debug RS232 обычные методы получения данных не сработают же?

    Про PLCWinNT забыли, если нужно что-то дописывать. Лучше поищу симулятор modbus slave.
    Последний раз редактировалось Dobrosed; 23.10.2015 в 14:30. Причина: Поправил код в первом сообщении

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    И что в этом случае? В контроллере надо что-то дописывать? Или просто надо правильно к контроллеру обратиться? Или что-то отправить на контроллер надо, чтобы получить ответ?
    В ПЛК73 я тоже не спец. Да и замечание было просто по терминологии.
    Это лишь кусок кода. Естественно, у меня написано всё более развёрнуто и, по-моему, правильно. Программа подключается к контроллеру (по крайней мере, занимает порт), но данные с него не читает. Мною используется библиотека QSerialPort, которая поставляется вместе с Qt.
    Попробуйте прочитать порт чем-нибудь готовым. Можно даже тупо стандартными средствами в консоль или в файл данные пустить. И наоборот — заведомо отправляющее данные устройство к порту подключите вместо ПЛК.
    При подключении к Debug RS232 обычные методы получения данных не сработают же?
    Дебаговый порт на 110 серии ждёт подключение кодесисом, насолько я знаю. А в конфигураторе он должен быть мастером, но тут лучше пускай ещё кто-нибудь скажет.
    Yegor, а ПЛК110 может быть Client в сети Ethernet, если пользоваться конфигуратором ?
    В своей теме ответ смотрите.

Похожие темы

  1. Получение данных по ОРС с ПЛК63
    от stesl в разделе ПЛК63/73
    Ответов: 22
    Последнее сообщение: 23.05.2015, 02:45
  2. Получение данных с ПЛК110
    от MerlinLegacy в разделе Master SCADA 3
    Ответов: 8
    Последнее сообщение: 05.02.2014, 21:52
  3. Получение данных с датчиков
    от qawaq в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 13.05.2013, 18:54
  4. мва8 + плк150 (получение данных)
    от Ден в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 13.03.2009, 10:37
  5. Получение данных от МВА8
    от КИПиА в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 03.03.2008, 14:10

Ваши права

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