Работа с битами

Avatar
  • обновлен
Здравствуйте.

1 - Смотрю ваш пример "Работа с битами", он не работает.
2 - в выборе переменных есть канал "Тест" и "Скрипт", а в редакторе каналов нет.
Что это за каналы и как работают?
3 - Не найду, как объявить глобальную переменную?
Avatar
vik
а как запаковать в dword (LongWord)
либо биты паковать напрямую, либо сложить два ворда.
Вот код. Если можно проще, то выложите пожалуйста.
[spoiler]
bin01,bin02 и тд виртульные каналы (переключатели)
На выходе всё упаковано в Dword и отправленно на PLC
var varr :word; //промежуточное значение bit0r,bit1r,bit2r,bit3r,bit4r,bit5r,bit6r,bit7r,bit8r, bit9r,bit10r,bit11r,bit12r,bit13r,bit14r,bit15r,bit16r, bit17r,bit18r,bit19r,bit20r,bit21r,bit22r,bit23r,bit24r, bit25r,bit26r,bit27r,bit28r,bit29r,val2 :boolean; begin bit0r:= ReadValue('bin01'); bit1r:= ReadValue('bin02'); bit2r:= ReadValue('bin03'); bit3r:= ReadValue('bin04'); bit4r:= ReadValue('bin04a'); bit5r:= ReadValue('bin05'); bit6r:= ReadValue('bin06'); bit7r:= ReadValue('bin06e'); bit8r:= ReadValue('bin07'); bit9r:= ReadValue('bin08'); bit10r:= ReadValue('bin08d'); bit11r:= ReadValue('bin08n'); bit12r:= ReadValue('bin09'); bit13r:= ReadValue('bin10'); bit14r:= ReadValue('bin11'); bit15r:= ReadValue('bin12'); bit16r:= ReadValue('bin12a'); bit17r:= ReadValue('bin13'); bit18r:= ReadValue('bin14'); bit19r:= ReadValue('bin15'); bit20r:= ReadValue('bin16'); bit21r:= ReadValue('bin17'); bit22r:= ReadValue('bin18'); bit23r:= ReadValue('bin19'); bit24r:= ReadValue('bin20'); bit25r:= ReadValue('bin21'); bit26r:= ReadValue('bin22'); bit27r:= ReadValue('bin23'); bit28r:= ReadValue('bin24'); if bit0r=True then SetOnBit(varr,0) else SetOffBit(varr,0); if bit1r=True then SetOnBit(varr,1) else SetOffBit(varr,1); if bit2r=True then SetOnBit(varr,2) else SetOffBit(varr,2); if bit3r=True then SetOnBit(varr,3) else SetOffBit(varr,3); if bit4r=True then SetOnBit(varr,4) else SetOffBit(varr,4); if bit5r=True then SetOnBit(varr,5) else SetOffBit(varr,5); if bit6r=True then SetOnBit(varr,6) else SetOffBit(varr,6); if bit7r=True then SetOnBit(varr,7) else SetOffBit(varr,7); if bit8r=True then SetOnBit(varr,8) else SetOffBit(varr,8); if bit9r=True then SetOnBit(varr,9) else SetOffBit(varr,9); if bit10r=True then SetOnBit(varr,10) else SetOffBit(varr,10); if bit11r=True then SetOnBit(varr,11) else SetOffBit(varr,11); if bit12r=True then SetOnBit(varr,12) else SetOffBit(varr,12); if bit13r=True then SetOnBit(varr,13) else SetOffBit(varr,13); if bit14r=True then SetOnBit(varr,14) else SetOffBit(varr,14); if bit15r=True then SetOnBit(varr,15) else SetOffBit(varr,15); if bit16r=True then SetOnBit(varr,16) else SetOffBit(varr,16); if bit17r=True then SetOnBit(varr,17) else SetOffBit(varr,17); if bit18r=True then SetOnBit(varr,18) else SetOffBit(varr,18); if bit19r=True then SetOnBit(varr,19) else SetOffBit(varr,19); if bit20r=True then SetOnBit(varr,20) else SetOffBit(varr,20); if bit21r=True then SetOnBit(varr,21) else SetOffBit(varr,21); if bit22r=True then SetOnBit(varr,22) else SetOffBit(varr,22); if bit23r=True then SetOnBit(varr,23) else SetOffBit(varr,23); if bit24r=True then SetOnBit(varr,24) else SetOffBit(varr,24); if bit25r=True then SetOnBit(varr,25) else SetOffBit(varr,25); if bit26r=True then SetOnBit(varr,26) else SetOffBit(varr,26); if bit27r=True then SetOnBit(varr,27) else SetOffBit(varr,27); if bit28r=True then SetOnBit(varr,28) else SetOffBit(varr,28); WriteValue('odwTestMU',varr); //Записать готовы результат в DWORD end. [/spoiler]

RE:
Проверил в работе. Работает :)
Avatar
SIMP Tech (Сергей)
День добрый.

Пример во вложении.

Ребята может кто подкинуть примерчик работы с битами на Паскале?
Первая задача разложить WORD на биты, а вторая свернуть биты в Word.
Буду очень признателен за примеры.


<a href="/s/attachments/19809/1/0/ed428b2f9f90c6b545559f3731b94d1b.zip" class="i_item_file"><i class="icon-file"></i> examplebit.zip</a>
examplebit.zip
Avatar
Сергей
Всем доброго дня!
Ребята может кто подкинуть примерчик работы с битами на Паскале?
Первая задача разложить WORD на биты, а вторая свернуть биты в Word.
Буду очень признателен за примеры.
Avatar
SIMP Tech (Сергей)
да, работает так как и задумано.
Отлично. Будут вопросы, обращайтесь.
Avatar
vik
да, работает так как и задумано.
Avatar
SIMP Tech (Сергей)
pre. Спасибо вам за очень быструю поддержку. Молодцы стараетесь держать марку.

По сути ваше решение одно и тоже с моим. Но! Ваш работает!
Делаю как у вас. Мучаясь с "перебиванием каналов". Работает. Мистика.
Делаю откат на старое. Не работает. И тут я "увидел" баг, мать его.
При малейшем изменении канала в конфигураторе каналов или даже просто иногда спонтанно происходит следующие.
В редакторе мнемосхем при привязке на прямоугольник на переменную типа bool? можно выбирать в состоянии не вкл откл, а уставки мин максимум и норма. От сюда и глюки мои.
После сотого переназначения (чтобы видно было свойства bool), заработало.
Вот так, пол дня на отлов бага и обход его :)

Ок. Понял. По свойствам канала будем смотреть. Т.е. сейчас все нормально работает?
Avatar
vik
pre. Спасибо вам за очень быструю поддержку. Молодцы стараетесь держать марку.

По сути ваше решение одно и тоже с моим. Но! Ваш работает!
Делаю как у вас. Мучаясь с "перебиванием каналов". Работает. Мистика.
Делаю откат на старое. Не работает. И тут я "увидел" баг, мать его.
При малейшем изменении канала в конфигураторе каналов или даже просто иногда спонтанно происходит следующие.
В редакторе мнемосхем при привязке на прямоугольник на переменную типа bool? можно выбирать в состоянии не вкл откл, а уставки мин максимум и норма. От сюда и глюки мои.
После сотого переназначения (чтобы видно было свойства bool), заработало.
Вот так, пол дня на отлов бага и обход его :)
Avatar
SIMP Tech (Сергей)
не работает, т.е. без изменений.
Можно сделать разбивку в opc, но нагрузка большая будет.

Проверили все работает. Можете скинуть скриншот графика.
2.zip
Avatar
SIMP Tech (Сергей)
не работает, т.е. без изменений.
Можно сделать разбивку в opc, но нагрузка большая будет.

ок. сейчас проверим. По результатам отпишусь.
Avatar
vik
не работает, т.е. без изменений.
Можно сделать разбивку в opc, но нагрузка большая будет.