Просмотр полной версии : Обращение к выходам через WORD
G.H.O.S.T.
07.02.2024, 20:46
Всем доброго. В начале лирика. Пишу программу на языке IL. Перешёл в область ПЛК из микроконтроллеров, там писАл на ассемблере. Мне так проще. Но документация на ПЛК весьма скудна. Общение со службой поддержки очень долгое и не очень информативное. Большую часть информации приходится почерпывать из видиоуроков.
И так к вопросу. Задача управлять скоростью частотника через 4 входа комбинацией битов, то есть 16 скоростей. Возникла идея на панели оператора сделать окно ввода от 1 до 16 и передавать как WORD в ПЛК. В ПЛК для управления использовать последние 4 выхода DO20-DO24 (ПЛК110-60). В CodeSys выход обозначен как SPEED AT%QB3.2, и он состоит из 8 бит. То есть оперировать можно только битами. А как обратиться к выходам как к WORD?
kondor3000
07.02.2024, 21:19
Всем доброго. В начале лирика. Пишу программу на языке 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.
G.H.O.S.T.
07.02.2024, 21:42
Точняк. Я даже не заметил что группу битов выхода обозвал SPEED. Ща попробую.
G.H.O.S.T.
07.02.2024, 21:56
Ни фига не вышло. Выходы имеют тип BYTE, в MODBUS такого типа нет, там только WORD или BIT. Что бы переключать на панели оператора я ограничен в возможностях, могу использовать только WORD. Остаётся только в программе задать промежуточную область, в неё записывать WORD и черпать от туда биты. Только как сделать пока не придумал. Больно кудрявый костыль получается.
kondor3000
07.02.2024, 22:01
Ни фига не вышло. Выходы имеют тип BYTE, в MODBUS такого типа нет, там только WORD или BIT. Что бы переключать на панели оператора я ограничен в возможностях, могу использовать только WORD. Остаётся только в программе задать промежуточную область, в неё записывать WORD и черпать от туда биты. Только как сделать пока не придумал. Больно кудрявый костыль получается.
Полученную маску WORD можно сразу распаковать в биты, имена которых забиты на выходы, так же через точку. Выше уже писал.
Так же можно разложить любую переменную на байты если надо. Например Mask : WORD ;
BYTE1:=WORD_TO_BYTE (Mask) AND 255 ;
BYTE2:=WORD_TO_BYTE (SHR(Mask,8)) ;
G.H.O.S.T.
08.02.2024, 15:56
Спасибо. Буду разбираться.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot