Показано с 1 по 10 из 1642

Тема: CODESYS V3.5. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.)

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    При использование триггерной переменной - опрос однократно выполняется по ее переднему фронту.
    Чтобы сбросить эту переменную - присвойте ей в коде значение FALSE.
    наверное я что то не так понял..до того как триггерная переменная стала TRUE данная шина вообще не была активна,а при изменении на FALSE ,шина должна остаться активной? и она все равно будет поддерживать соединение со слейвом?

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,594

    По умолчанию

    Цитата Сообщение от Максим Ульянов Посмотреть сообщение
    наверное я что то не так понял..до того как триггерная переменная стала TRUE данная шина вообще не была активна,а при изменении на FALSE ,шина должна остаться активной? и она все равно будет поддерживать соединение со слейвом?
    TCP-соединение, вероятно, будет поддерживаться вообще всегда, а запросы по нему будут отправляться только по переднему фронту триггерной переменной.
    Управлять опросом можно через системные переменные.
    См. п. 4.6:
    https://ftp.owen.ru/CoDeSys3/11_Docu...odbus_v2.1.pdf

  3. #3

    По умолчанию

    выбора особа там нет..

  4. #4

    По умолчанию

    Продолжаю мучить OwenCommunication... Если в цикле одна пара фб OCL.TCP_Client и OCL.MB_TcpRequest то все работает без проблем ...При добавление еще одной или более пар данных функций данные актуальны только после сброса...на чтобы посмотреть ,чтобы сделать?

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,594

    По умолчанию

    Цитата Сообщение от Максим Ульянов Посмотреть сообщение
    При добавление еще одной или более пар данных функций данные актуальны только после сброса...
    Поясните, что вы подразумеваете под этой фразой.

  6. #6

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Поясните, что вы подразумеваете под этой фразой.
    простыня неформатированного кода:

    fbTon3(IN :=TRUE, PT := T#2S);//(IN должно становится TRUE после выполнения всего вложеного кода ,НО становится TRUE сразу
    fbr_trig3(CLK:=fbTon3.Q);
    IF fbr_trig3.Q THEN
    fbTon3(IN :=FALSE);
    ReadWorksErrorsFank:=TRUE;
    END_IF;
    IF ReadWorksErrorsFank THEN
    CASE eState1 OF
    STATE_MB1.CONNECTING:
    fbTcpClient1
    (
    xEnable := TRUE ,
    tTimeout := T#5S,
    sIpAddr := '192.168.0.6',
    uiPort :=502
    );
    IF fbTcpClient1.xActive THEN
    fbWRRequest1 (xExecute := FALSE);
    eState1 := STATE_MB1.WR;
    ELSIF fbTcpClient1.xError THEN
    fbTcpClient1(xEnable := FALSE);
    eState1 := STATE_MB1.CONNECTING;
    END_IF
    STATE_MB1.WR:
    fbWRRequest1
    (
    xExecute :=TRUE,
    tTimeout :=T#1500MS,
    usiRetry :=5,
    hConnection := fbTcpClient1.hConnection,
    xIsRtuOverTcpMode :=FALSE,
    usiUnitId :=1,
    eFuncCode :=OCL.MB_FC.READ_INPUT_REGISTERS,
    uiDataAddr:=24, // Начальный регистр
    uiDataCount:=8,// колво регистров в запросе
    pData:=ADR (awReadData),
    szSize:=SIZEOF (awReadData)
    );
    ErrorsFank1.Errors_Fan_WORD[0]:=awReadData[0];
    ErrorsFank1.Errors_Fan_WORD[1]:=awReadData[1];
    ErrorsFank1.Errors_Fan_WORD[2]:=awReadData[2];
    ErrorsFank1.Errors_Fan_WORD[3]:=awReadData[3];
    WorksFank1.Works_Fan_WORD[0]:=awReadData[4];
    WorksFank1.Works_Fan_WORD[1]:=awReadData[5];
    WorksFank1.Works_Fan_WORD[2]:=awReadData[6];
    WorksFank1.Works_Fan_WORD[3]:=awReadData[7];
    IF fbWRRequest1.xDone THEN
    fbWRRequest1 (xExecute := FALSE);
    fbTcpClient1(xEnable := FALSE);
    eState1 := STATE_MB1.CONNECTING1;
    ELSE
    eState1 := STATE_MB1.CONNECTING;
    END_IF
    STATE_MB1.CONNECTING1:
    fbTcpClient2
    (
    xEnable := TRUE ,
    tTimeout := T#5S,
    sIpAddr := '192.168.0.7',
    uiPort :=502
    );
    IF fbTcpClient2.xActive THEN
    fbWRRequest2 (xExecute := FALSE);
    eState1 := STATE_MB1.WR1;
    ELSIF fbTcpClient2.xError THEN
    fbTcpClient2(xEnable := FALSE);
    eState1 := STATE_MB1.CONNECTING1;
    END_IF
    STATE_MB1.WR1:
    fbWRRequest2
    (
    xExecute :=TRUE,
    tTimeout :=T#1500MS,
    usiRetry :=5,
    hConnection := fbTcpClient2.hConnection,
    xIsRtuOverTcpMode :=FALSE,
    usiUnitId :=1,
    eFuncCode :=OCL.MB_FC.READ_INPUT_REGISTERS,
    uiDataAddr:=24, // Начальный регистр
    uiDataCount:=8,// колво регистров в запросе
    pData:=ADR (awReadData),
    szSize:=SIZEOF (awReadData)
    );
    ErrorsFank2.Errors_Fan_WORD_1[0]:=awReadData[0];
    ErrorsFank2.Errors_Fan_WORD_1[1]:=awReadData[1];
    ErrorsFank2.Errors_Fan_WORD_1[2]:=awReadData[2];
    ErrorsFank2.Errors_Fan_WORD_1[3]:=awReadData[3];
    WorksFank2.Works_Fan_WORD_1[0]:=awReadData[4];
    WorksFank2.Works_Fan_WORD_1[1]:=awReadData[5];
    WorksFank2.Works_Fan_WORD_1[2]:=awReadData[6];
    WorksFank2.Works_Fan_WORD_1[3]:=awReadData[7];

    IF fbWRRequest2.xDone THEN
    fbWRRequest2 (xExecute := FALSE);
    fbTcpClient2(xEnable := FALSE);
    eState1 := STATE_MB1.CONNECTING2;
    ELSE
    eState1 := STATE_MB1.CONNECTING1;
    END_IF
    STATE_MB1.CONNECTING2:
    fbTcpClient3
    (
    xEnable := TRUE ,
    tTimeout := T#5S,
    sIpAddr := '192.168.0.8',
    uiPort :=502
    );
    IF fbTcpClient3.xActive THEN
    fbWRRequest3 (xExecute := FALSE);
    eState1 := STATE_MB1.WR2;
    ELSIF fbTcpClient3.xError THEN
    fbTcpClient3(xEnable := FALSE);
    eState1 := STATE_MB1.CONNECTING2;
    END_IF
    STATE_MB1.WR2:
    fbWRRequest3
    (
    xExecute :=TRUE,
    tTimeout :=T#1500MS,
    usiRetry :=5,
    hConnection := fbTcpClient3.hConnection,
    xIsRtuOverTcpMode :=FALSE,
    usiUnitId :=1,
    eFuncCode :=OCL.MB_FC.READ_INPUT_REGISTERS,
    uiDataAddr:=24, // Начальный регистр
    uiDataCount:=8,// колво регистров в запросе
    pData:=ADR (awReadData),
    szSize:=SIZEOF (awReadData)
    );
    ErrorsFank3.Errors_Fan_WORD_2[0]:=awReadData[0];
    ErrorsFank3.Errors_Fan_WORD_2[1]:=awReadData[1];
    ErrorsFank3.Errors_Fan_WORD_2[2]:=awReadData[2];
    ErrorsFank3.Errors_Fan_WORD_2[3]:=awReadData[3];
    WorksFank3.Works_Fan_WORD_2[0]:=awReadData[4];
    WorksFank3.Works_Fan_WORD_2[1]:=awReadData[5];
    WorksFank3.Works_Fan_WORD_2[2]:=awReadData[6];
    WorksFank3.Works_Fan_WORD_2[3]:=awReadData[7];

    IF fbWRRequest3.xDone THEN
    fbWRRequest3 (xExecute := FALSE);
    fbTcpClient3(xEnable := FALSE);
    ReadWorksErrorsFank:=FALSE;
    fbTon3(IN :=FALSE);
    ELSE
    eState1 := STATE_MB1.CONNECTING2;
    END_IF
    END_CASE
    END_IF


    Если закоментировать блоки STATE_MB1.CONNECTING1 (с переносом END_IF,END_CASE,END_IF в конец STATE_MB1.WR) и ниже то блок STATE_MB1.CONNECTING и STATE_MB1.WR работает исправно,если выполняются все 6 блоков то данные актуальны только при один раз после сброса ,далее значения не меняются
    Последний раз редактировалось Евгений Кислов; 27.08.2021 в 08:33.

Похожие темы

  1. Настройка ПР200, управление 3-мя устройствами через RS-485
    от Orbes в разделе Среда программирования OWEN Logic
    Ответов: 20
    Последнее сообщение: 15.05.2017, 16:45
  2. СП3ХХ Пример настройка обмена с ПЛК на CODESYS 2.3
    от Denis_Kay в разделе Панели оператора (HMI)
    Ответов: 6
    Последнее сообщение: 02.03.2017, 15:12
  3. Ответов: 43
    Последнее сообщение: 13.04.2015, 14:05
  4. Универсальная функция для обмена с устройствами OwenIO и всеми любимый LabView.
    от Алексей Крагель в разделе Помощь Разработчикам
    Ответов: 0
    Последнее сообщение: 30.05.2014, 13:38

Ваши права

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