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

Тема: ПЛК200 библиотека OwenCommunication и классы

Древовидный режим

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

    По умолчанию ПЛК200 библиотека OwenCommunication и классы

    Добрый вечер. Много однотипных устройств, с которыми надо работать по модбасу, хотелось бы сделать свой класс объекта. Библиотека в целом для меня новая (без ООП пользовался стандартными возможностями среды), так столкнулся с тем, что внутри класса ФБ TCP request ведет себя нестандартно. Блок объявляю внутри класса (не ввод, не вывод).
    Из самого очевидного, при 0 на входе xExecute, блок выдает постоянную единицу на выход xDone. В тесте одиночного ФБ xDone дает 0 как только я подаю 0 на xExecute.

    Код программы:
    trigger.CLK:=tcp_request.xDone;
    testvar:=tcp_request.xDone;
    requestcheck:=trigger.Q;
    CASE iconnection_stage OF
    0: //подключение к устройству
    tcp_client (
    xEnable:=TRUE,
    tTimeout:=T#5000MS,
    sIpaddr:=sIpaddress,
    uiport:=502
    );
    IF tcp_client.xActive=TRUE
    THEN iconnection_stage:=1; //если соединение установлено то переходим дальше
    END_IF
    IF tcp_client.xError=TRUE
    THEN tcp_client.xEnable:=FALSE;
    END_IF
    1: //проверка устройства
    tcp_request ( //проверяем состояние линий
    xExecute:=TRUE,
    tTimeout:=T#1000MS,
    usiretry:=3,
    hconnection:=tcp_client.hConnection,
    xIsRtuOverTcpMode:=FALSE,
    eFuncCode:=16#1,
    uiDataAddr:=20009,
    uiDataCount:=5,
    pData:=ADR(linecheck),
    szsize:=SIZEOF(linecheck)
    );
    IF requestcheck=TRUE //добавить какую-то реакцию на невыполнение операции
    THEN
    tcp_request.xExecute:=FALSE;
    IF linecheck=0
    THEN iconnection_stage:=3;//если на линиях ничего нет, то можно работать с оповещением
    ELSE currentaddress:=20009;
    iconnection_stage:=2;//если на линиях что-то записано надо сначала это стереть
    END_IF
    ELSE tcp_request.xExecute:=FALSE;//пока просто попробовать сначала если не получилось
    END_IF
    IF tcp_client.xError=TRUE OR tcp_client.xDone //если ошибка или закрытие соединения то начать сначала
    THEN tcp_client.xEnable:=FALSE;
    iconnection_stage:=0;
    END_IF


    До этого пробовал без триггера, но там также были свои проблемы (программа пролетала все проверки xDone без выполнения фактических команд записи). Успешно выполняется только команда чтения.
    Вложения Вложения

Похожие темы

  1. Библиотека OwenCommunication (релиз версии 3.5.11.7)
    от Евгений Кислов в разделе Библиотеки CODESYS
    Ответов: 5
    Последнее сообщение: 05.03.2024, 11:05
  2. Библиотека OwenCommunication. МКОН + MB_TcpSlave
    от zaychenko в разделе ПЛК2хх
    Ответов: 7
    Последнее сообщение: 02.03.2023, 16:20
  3. Ответов: 6
    Последнее сообщение: 21.02.2023, 15:55
  4. Ответов: 1
    Последнее сообщение: 16.12.2022, 08:38
  5. Классы тревог
    от okochurov в разделе СПК210, СПК1xx [М01]
    Ответов: 4
    Последнее сообщение: 26.11.2019, 09:04

Ваши права

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