как перебирать биты?

Олег
Сообщения: 795
Зарегистрирован: 18 янв 2011, 23:06

Re: как перебирать биты?

Сообщение Олег »

Так прокатывает?

E0=enum1.element1
D4.0@E0

Алексей29
Сообщения: 113
Зарегистрирован: 17 дек 2020, 12:28
Откуда: Воронеж

Re: как перебирать биты?

Сообщение Алексей29 »

bayk писал(а):
21 мар 2022, 17:02
а что мешает сразу крегистру обращаться на ST в режиме for-next?? и перебирай себе биты как идентификаторы.
не надо мне перебирать.
хотел упаковать битовые переменные в регистры. и нормально по именам обращаться

GoGo
Сообщения: 91
Зарегистрирован: 13 июн 2013, 16:14

Re: как перебирать биты?

Сообщение GoGo »

Скажу банальность, но можно:
1. Создать булевый массив и работать с элементами массива:
b : ARRAY[0..15] OF BOOL;
b[7]:=TRUE; b[i+1]:=FALSE;
Для переводов из слова в булевый массив и обратно написать простенький ФБ WordToBits и BitsToWord.
2. Создать 16-битную переменную типа WORD и обращаться напрямую к ее битам:
VarTest.0:=TRUE;
VarTest.12:=FALSE;
К сожалению в вложенных структурах подобное обращение к биту в слове невозможно. Почему? Для ST это необходимость.
Заменить на массив:
TYPE stBit :
STRUCT
b : ARRAY[0..15] OF BOOL;
END_STRUCT
END_TYPE

пример в конечной структуре:
TYPE stSys :
STRUCT
SubCount: INT;
CMD: stBit;
Sta: stBit;
SubSys: ARRAY[0..25] OF stSubSys;
AlarmOther: WORD;
END_STRUCT
END_TYPE

Для переводов из слова в булевый массив и обратно использовать ФБ WordToBits и BitsToWord.

Алексей29
Сообщения: 113
Зарегистрирован: 17 дек 2020, 12:28
Откуда: Воронеж

Re: как перебирать биты?

Сообщение Алексей29 »

нашел решение, возможно не самое изящное... но пока так

сздаем перечисление

TYPE motCtrl :
(
mstart :=0,
mstop,
......
);
END_TYPE

создаем структру

TYPE motor_t :
STRUCT
bits : ARRAY [0..15] OF BOOL;
END_STRUCT
END_TYPE

создаем переменную motor1 типа motor_t

обращаемся к битам

motor1.bits[motCtrl.mstart]

конечно громоздко но уже что-то.
будем копать дальше. жаль нельзя структуры как в С++

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: как перебирать биты?

Сообщение bayk »

я сам только начал осваивать ст, а с си не знаком, но ас200/300 вообще-то поддерживают си. работайте там, если удобно

Алексей29
Сообщения: 113
Зарегистрирован: 17 дек 2020, 12:28
Откуда: Воронеж

Re: как перебирать биты?

Сообщение Алексей29 »

bayk писал(а):
22 мар 2022, 09:03
я сам только начал осваивать ст, а с си не знаком, но ас200/300 вообще-то поддерживают си. работайте там, если удобно
я бы с удовольствием.но использование С там сделано, мякго говоря, не удобно. Да и не для основных задач.

Олег
Сообщения: 795
Зарегистрирован: 18 янв 2011, 23:06

Re: как перебирать биты?

Сообщение Олег »

Можно таблицу символов экспортировать в csv, предварительно поменяв системный разделитель.

В экселе, используя его автозаполнение (т.е. набить кучу адресов вроде D4.0 можно одним движением мыши) и команду "СЦЕПИТЬ" наделать кучу нужных символов типа motor1_motCtrl_mstart
и сто раз скопипастить motor2_motCtrl_mstart, motor3_motCtrl_mstart, motor100500_motCtrl_mstart
И коммент к каждому символу прикрепить можно.

Потом из экселя импортировать в ISPSoft

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

У Омрона, Сименса и Мицубиши копипастить символы в эксель и обратно можно, в ISPSoft только через экспорт-импорт, неудобно.

Алексей29
Сообщения: 113
Зарегистрирован: 17 дек 2020, 12:28
Откуда: Воронеж

Re: как перебирать биты?

Сообщение Алексей29 »

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

кстати в языке ST автодополнения ввода названия работает лучше. даже в скобках работает
фор.png
фор.png (15.78 КБ) 1423 просмотра
в LD так не хочет.

будем писать на ST

Ответить