Библиотека графических элементов DaqLib для интерпретатора Painter(v)


Библиотека графических элементов DaqLib включает в себя набор графических элементов интерпретатора Painter, специально созданных для DAQ-системы, которые используются совместно с библиотекой общепринятых элементов графического интерфейса (GuiLib), а также библиотеки элементов (GostLib), созданных на основе стандартов ГОСТ, ЕСКД. Надо напомнить, что различные элементы одной или разных библиотек могут использоваться совместно, например элемент [Painter(v).GuiLib.SimpleBorder] используется для изображения рамки вокруг других элементов. При использовании графических элементов используются также описанные здесь договоренности, правила и рекомендации. В следующей таблице перечислены имеющиеся в библиотеке графические элементы. В скобках после описания аргументов указаны значения по умолчанию, принятые для данного элемента.
Таблица 1. Графические элементы библиотеки DaqLib.
Вид, Название, Аргументы Описание, Примеры, Комментарии

[Painter(v).DaqLib.RadiationHazard]
Аргументы:
1) glRadiationHazardBevel
- толщина отступа (2)
2) glRadiationHazardBackColor
- цвет фона (clYellow)
3) glRadiationHazardFillColor
- цвет изображения (clBlack)
Знак Радиационная опасность. Геометрия и окраска знака соответсвует ГОСТ 17925-72 и ГОСТ 12.4.026-2015, Приложение Ж1, пункт W05, однако он (для уменьшения размеров) не помещен в треугольник (как в предупреждающих знаках ГОСТ).
Пример:
[SensorList]
Sensor = RadiationHazard
[RadiationHazard]
Pos = 10, 10
Painter(v) = (glRadiationHazardBevel=2)+(glRadiationHazardBackColor=clYellow)+(glRadiationHazardFillColor=clBlack)
Painter(v) = [Painter(v).DaqLib.RadiationHazard]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo RadiationHazard
[]
    

[Painter(v).DaqLib.AirBlower.Right]
[Painter(v).DaqLib.AirBlower.Up]
[Painter(v).DaqLib.AirBlower.Left]
[Painter(v).DaqLib.AirBlower.Down]
Аргументы:
1) glAirBlowerBevel
- толщина отступа (2)
2) glAirBlowerLineWidth
- толщина линий контура (2)
3) glAirBlowerFillColor
- цвет заполнения (clSilver)
4) glAirBlowerLineColor
- цвет линий контура (clBlack)
Знак Воздуходувка.
Пример:
[SensorList]
Sensor = AirBlower.Right
[AirBlower.Right]
Pos = 60 10
Painter(v) = (glAirBlowerBevel=2)+(glAirBlowerLineWidth=2)+(glAirBlowerFillColor=clLime)+(glAirBlowerLineColor=clBlack)
Painter(v) = [Painter(v).DaqLib.AirBlower.Right]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo AirBlower.Right
[]
    

[Painter(v).DaqLib.FanBlower.Right]
[Painter(v).DaqLib.FanBlower.Up]
[Painter(v).DaqLib.FanBlower.Left]
[Painter(v).DaqLib.FanBlower.Down]
Аргументы:
1) glFanBlowerBevel
- толщина отступа (2)
2) glFanBlowerLineWidth
- толщина линий контура (2)
3) glFanBlowerFillColor
- цвет заполнения (clSilver)
4) glFanBlowerLineColor
- цвет линий контура (clBlack)
Знак Вытяжной вентилятор.
Пример:
[SensorList]
Sensor = FanBlower.Right
[FanBlower.Right]
Pos = 260 10
Painter(v) = (glFanBlowerBevel=2)+(glFanBlowerLineWidth=2)+(glFanBlowerFillColor=clLime)+(glFanBlowerLineColor=clBlack)
Painter(v) = [Painter(v).DaqLib.FanBlower.Right]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo FanBlower.Right
[]
    

[Painter(v).DaqLib.WaterPump.Right]
[Painter(v).DaqLib.WaterPump.Up]
[Painter(v).DaqLib.WaterPump.Left]
[Painter(v).DaqLib.WaterPump.Down]
Аргументы:
1) glWaterPumpBevel
- толщина отступа (2)
2) glWaterPumpLineWidth
- толщина линий контура (2)
3) glWaterPumpFillColor
- цвет заполнения (clSilver)
4) glWaterPumpLineColor
- цвет линий контура (clBlack)
Знак Водяной насос.
Пример:
[SensorList]
Sensor = WaterPump.Right
[WaterPump.Right]
Pos = 460 10
Painter(v) = (glWaterPumpBevel=2)+(glWaterPumpLineWidth=2)+(glWaterPumpFillColor=clLime)+(glWaterPumpLineColor=clBlack)
Painter(v) = [Painter(v).DaqLib.WaterPump.Right]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo WaterPump.Right
[]
    

[Painter(v).DaqLib.TankLevel]
Аргументы:
1) glTankLevelBevel
- толщина отступа (2)
2) glTankLevelLineWidth
- толщина линий контура (2)
3) glTankLevelFillColor
- цвет заполнения (clTeal)
4) glTankLevelBackColor
- цвет фона (clSilver)
5) glTankLevelLineColor
- цвет линий контура (clBlack)
5) glTankLevelPercent
- уровень заполнения в процентах (0)
Знак Уровень жидкости. Изображает бак (емкость, tank) с некоторым уровнем заполнения (level) жидкостью от 0 до 100 процентов.
Пример:
[SensorList]
Sensor = TankLevel
[TankLevel]
Pos = 10 60
Painter(v) = (glTankLevelBevel=2)+(glTankLevelLineWidth=2)+(glTankLevelFillColor=clTeal)+(glTankLevelBackColor=clSilver)
Painter(v) = (glTankLevelLineColor=clBlack)+(glTankLevelPercent=0)
Painter(v) = [Painter(v).DaqLib.TankLevel]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo TankLevel
[]
    
Для вычисления уровня заполнения бака и цвета жидкости могут использоваться выражения DaqScript. Например, в данном случае жидкость отображается красной или зеленой, если уровень (v) ниже или выше 20:
Painter(v) = (glTankLevelPercent=v)+(glTankLevelFillColor=clRed*le(v,20)+clLime*gt(v,20))
    

[Painter(v).DaqLib.FlowMeter.Right]
[Painter(v).DaqLib.FlowMeter.Up]
[Painter(v).DaqLib.FlowMeter.Left]
[Painter(v).DaqLib.FlowMeter.Down]
Аргументы:
1) glFlowMeterBevel
- толщина отступа (2)
2) glFlowMeterLineWidth
- толщина линий контура (2)
3) glFlowMeterFillColor
- цвет заполнения (clSilver)
4) glFlowMeterLineColor
- цвет линий контура (clBlack)
Знак Расходомер. Вертикальный (Up,Down) вид примерно соответствует ГОСТ 2.781-96, Таблица 5.17.
Пример:
[SensorList]
Sensor = FlowMeter.Right
[FlowMeter.Right]
Pos = 60 60
Painter(v) = (glFlowMeterBevel=2)+(glFlowMeterLineWidth=2)+(glFlowMeterFillColor=clLime)+(glFlowMeterLineColor=clBlack)
Painter(v) = [Painter(v).DaqLib.FlowMeter.Right]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo FlowMeter.Right
[]
    

[Painter(v).DaqLib.ManoMeter]
Аргументы:
1) glManoMeterBevel
- толщина отступа (2)
2) glManoMeterLineWidth
- толщина линий контура (2)
3) glManoMeterFillColor
- цвет заполнения (clSilver)
4) glManoMeterLineColor
- цвет линий контура (clBlack)
5) glManoMeterAngle
- угол поворота стрелки (45°)
Знак Манометр. Угол поворота стрелки отсчитывается в градусах против часовой стрелки от правой горизонтали (как в триганометрии). При угле glManoMeterAngle=135 вид примерно соответствует ГОСТ 2.781-96, Таблица 5.2.
Пример:
[SensorList]
Sensor = ManoMeter
[ManoMeter]
Pos = 260 60
Painter(v) = (glManoMeterBevel=2)+(glManoMeterLineWidth=2)+(glManoMeterFillColor=clLime)+(glManoMeterLineColor=clBlack)+(glManoMeterAngle=45)
Painter(v) = [Painter(v).DaqLib.ManoMeter]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo ManoMeter
[]
    

[Painter(v).DaqLib.UniHeater]
Аргументы:
1) glUniHeaterBevel
- отступ нагревателя от края изображения (2)
2) glUniHeaterColor
- цвет нагревателя (clBlack)
UniHeater рисует "универсальный нагреватель" - стилизованное изображение спирального нагревателя, намотанного вокруг цилиндрического сердечника.
Пример:
[SensorList]
Sensor = UniHeater
[UniHeater]
Pos = 310 60
Painter(v) = (glUniHeaterBevel=2)+(glUniHeaterColor=clBlack)
Painter(v) = [Painter(v).DaqLib.UniHeater]
Painter(v) = [Painter(v).GuiLib.SimpleBorder]
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp
Hint = Demo UniHeater
[]
    

Некоторые правила использования интерпретатора Painter(v)


Для использования графических библиотек Painter в мнемосхемах надо прежде всего вставить в файл мнемосхемы (*.CRC) ссылку на библиотеку ~~\Resource\DaqSite\Default\Painter.crc, чтобы сделать эти библиотеки доступными:
[ConfigFileList] ; Include the Painter GUI Library   ; Для доступа к библиотеке
ConfigFile = ~~\Resource\DaqSite\Default\Painter.crc ; Включаем Painter.crc
[]
[Circuit.StartupScript]                              ; Здесь задаются начальные значения
demo_parameter = 0                                   ; параметров и переменных, если они нужны
[]
 
Для использования графических элементов Painter(v) в сенсоре надо задать параметры, а затем вставить секцию элемента, т.е. его имя в квадратных скобках [..]. Секция извлекается из библиотеки Painter.crc и содержит текст сценария, рисующего графический элемент. Например:
[SensorList]                                                                             ; в списке сенсоров
Sensor = ManoMeter                                                                       ; объявляем сенсор
[ManoMeter]                                                                              ; и описываем его:
Pos = 260 60                                                                             ; задаем координаты
Painter(v) = (glManoMeterBevel=2)+(glManoMeterLineWidth=2)+(glManoMeterFillColor=clLime) ; задаем параметры элемента
Painter(v) = (glManoMeterLineColor=clBlack)+(glManoMeterAngle=45)                        ; и еще  параметры элемента
Painter(v) = [Painter(v).DaqLib.ManoMeter]                                               ; вставляем секцию элемента
Tag#1 = 0, ~~\Resource\DaqSite\StdLib\Bitmaps\barbmp_48_48_4_silver.bmp                  ; задаем холст для рисования
Hint = Demo ManoMeter                                                                    ; и комментарий
[]                                                                                       ; всё готово!
 
Для задания холста (пустого изображения, "подложки" для рисования на нем) используется утилита barbmp или ledbmp, для вызова которой достаточно указать специальное имя BMP-файла:
  path\barbmp_sx_sy_cd_cl.bmp      - для задания изображения в пикселях
  или
  path\ledbmp_cw_pt_cd_cl_fn.bmp   - для задания изображения в размерах заданного фонта
  где 
      path   - существующий каталог, например ~~\Resource\DaqSite\StdLib\Bitmaps
      barbmp - ссылка на утилиту barbmp
      ledbmp - ссылка на утилиту ledbmp
      sx,sy  - размеры изображения в пикселях (size x, size y)
      cw,pt  - ширина текстового поля в символах (char  width) и размер фонта (pt)
      cd,cl  - битность цвета (color depth) и цвет (color) изображения
      fn     - имя фонта без пробелов
 
При вычислении выражений часто используется присвоение =, скобки (), операторы + - * / ^ %, логические функции eq, ne, gt, ge, lt, le, isbit, not. Скобки, операторы и присвоение позволяют объединять несколько выражений в одной строке, а логические функции позволяют задавать довольно сложные логические выражения. Например:
Painter(v) = (glManoMeterBevel=2)+(glManoMeterLineWidth=2)         ; задаем два параметра в одном выражении
Painter(v) = (glManoMeterFillColor=clLime*le(v,10)+clRed*gt(v,10)) ; зеленый/красный, если v меньше/больше 10
 
Напоминаем, что в переменной v содержится значение источника данных сенсора, то есть присоединенного тега или кривой.