Страница 132 из 174 ПерваяПервая ... 3282122130131132133134142 ... ПоследняяПоследняя
Показано с 1,311 по 1,320 из 1740

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

  1. #1311

    По умолчанию

    Цитата Сообщение от Александр Пинэко-Скворцов Посмотреть сообщение
    Добрый день.
    1.
    Поясните, пожалуйста, для чего добавляете NPort как устройство в дереве проекта, если уже работаете через библиотеку?
    Думал, что надо и там и там.

    Цитата Сообщение от Александр Пинэко-Скворцов Посмотреть сообщение
    Если Вам требуется реализовать Modbus RTU over TCP, то следует оставить только код.
    Убрал из дерева. Оставил только вызов ФБ из кода.

    Цитата Сообщение от Александр Пинэко-Скворцов Посмотреть сообщение
    Попробуйте для теста оставить статически .xEnable := TRUE в строке вызова блока TCP_MOXA.
    Сделал. Пока работает. Будем набирать статистику и смотреть, не завис ли обмен снова.

  2. #1312

    По умолчанию

    Цитата Сообщение от askaev Посмотреть сообщение
    При обмене ПЛК210-01-CS с MOXA nPort 5130A сыпятся ошибки. При этом с модулями МВ210-101 связь стабильная, без ошибок.

    В дереве
    Вложение 76223
    возле "MOXA NPort" циклически меняются значки Вложение 76224 -> Вложение 76225 -> Вложение 76226. При этом счётчик Error Counter постоянно увеличивается, хотя данные от устройства, подключенного к nPort по RS485 Modbus RTU передаются в ПЛК, но не долго. Через несколько дней (~3...4 дня) обмен прекращается. Не пойму, что не так.

    Вот код подключения к nPort и опроса удалённого устройства:
    Объявления:

    Программа:


    При подключении видно, что у MOXA_NPort выход xBusy постоянно TRUE, а, судя по не запускающемуся таймеру timertcp, выход xDone у MOXA_NPort постоянно FALSE:
    Вложение 76227
    Нормально ли это? Я предполагал, что после каждого успешного выполнения xDone должен переключаться в TRUE или после неуспешного выполнения xError должен переключаться в TRUE.
    Код:
    MB_US800_4_AI1(xExecute := FALSE); // После выполнения блока, его надо сбросить
    Вот эту строчку надо в самый конец, так как она обнуляет все флаги. Иначе можете ошибки связи не увидеть

  3. #1313

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    У меня в вашем проекте нет ошибок компиляции.

    Вложение 71403

    Если свяжитесь по телеграм (в подписи) и предоставите доступ по AnyDesk - посмотрим, в чем у вас дело.
    Такая же ситуация. Возникла при добавлении регистра записи по фронту. Помогите пожалуйста.

  4. #1314

    По умолчанию

    Цитата Сообщение от Назаров Александр Посмотреть сообщение
    Такая же ситуация. Возникла при добавлении регистра записи по фронту. Помогите пожалуйста.
    Добрый день.
    Мой телеграм указан в подписи.
    Напишите, пожалуйста, туда - оперативно разберемся.

  5. #1315

    По умолчанию

    Подскажите, а есть ли готовые или общепринятые способы распознавания восстановления связи с ПЧВ01[МО1]?
    Сделал вариант, который работает с помощью отслеживания текущего входного напряжения на ПЧВ.
    При разнице с предыдущим сохраненным значением выше определенного значения считать что связь восстановилась
    В данном случае для себе взял значение 150 (трех фаз у меня пока нет).
    Цель - ПЛК при включении частотника должен писать в него (частотник) значение по умолчанию.

    Код:
    IF (currentVoltage - savedVoltage) > 150 THEN
    	FrequencySetOutputValue:= FrequencySetStartupValue;
    	triggerFrequencySetOutputValue:= TRUE;
    END_IF
    
    //можно попробовать использовать xError или другие варианты, типа OwenDriver.hasError
    //но xInitDone хоть и интуитивно не так понятен, но стабильно TRUE если есть связь и FALSE, 
    //если нет
    IF NOT PChV1_M01.xInitDone THEN
    	currentVoltage := 0;
    END_IF
    
    savedVoltage := currentVoltage
    Но этот способ кажется корявым, что скажете?

    До этого пытался соорудить что-то, сделав счетчик Модбас передач с помощью xDone, сохраняя и сравнивая предыдущее значение с текущим.
    Пытаясь потом поймать момент восстановления, когда значения счетчиков сравнялись и xDone снова в True.
    Стабильно рабочего варианта не вышло, ибо измененное текущее значение периодически перетиралось дефолтным.

    Код:
    //Работает при включении-выключении ПЧВ, но также счетчики периодически сравниваются при стабильно включенном ПЧВ 
    IF (pchvModbusCountSaved = pchvModbusCount) AND PChV1_M01.xDone THEN
    	FrequencySetOutputValue:= FrequencySetStartupValue;
    	triggerFrequencySetOutputValue:= TRUE;
    END_IF
    
    //каждые 300 (например) циклов, сохраняем значение счетчика 
    IF cycleCount MOD 300 = 0 THEN
    	pchvModbusCountSaved := pchvModbusCount;
    END_IF
    
    IF PChV1_M01.xDone THEN
    	pchvModbusCount := pchvModbusCount + 1;
    END_IF

  6. #1316

    По умолчанию

    edvard_munch А можно пояснить подробности:
    * Как ПЧВ опрашивается? Через шаблон или через Modbus Slave Device?
    * ПЛК же Master, верно?
    * Связь по Modbus TCP или Modbus RS-485?
    * Почему не годится стандартный способ с .xError?
    На всякий случай оставлю ссылку на свою статью с обработкой ошибок и связи: https://cs-cs.net/technologii-testir...odbus___ai__io
    В ней надо почитать заголовок 6. Там есть описание того, как можно при помощи включенной диагностики и .xError получать ошибки опроса устройства с защитой от случайно возникающих ошибок.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  7. #1317

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    edvard_munch А можно пояснить подробности:
    * Как ПЧВ опрашивается? Через шаблон или через Modbus Slave Device?
    * ПЛК же Master, верно?
    * Связь по Modbus TCP или Modbus RS-485?
    * Почему не годится стандартный способ с .xError?
    На всякий случай оставлю ссылку на свою статью с обработкой ошибок и связи: https://cs-cs.net/technologii-testir...odbus___ai__io
    В ней надо почитать заголовок 6. Там есть описание того, как можно при помощи включенной диагностики и .xError получать ошибки опроса устройства с защитой от случайно возникающих ошибок.
    1) Шаблон
    2) Мастер
    3) RS-485
    4) Спасибо, сейчас еще раз посмотрю внимательно на xError, возможно зря я полез в дебри, и не понял до конца как работать с xError

  8. #1318

    По умолчанию

    Цитата Сообщение от edvard_munch Посмотреть сообщение
    сейчас еще раз посмотрю внимательно на xError, возможно зря я полез в дебри, и не понял до конца как работать с xError
    Да! Это оно! Единственное неудобство в том, что на момент ошибки xError становится TRUE, а при следующей попытке опроса сбрасывается на FALSE.
    Я у себя в статье как раз это описал (ради этого стоит почитать) и показал, как сделал систему выдержки на паре таймеров.
    Её суть такая, образно: "Одна ошибочка появилась - значит, глюк. О, а если пошли несколько ошибок подряд - то это точно отвал связи".
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  9. #1319

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Да! Это оно! Единственное неудобство в том, что на момент ошибки xError становится TRUE, а при следующей попытке опроса сбрасывается на FALSE.
    Я у себя в статье как раз это описал (ради этого стоит почитать) и показал, как сделал систему выдержки на паре таймеров.
    Её суть такая, образно: "Одна ошибочка появилась - значит, глюк. О, а если пошли несколько ошибок подряд - то это точно отвал связи".
    Все, разобрался. Набросал быстренько пока такой код. Работает. Спасибо!

    Код:
    pchvModbusErrorsComing: TOF;
    pchvModbusConnectionError: TON;
    modbusErrorTimeout: TIME:= T#1000MS;
    modbusErrorSeriesTimeout: TIME:= T#3000MS;
    fTrigPchvRestarted: F_TRIG;
    
    
    pchvModbusErrorsComing(IN:= PChV1_M01.xError, PT:= modbusErrorTimeout);
    pchvModbusConnectionError(IN:= pchvModbusErrorsComing.Q, PT:= modbusErrorSeriesTimeout);
    fTrigPchvRestarted(CLK:= pchvModbusConnectionError.Q);
    
    IF fTrigPchvRestarted.Q THEN
    	FrequencySetOutputValue:= FrequencySetStartupValue;
    	triggerFrequencySetOutputValue:= TRUE;
    END_IF

  10. #1320

    По умолчанию

    Цитата Сообщение от edvard_munch Посмотреть сообщение
    Все, разобрался. Набросал быстренько пока такой код. Работает. Спасибо!
    О, класс! Наконец-то кто-то внимательно прочитал ту мою статью, ахаха (спасибо, мне приятно что в дело пошло)!
    Отлично! В будущем это можно, как у меня, запихать в функциональный блок, и для разных устройств создавать его экземпляры!
    PS. А не надо потом триггер записи в ПЧВ сбрасывать? Да, сам ПЛК запишет его по фронту, но а в коде не надо?
    Можно его, например, обрабатывать через таймер TP и на время 500 ms поставить.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

Страница 132 из 174 ПерваяПервая ... 3282122130131132133134142 ... ПоследняяПоследняя

Похожие темы

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

Ваши права

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