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

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

Древовидный режим

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

    По умолчанию

    Цитата Сообщение от 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.

Похожие темы

  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

Ваши права

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