1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Выделить бит из байта в VBS

Ответить

Автор темы
piv
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 05 сен 2010, 21:56
Имя: Игорь
Страна: Украина
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Выделить бит из байта в VBS

Сообщение piv »

Добрый день!

Нужна помощь в такой задаче.
В фейсплейте .fpt, в скрипте VBS реализован код изменения цвета графического элемента по тегу, типа Байт.
В ПЛК этот тег собирается из битов, упаковывается в байт и попадает в WinCC. Мне нужно изменять цвет по
конкретному биту.
В принципе, если присвоить входную переменную "точка нужный бит", то все работает. Но проект уже реализован
так, что входная переменная, к фейсплейту, назначена полностью как байт. И тогда нужно по всем экранам
ручками делать перепривязки.
Вот я и подумал, может лучше это сделать в коде самого фейсплейта. Но у меня не получается выделить один бит
из байта в VBS......

Прошу помощи в решении моей задачи.

Отправлено спустя 16 минут 33 секунды:
Да, стоит ПК с обычной (не портальной) WinCC v7.4

SaNNy
освоился
освоился
Сообщения: 233
Зарегистрирован: 01 фев 2010, 10:37
Имя: Александр
Страна: Россия
город/регион: Брянск
Благодарил (а): 10 раз
Поблагодарили: 27 раз

Выделить бит из байта в VBS

Сообщение SaNNy »

Код: Выделить всё

Function leftshift(op,n)
 Dim shiftleft, i
 leftshift = op
  For i = 0 To n - 1
  leftshift = leftshift * 2 
  Next  
End Function 

Function testBit(x, Bit)
	Dim y
        y = leftshift(1,Bit)
        If (y And x) Then testBit=1 Else testBit=0
End Function

WScript.Echo testBit(123, 7) & testBit(123, 6) & testBit(123, 5) & testBit(123, 4) & " " & testBit(123, 3) & testBit(123, 2) & testBit(123, 1) & testBit(123, 0)
Аватара пользователя

megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Выделить бит из байта в VBS

Сообщение megavolt86 »

piv писал(а): 01 сен 2023, 13:43 Мне нужно изменять цвет по
конкретному би
так зачем вам писать отделтный скрипт если это уже реализовано штатными функциями winCC...
В свойствах графического элемента фейсплейта на пункте background color создаете анимацию, можно но битам, по значениям выбирать изменение цвета.
Под рукой нет winCC, скриншотами показать не смогу , если только через пару дней...
:ext_secret:

Автор темы
piv
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 05 сен 2010, 21:56
Имя: Игорь
Страна: Украина
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Выделить бит из байта в VBS

Сообщение piv »

SaNNy, спасибо.
По пробую разобраться (я новичек.........).

megavolt86, так бы и сделал, однако в самом фейсплейте .fpt, на background color
эта динамическая анимация не активна, только VBS.

I_m
освоился
освоился
Сообщения: 257
Зарегистрирован: 28 сен 2022, 15:26
Имя: Андрей
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Выделить бит из байта в VBS

Сообщение I_m »

Можно чуть проще, по-моему:

Код: Выделить всё

Function testBit(x, Bit)
	Dim y
        y = 2^Bit
        If (y And x) Then testBit=1 Else testBit=0
End Function

Автор темы
piv
здесь недавно
здесь недавно
Сообщения: 76
Зарегистрирован: 05 сен 2010, 21:56
Имя: Игорь
Страна: Украина
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Выделить бит из байта в VBS

Сообщение piv »

Добрый день.
Все таки решил пойти по простому пути, в привязке фейсплейта, через Динамический Диалог.
А код VBS внутри удалил.
Необходимо будет перепривязать все фейсплейты на экранах, но трудности нас не пугают,
плюс экранов не очень много......

Всем ответившим огромное спасибо!!!
(Немного по разбирался с VBS, поэтому ваша помощь в любом случае, для меняя, полезна!!!)
Ответить

Вернуться в «WinCC»