Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: SeraX от 05 Марта 2024, 12:14:59

Название: Скрипт для дискретных входов
Отправлено: SeraX от 05 Марта 2024, 12:14:59
Доброго времени суток!
Имеется проект диспетчеризации (на скрине), там при подаче 1 на di 1 на выходе появляется 1, на di 2 - 2, на di 3 - 4, на di 4 - 8, на di 5 - 16, на di 6 - 32,....на di 16 - 32768. В проекте Scada сделал скрипты на каждую переменную (на скрине пример на di 16), по отдельности, когда сигнал подается на только на 1 вход, работает без нареканий, а когда подается сразу на несколько входов, то, естественно, ничего не работает, т.к. все числа суммируются.
Можете подсказать какой-нибудь скрипт для решения этой задачи, или предложить какой-нибудь другой вариант?
Заранее спасибо!
Название: Re: Скрипт для дискретных входов
Отправлено: AlexejKa38 от 05 Марта 2024, 12:26:47
Можно использовать функцию GetBit.

https://simple-scada.com/help/script/getbit.html?q=getbit
Название: Re: Скрипт для дискретных входов
Отправлено: Simple_Scada от 05 Марта 2024, 12:46:24
Здравствуйте.

Цитировать
В проекте Scada сделал скрипты на каждую переменную
Вместо множества однотипных скриптов нужно использовать один универсальный скрипт (https://simple-scada.com/help/script/script-types.html). Примеры скриптов можно найти по ссылке (https://simple-scada.com/help/script/sample-scripts.html). Пример универсального скрипта работы с битами можно найти по ссылке (https://simple-scada.com/help/script/bit-color.html). Также, целочисленные внешние переменные можно разбить на биты и работать с каждым битом отдельно - подробнее см. по ссылке (https://simple-scada.com/help/manual/extvarbits.html). Если не разберетесь, то пришлите текущую версию проекта на почту support@simple-scada.com и опишите, что именно требуется сделать.
Название: Re: Скрипт для дискретных входов
Отправлено: teplocom от 05 Марта 2024, 15:43:28
https://simple-scada.com/help/manual/extvarbits.html
А для OPC-UA данный способ разбития на битовые переменные работает? Пробовал, не получалось.
Название: Re: Скрипт для дискретных входов
Отправлено: SeraX от 05 Марта 2024, 15:45:58
У меня OPC DA. Всего одна сетевая переменная, которая работает на 16 входов по числу, по одному входу включается норм, но два и более не работает, т.к. числа суммируются по входам...
Проще на проекте показать, чем объяснить...проект во вложении...
Название: Re: Скрипт для дискретных входов
Отправлено: pan2000 от 06 Марта 2024, 04:39:50
  Здравствуйте.

Переменная Work_and_alarm состоит из набора отдельных битов, логическая функция GetBit возвращает значение отдельно бита из переменной по его номеру.
Всё множество скриптов проекта можно заменить на один универсальный, параметром которого будет свойство Tag объекта, которое должно быть номером бита конкретного объекта.
Далее выбрать все объекты, к которым применяется скрипт, и связать его с событием OnDataChange. А вот свойство Tag прийдется править для каждой группы (в проекте по два объекта) индивидуально.
Код: (delphi)
begin
  if Sender is TM_Object then         // проверяем, что Sender это объект
    with Sender as TM_Object do       // приводим Sender к типу "TM_Object"
      Visible := GetBit(AsInt, Tag);  // показать/скрыть объект
end.

Проект с исправлениями во вложении.
Название: Re: Скрипт для дискретных входов
Отправлено: SeraX от 06 Марта 2024, 08:38:54
Спасибо огромное!!!