Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 46

Тема: Что почитать?

  1. #1

    Question Что почитать?

    Здравствуйте!

    Посоветуйте, чтобы почитать по совсем базовым вещам CodeSys. Я тут пытаюсь разобраться (есть бекграунд программирования), но упираюсь в непонимание вещей, которые скорее всего являются супербазовыми. Например:
    1. Вижу примеры с объявлением структур TYPE. Но в какой файл его добавлять? В PRG_PLC или какой-то другой?
    2. Какой жизненный цикл работы с переменными Modbus? Как сделать так, чтобы я вызывал FB только при изменении переменной?
    3. Как на языке ST передать в FUN значения входов, и изменить в FUN значения нескольких выходов? Можно ли внутри FUN менять внешние переменные?
    4. Как вызывать функции по изменению аналоговых входов? Например, хочу раз в 10 секунд передавать по MQTT значение температуры. Как мне сделать так, чтобы я раз в 10 секунд дергал функцию (FUN)? Делать ли это через счетчик циклов или есть более изящные способы?
    5. Везде показано, как использовать MQTT визуально. А можно как-то работать с такими объектами в ST-формате?
    6. Как настроить MQTT-клиент централизовано. Допустим, мне надо в множестве FUN передавать данные в MQTT-сервер. Не делать же вызов этого клиента в каждой функции? Иначе потом смена пароля будет в десятке мест. Или сделать функцию, куда поместить клиент и уже дергать функцию? Или нужно где-то настроить клиента, получить его инстанс, и уже дергать инстанс?

    Ну и так далее. Вопросы дилетантские, но пока для меня они очень сложны. Видео тут не помогает, поскольку видео говорит "как сделать тестовый кейс", но не объясняет суть происходящего.

    Где можно об этом почитать? Именно об азах.

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

    По умолчанию

    Добрый день.

    Литературы не слишком много, из общеизвестных книг можно порекомендовать Игорь Петров: Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования
    Еще, возможно, подойдет Сергей Романов. Изучаем Structured Text МЭК 61131-3
    И, естественно, есть справка: https://help.codesys.com/webapp/_cds...rsion=3.5.14.0

    Во вопросам:

    1. Вижу примеры с объявлением структур TYPE. Но в какой файл его добавлять? В PRG_PLC или какой-то другой?
    ПКМ на узел Application - Добавление объекта - DUT

    2. Какой жизненный цикл работы с переменными Modbus?
    Вы "жизненным циклом" называете время жизни объекта (object lifetime)?
    В CODESYS в большинстве случаев используется только статическое выделение памяти, так что этот вопрос не имеет смысла.
    Или я вас неправильно понял?

    Как сделать так, чтобы я вызывал FB только при изменении переменной?
    Для этого надо написать ФБ, который будет детектировать изменение переменной, и передавать сигнал другому ФБ.

    3. Как на языке ST передать в FUN значения входов, и изменить в FUN значения нескольких выходов? Можно ли внутри FUN менять внешние переменные?
    https://help.codesys.com/webapp/_cds...rsion=3.5.14.0
    Внутри функции можно менять глобальные переменные - но это плохой подход, который нарушает инкапсуляцию данных.

    Как мне сделать так, чтобы я раз в 10 секунд дергал функцию (FUN)? Делать ли это через счетчик циклов или есть более изящные способы?
    Классический вариант:

    Код:
    PROGRAM PLC_PRG
    VAR
    	fbTon:	TON;
    END_VAR
    
    
    fbTon(IN := NOT(fbTon.Q), PT := T#10M);
    
    IF fbTon.Q THEN
    	// код, размещенный здесь, будет выполняться раз в 10 минут
    END_IF
    5. Везде показано, как использовать MQTT визуально. А можно как-то работать с такими объектами в ST-формате?
    Да, безусловно, ФБ можно вызывать на любом языке - в том числе, и на ST.
    https://help.codesys.com/webapp/_cds...function-block

    Как настроить MQTT-клиент централизовано. Допустим, мне надо в множестве FUN передавать данные в MQTT-сервер. Не делать же вызов этого клиента в каждой функции? Иначе потом смена пароля будет в десятке мест. Или сделать функцию, куда поместить клиент и уже дергать функцию? Или нужно где-то настроить клиента, получить его инстанс, и уже дергать инстанс?
    Это вопрос не к CODESYS, а к архитектуре приложения. Про проектирование ПО написано уже достаточно книг.

  3. #3

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Классический вариант:

    Код:
    PROGRAM PLC_PRG
    VAR
    	fbTon:	TON;
    END_VAR
    
    
    fbTon(IN := NOT(fbTon.Q), PT := T#10M);
    
    IF fbTon.Q THEN
    	// код, размещенный здесь, будет выполняться раз в 10 минут
    END_IF
    вот, кстати, очень интересный момент: ТОН работает 10 минут, потом ждётся какое-то время до следующего цикла работы PLC_PRG. Потом в этом цикле работает функция NOT, и только на следующий цикл работы PLC_PRG произойдёт перезапуск ТОН. Итого 10 минут + 1...2 такта работы PLC_PRG. Уж лучше тогда BLINK+R_TRIG. Или вру я?

  4. #4

    По умолчанию

    О! Отлично, спасибо большое! Пошел читать и учить

  5. #5

  6. #6

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Внутри функции можно менять глобальные переменные - но это плохой подход, который нарушает инкапсуляцию данных.


    Будьте добры, поясните, а внутри ФБ тоже нежелательно глобальные переменные пересчитывать? Просто у меня весь проект на этом работает. Может переделать, пока не поздно?

  7. #7

  8. #8

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Ознакомился, спасибо! Примеры правда там на непонятном языке. Но кое-что отложилось кое-где. Думаю попробовать сделать проект без ГВЛ. Вот только тогда наверное есть смысл кое-какие обсчёты сразу в плс-прг перенести из пары фб. Иначе будут какие-то кошмарные количества входных и выходных переменных у пары фб.
    Но тогда сама плс-прг может неудобоваримый вид принять. В этой связи страшная мысль приходит в голову: а не написать-ли плс-прг на ст? Это вообще можно? Кто-нибудь пробовал? Вроде бы там особых таких ветвлений нет, чтоб от перехода на ст с сфс наглядность пропала.
    И вот ещё вопрос, чтобы два раза не вставать: а можно ли в ст, при вызове фб передаваемые ему параметры в столбик написать, чтоб в онлайне значения переменных нагляднее смотрелись?

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

    По умолчанию

    а не написать-ли плс-прг на ст? Это вообще можно? Кто-нибудь пробовал?
    Это крайне распространенный подход.

    а можно ли в ст, при вызове фб передаваемые ему параметры в столбик написать, чтоб в онлайне значения переменных нагляднее смотрелись?
    Конечно.

  10. #10

    По умолчанию

    Ответы Евгения дали толчок к пониманию Многое стало понятнее и проще. Просьба помочь еще с одним вопросом. Хочу написать функциональный блок, который будет отрабатывать одинарный и двойной "клик" клавиши света. И хочу фиксировать время нажатия и отжатия клавиши в виде временной метки - timestamp в мс. Примерно так:

    VAR
    pressedAt: DWORD := 0; // Временная метка последнего нажатия клавиши "вниз"
    sysTimer: SystemTimeDate; // Системный таймер
    END_VAR

    pressedAt := (sysTimer.dwLowMSecs - (sysTimer.dwLowMSecs/1000) * 1000);

    В режиме симуляции sysTimer всегда равен нулю. Как правильно делать пошаговый debug в режиме симуляции?

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Посоветуйте что почитать, чтобы научиться программировать
    от OAS1606 в разделе Программируемые реле
    Ответов: 44
    Последнее сообщение: 16.04.2021, 13:17
  2. Что интересного почитать? Канал на Яндекс.Дзен от датчиков ОВЕН!
    от Алексей Сидорцев в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 06.12.2019, 21:59
  3. Описание по энкодерам. Где почитать?
    от TV13M в разделе Трёп (Курилка)
    Ответов: 3
    Последнее сообщение: 26.01.2018, 09:02

Ваши права

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