Страница 64 из 131 ПерваяПервая ... 1454626364656674114 ... ПоследняяПоследняя
Показано с 631 по 640 из 1308

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

  1. #631

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Поправил ошибки (выделил исправления жирным).

    Код:
    IF EnableRead THEN
    
       CASE ReadState OF
    
           STATE_MB_RD.CONNECTING:
    
           fbTcpClient
           (
             xEnable := TRUE ,
             tTimeout := T#5S,
             sIpAddr := '192.168.0.7',
             uiPort :=502
           );
    
          IF fbTcpClient.xActive THEN
    
             fbReadRequest (xExecute := FALSE);
             ReadState := STATE_MB_RD.READ;
    
          ELSIF fbTcpClient.xError THEN
    
             fbTcpClient(xEnable := FALSE);
             ReadState := STATE_MB_RD.CONNECTING;
    
          END_IF
    
       STATE_MB_RD.READ:
    
            fbReadRequest
            (
                 xExecute:=TRUE,
                 tTimeout:=T#5S,
                 usiRetry:=5,
                 hConnection:=fbTcpClient.hConnection,
                 xIsRtuOverTcpMode:=FALSE,
                 usiUnitId:=1,
                 eFuncCode:=OCL.MB_FC.READ_INPUT_REGISTERS,
                 uiDataAddr:=1,
                 uiDataCount:=32,
                 pData:=ADR (DatafORFANK),
                 szSize:=SIZEOF (DatafORFANK)
             );
    
    	IF fbReadRequest.xDone OR fbReadRequest.xError THEN
    		
    		EnableRead:=FALSE;
    		ReadState := STATE_MB_RD.CONNECTING;
    	
    	END_IF
    
       END_CASE
    
    END_IF
    Вложение 56613
    Да спасибо вам огромное ,я сам тоже самое написал только чуть по другому ,но тоже заработало

  2. #632

    По умолчанию

    Итак целый день коту под хвост... промучился со связкой кривых китайских шлюзов и OCL.TCP_Client; OCL.MB_TcpRequest;не удалось вычитать данные как хотелось ,( но если добавить на чтение через стандартные слейв тсп то не каких проблем с ними нет...решил читать данные с них добавив стандартными в дерево устройств, и управлять чтением через триггерную переменную....теперь вопрос...данные читаются все супер,но как ее сбросить и тем самым отключив опрос слейва?))

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

    По умолчанию

    Цитата Сообщение от Максим Ульянов Посмотреть сообщение
    Итак целый день коту под хвост... промучился со связкой кривых китайских шлюзов и OCL.TCP_Client; OCL.MB_TcpRequest;не удалось вычитать данные как хотелось ,( но если добавить на чтение через стандартные слейв тсп то не каких проблем с ними нет...решил читать данные с них добавив стандартными в дерево устройств, и управлять чтением через триггерную переменную....теперь вопрос...данные читаются все супер,но как ее сбросить и тем самым отключив опрос слейва?))
    При использование триггерной переменной - опрос однократно выполняется по ее переднему фронту.
    Чтобы сбросить эту переменную - присвойте ей в коде значение FALSE.

  4. #634

    По умолчанию

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

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

    По умолчанию

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

  6. #636

    По умолчанию

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

  7. #637

    По умолчанию

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

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

    По умолчанию

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

  9. #639

    По умолчанию

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

    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.

  10. #640

Страница 64 из 131 ПерваяПервая ... 1454626364656674114 ... ПоследняяПоследняя

Похожие темы

  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, 14:38

Ваши права

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