Страница 133 из 133 ПерваяПервая ... 3383123131132133
Показано с 1,321 по 1,322 из 1322

Тема: 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

Страница 133 из 133 ПерваяПервая ... 3383123131132133

Похожие темы

  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

Ваши права

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