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

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

1 - Смотрю ваш пример "Работа с битами", он не работает.
2 - в выборе переменных есть канал "Тест" и "Скрипт", а в редакторе каналов нет.
Что это за каналы и как работают?
3 - Не найду, как объявить глобальную переменную?
Avatar
SIMP Tech (Сергей)
А лучше выложите здесь. Информации мало с примерами скриптов.

Пример по работе с битами

http://www.simplight.ru/files/help/scripts/bit_example.slz
Avatar
vik
Работа с битами прошла вроде успешно, но есть одно огромное но!
Дано:
Есть word равный 16
Раскладываем его на биты 00001000 00000000
скриптом
В мониторе выводим "текст" привязанный к каналу (тот самый битовый)
Клацаем по апплету текст и смотри график. он в виде гребенки.
Почему? При выполнении скрипта биты сбрасываются в нулевое значение и заново устанавливаются.
И получается гирлянда из битов. Как поправить?
Avatar
SIMP Tech (Сергей)
День добрый.

Работа с битами прошла вроде успешно, но есть одно огромное но!
Дано:
Есть word равный 16
Раскладываем его на биты 00001000 00000000
скриптом
В мониторе выводим "текст" привязанный к каналу (тот самый битовый)
Клацаем по апплету текст и смотри график. он в виде гребенки.
Почему? При выполнении скрипта биты сбрасываются в нулевое значение и заново устанавливаются.
И получается гирлянда из битов. Как поправить?

Можно скрипт увидеть, или скрипт брали из примера?
Avatar
vik
[spoiler]
var val: word; val2: word; bit: byte; begin val := ReadValue('k2.Status-busd'); val2:=val div 256; bit := GetBit(val, 0); WriteValue('k2.status-busd-bit00', bit); bit := GetBit(val, 1); WriteValue('k2.status-busd-bit01', bit); bit := GetBit(val, 2); WriteValue('k2.status-busd-bit02', bit); bit := GetBit(val, 3); WriteValue('k2.status-busd-bit03', bit); bit := GetBit(val, 4); WriteValue('k2.status-busd-bit04', bit); bit := GetBit(val, 5); WriteValue('k2.status-busd-bit05', bit); bit := GetBit(val, 6); WriteValue('k2.status-busd-bit06', bit); bit := GetBit(val, 7); WriteValue('k2.status-busd-bit07', bit); bit := GetBit(val2, 0); WriteValue('k2.status-busd-bit08', bit); bit := GetBit(val2, 1); WriteValue('k2.status-busd-bit09', bit); bit := GetBit(val2, 2); WriteValue('k2.status-busd-bit10', bit); bit := GetBit(val2, 3); WriteValue('k2.status-busd-bit11', bit); bit := GetBit(val2, 4); WriteValue('k2.status-busd-bit12', bit); bit := GetBit(val2, 5); WriteValue('k2.status-busd-bit13', bit); bit := GetBit(val2, 6); WriteValue('k2.status-busd-bit14', bit); bit := GetBit(val2, 7); WriteValue('k2.status-busd-bit15', bit); end. [/spoiler]
раскладываю два байта.
Может val2 брать не из первого а из оригинала разделив на 256?
Avatar
SIMP Tech (Сергей)
каналы k2.status-busd-bit00-15 виртуальные?
Avatar
vik
k3.Status-busd реальный
k2.status-busd-bit00-15 виртуальный
Avatar
SIMP Tech (Сергей)
k3.Status-busd реальный
k2.status-busd-bit00-15 виртуальный

Ок, понятно. Т.е. если я правильно понял то каналы k2.status-busd-bit00-15 при каждом цикле скрипта сначала сбрасываются в 0, а потом принимают уже нужное значение. Так?
Avatar
vik
Абсолютно правильно!
Avatar
SIMP Tech (Сергей)
А попробует напрямую брать биты из Word без всякой математики:
GetBit(val, 0)…GetBit(val, 15)
Avatar
vik
уже пробовал. не работает.
было бы неплохо без скрипта в канале выбирать нужный бит.