Страница 133 из 153 ПерваяПервая ... 3383123131132133134135143 ... ПоследняяПоследняя
Показано с 1,321 по 1,330 из 1527

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

  1. #1321

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    PS. А не надо потом триггер записи в ПЧВ сбрасывать? Да, сам ПЛК запишет его по фронту, но а в коде не надо?
    Можно его, например, обрабатывать через таймер TP и на время 500 ms поставить.
    Да, надо, у меня все триггеры сбрасываются в начале каждого цикла. Это кусочек кода, относящийся к конкретной проблеме.
    Также у меня там триггер поднимается по приходу сигнала об увеличении/уменьшении частоты.
    И в первом цикле программы, чтоб при перезагрузке контроллера отправить нужную частоту на ПЧВ.

    Из всего что относится к ПЧВ:
    Код:
    cycleCount := cycleCount + 1;
     
    triggerFrequencySetOutputValue := FALSE;
    
    IF cycleCount = 1 THEN
    	FrequencySetOutputValue:= FrequencySetStartupValue;
    	triggerFrequencySetOutputValue:= TRUE;
    END_IF
    
    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
    
    IF frequencyUpSignal THEN
    	frequencySetOutputValue := frequencySetInputValue + frequencyStep;
    	triggerFrequencySetOutputValue := TRUE;
    END_IF
    
    IF frequencyDownSignal THEN
    	frequencySetOutputValue := frequencySetInputValue - frequencyStep;
    	triggerFrequencySetOutputValue := TRUE;
    END_IF
    P.S. Если что, нашел потом ошибку у себя. В счетчике циклов. При превышении верхнего лимита числового типа отсчет же снова начинается с единицы и происходят ненужные перезаписи частоты.
    Нужно добавить такую проверку (заодно поменял тип с UINT на USINT), чтобы только в действительно первом цикле происходила запись.
    Перескакивать сразу на цикл номер 2 по достижении верхнего предела

    Код:
    cycleCount: USINT := 0;
    usintUpperLimit: USINT := 255;
    
    IF cycleCount = usintUpperLimit THEN
        cycleCount:= cycleCount + 3;
    END_IF
    Ну а вообще наверное нужно Кодсисовский метод FB_INIT() раскурить. Только о нем узнал. Похоже что он как раз для выполнения действий один раз при старте контроллера.
    Последний раз редактировалось edvard_munch; 18.06.2024 в 16:56.

  2. #1322

    По умолчанию

    edvard_munch Ага, понял!
    Про FB_INIT я не в курсе. Хотел написать про другой приём, но потом вспомнил, что он позволяет записать нужные значения по Modbus при начале опроса устройства (или после отвала связи), но значения там фиксированные (программно не задаются). И это не подходит.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  3. #1323
    Пользователь
    Регистрация
    08.06.2021
    Адрес
    СПб
    Сообщений
    61

    По умолчанию

    Не могу найти поиском в EtherCAT, модуль ввода-вывода Sontheim DIO 32 . На сайте производителя файл для скачивания я не нашел! Подскажите какие варианты поиска возможны? 2024-07-08.png

  4. #1324
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,035

    По умолчанию

    Evgen Dnepr EtherCAT в ПЛК Овен не реализован, это отдельная лицензия.

  5. #1325

    По умолчанию

    Добрый день! Подскажите как правильно организовать переключение триггерной переменной для записи значений в Mosbus Slave по нажатию кнопки на сенсорном экране? Предполагаю, что это можно сделать через таймер. Однако если на запись будет много переменных, то делать кучу таймеров очевидно не правильно. Как следует поступить?

  6. #1326

    По умолчанию

    Очевидно один таймер для включения "триггерной переменной" при изменении любой из вашего большого списка переменных.
    У меня так на последнем.
    код:
    // передача триггеров в частотник
    front_on_delayTimer(IN:=front_on_delayTimer_start, PT:=front_delayTime); // Запуск таймера задержки после поднятия фронта
    front_off_delayTimer(IN:=front_off_delayTimer_star t, PT:=front_delayTime); // Запуск таймера задержки после снятия фронта
    IF (G.ROT <> G.ROT_SET) THEN pchv_send:=TRUE; G.ROT:=G.ROT_SET; END_IF
    IF (G.FREQ <> G.FREQ_SET) THEN pchv_send:=TRUE; G.FREQ := G.FREQ_SET; END_IF
    IF pchv_send AND pchv_send_en THEN pchv_send1Completed:=FALSE;pchv_send:=FALSE; END_IF
    // установка переднего фронта
    IF NOT pchv_send1Completed THEN pchv_send_en:=FALSE;
    pchv_send1Completed := TRUE; // Установка флага завершения первого действия
    front_on_delayTimer_start:=TRUE;
    G.TR1:=G.TR2:=TRUE; // включить передачу команды управления
    END_IF
    // снятие переднего фронта
    IF front_on_delayTimer.Q AND pchv_send1Completed AND NOT pchv_send2Completed THEN
    front_on_delayTimer_start:=FALSE; // Сброс таймера
    front_off_delayTimer_start:=TRUE;
    pchv_send2Completed := TRUE; // Установка флага завершения второго действия
    G.TR1:=G.TR2:=FALSE; // выключить передачу команды управления
    END_IF
    // задержка после снятия фронта
    IF front_off_delayTimer.Q AND pchv_send2Completed THEN pchv_send2Completed:=FALSE; front_off_delayTimer_start:=FALSE; pchv_send_en:=TRUE; END_IF

  7. #1327

    По умолчанию

    Цитата Сообщение от yray Посмотреть сообщение
    Очевидно один таймер для включения "триггерной переменной" при изменении любой из вашего большого списка переменных.
    У меня так на последнем.
    код:
    // передача триггеров в частотник
    front_on_delayTimer(IN:=front_on_delayTimer_start, PT:=front_delayTime); // Запуск таймера задержки после поднятия фронта
    front_off_delayTimer(IN:=front_off_delayTimer_star t, PT:=front_delayTime); // Запуск таймера задержки после снятия фронта
    IF (G.ROT <> G.ROT_SET) THEN pchv_send:=TRUE; G.ROT:=G.ROT_SET; END_IF
    IF (G.FREQ <> G.FREQ_SET) THEN pchv_send:=TRUE; G.FREQ := G.FREQ_SET; END_IF
    IF pchv_send AND pchv_send_en THEN pchv_send1Completed:=FALSE;pchv_send:=FALSE; END_IF
    // установка переднего фронта
    IF NOT pchv_send1Completed THEN pchv_send_en:=FALSE;
    pchv_send1Completed := TRUE; // Установка флага завершения первого действия
    front_on_delayTimer_start:=TRUE;
    G.TR1:=G.TR2:=TRUE; // включить передачу команды управления
    END_IF
    // снятие переднего фронта
    IF front_on_delayTimer.Q AND pchv_send1Completed AND NOT pchv_send2Completed THEN
    front_on_delayTimer_start:=FALSE; // Сброс таймера
    front_off_delayTimer_start:=TRUE;
    pchv_send2Completed := TRUE; // Установка флага завершения второго действия
    G.TR1:=G.TR2:=FALSE; // выключить передачу команды управления
    END_IF
    // задержка после снятия фронта
    IF front_off_delayTimer.Q AND pchv_send2Completed THEN pchv_send2Completed:=FALSE; front_off_delayTimer_start:=FALSE; pchv_send_en:=TRUE; END_IF
    Спасибо. Буду знать что и так можно.
    Я в принципе сделал, как в свое время нам показал Евгений Кислов, через По нажатию> Изменение значения>выполнить ST код>присвоить триггеру True. Если триггер True, то запускается таймер на 1 с, триггер = not (выход таймера ).
    Запихал таймер в функциональный блок по руководству Первый старт 3.5.
    Хотелось бы чтобы пример записи по переднему фронту вошла в новый Первый старт или руководство по Modbus.

  8. #1328

    По умолчанию

    Я использую таймер TP у себя в таких решениях. Да, на каждый канал опроса (если там триггер надо дёргать отдельно от всех) используется свой таймер.
    TP удобен тем, что он по короткому импульсу на входе (минимальная длина - один цикл) запускается и дорабатывает нужное время сам.
    Поэтому, образно, на его вход можно сразу вешать кнопку, а выход выводить на триггер.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  9. #1329

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    TP удобен тем, что он по короткому импульсу на входе (минимальная длина - один цикл) запускается и дорабатывает нужное время сам.
    Поэтому, образно, на его вход можно сразу вешать кнопку, а выход выводить на триггер.
    Мне удобнее кодом писать, ТР наверное в него тоже вставить не проблема, но вот в чём затык вижу и ловил его несколько раз пока не сделал по приведённому выше коду: если на ТР подать входной сигнал, он должен отработать заданное время и обнулить выход. НО если на него сигналы сыпятся по какой-то причине не останавливаясь, в цикле например, то и выход он не обнулит либо обнулит на крайне короткий срок, который частотник не воспримет как снятие фронта. И новую команду не выполнит. Соответственно его ещё нужно дополнительно обвязать, так что-бы обязательно была достаточная пауза на снятие фронта при любом раскладе.

  10. #1330
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    12,035

    По умолчанию

    yray Это вообще-то принцип работы TP, можете даже диаграмму посмотреть. Чему вы удивляетесь?

Страница 133 из 153 ПерваяПервая ... 3383123131132133134135143 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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