Показано с 1 по 6 из 6

Тема: Обращение к выходам через WORD

  1. #1

    По умолчанию Обращение к выходам через WORD

    Всем доброго. В начале лирика. Пишу программу на языке IL. Перешёл в область ПЛК из микроконтроллеров, там писАл на ассемблере. Мне так проще. Но документация на ПЛК весьма скудна. Общение со службой поддержки очень долгое и не очень информативное. Большую часть информации приходится почерпывать из видиоуроков.
    И так к вопросу. Задача управлять скоростью частотника через 4 входа комбинацией битов, то есть 16 скоростей. Возникла идея на панели оператора сделать окно ввода от 1 до 16 и передавать как WORD в ПЛК. В ПЛК для управления использовать последние 4 выхода DO20-DO24 (ПЛК110-60). В CodeSys выход обозначен как SPEED AT%QB3.2, и он состоит из 8 бит. То есть оперировать можно только битами. А как обратиться к выходам как к WORD?

  2. #2

    По умолчанию

    Цитата Сообщение от G.H.O.S.T. Посмотреть сообщение
    Всем доброго. В начале лирика. Пишу программу на языке IL. Перешёл в область ПЛК из микроконтроллеров, там писАл на ассемблере. Мне так проще. Но документация на ПЛК весьма скудна. Общение со службой поддержки очень долгое и не очень информативное. Большую часть информации приходится почерпывать из видиоуроков.
    И так к вопросу. Задача управлять скоростью частотника через 4 входа комбинацией битов, то есть 16 скоростей. Возникла идея на панели оператора сделать окно ввода от 1 до 16 и передавать как WORD в ПЛК. В ПЛК для управления использовать последние 4 выхода DO20-DO24 (ПЛК110-60). В CodeSys выход обозначен как SPEED AT%QB3.2, и он состоит из 8 бит. То есть оперировать можно только битами. А как обратиться к выходам как к WORD?
    Не знаю как на IL, а на языке ST и CFC, биты (с 0 по 15) можно упаковать в маску Mask ( имя регистра) типа WORD через точку, например Mask.0:=Bit0; Mask.1:=Bit1; Mask.2:=Bit2 и т. д.
    Также можно и распаковать, в обратную сторону.
    Выходы в ПЛК110-60 состоят из нескольких байт ( задать имя байту), в которые можно так же, через точку, упаковать биты с 0 по 7.
    Последний раз редактировалось kondor3000; 07.02.2024 в 21:39.

  3. #3

    По умолчанию

    Точняк. Я даже не заметил что группу битов выхода обозвал SPEED. Ща попробую.

  4. #4

    По умолчанию

    Ни фига не вышло. Выходы имеют тип BYTE, в MODBUS такого типа нет, там только WORD или BIT. Что бы переключать на панели оператора я ограничен в возможностях, могу использовать только WORD. Остаётся только в программе задать промежуточную область, в неё записывать WORD и черпать от туда биты. Только как сделать пока не придумал. Больно кудрявый костыль получается.

  5. #5

    По умолчанию

    Цитата Сообщение от G.H.O.S.T. Посмотреть сообщение
    Ни фига не вышло. Выходы имеют тип BYTE, в MODBUS такого типа нет, там только WORD или BIT. Что бы переключать на панели оператора я ограничен в возможностях, могу использовать только WORD. Остаётся только в программе задать промежуточную область, в неё записывать WORD и черпать от туда биты. Только как сделать пока не придумал. Больно кудрявый костыль получается.
    Полученную маску WORD можно сразу распаковать в биты, имена которых забиты на выходы, так же через точку. Выше уже писал.
    Так же можно разложить любую переменную на байты если надо. Например Mask : WORD ;
    Код:
    BYTE1:=WORD_TO_BYTE (Mask) AND 255 ;
    BYTE2:=WORD_TO_BYTE (SHR(Mask,8)) ;
    Последний раз редактировалось kondor3000; 07.02.2024 в 22:41.

  6. #6

    По умолчанию

    Спасибо. Буду разбираться.

Похожие темы

  1. Ответов: 18
    Последнее сообщение: 08.10.2021, 22:54
  2. Ответов: 5
    Последнее сообщение: 05.03.2018, 15:28
  3. Ответов: 3
    Последнее сообщение: 04.05.2017, 08:52
  4. Ответов: 17
    Последнее сообщение: 30.04.2015, 08:20
  5. Ответов: 13
    Последнее сообщение: 13.10.2008, 13:13

Ваши права

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