bg

Фильтрация данных по значению OPC тега, и запись в базу только, когда значение меняется

Описание проблемы:

У меня есть переменная Kemro.opc.4.IF1.1.92.Mars1.SVs.system.sv_ShotCounter[14]="1562", которую я добавил и вижу в OPC Data Logger. Я хочу записывать данные в базу только в тот момент, когда этот счетчик изменяется.

Требования:

Подразумевается, что:

1. Вы создали конфигурацию в логгере (используя кнопку "Зеленый Плюс" в главном окне программы), добавили группу и OPC теги в ней. OPC логгер принимает данные с этого сервера и отображает их в главном окне программы.

2. Вы настроили запись в базу MySQL.

Решение:

1. Включите указанные опции группы OPC.

Свойства группы OPC
Рис.1. Настройки группы OPC

2. Скачайте и установите модуль "Script Execute".

3. Включите его (рис. 2).

Модуль Script Execute
Рис.2. Модуль Script Execute

4. Выберите модуль из списка и нажмите кнопку "Настроить" ниже.

5. В окне редактора скриптов выберите "PascalScript" из выпадающего списка "Тип скрипта".

6. Скопируйте код, указанный ниже. Измените его при необходимости. Как минимум нужно указать имя переменной в строке вида sName1:string = 'Kemro.opc.4.IF1.1.92.Mars1.SVs.system.sv_ShotCounter';.

7. Кликните на кнопке "Проверить" и убедитесь, что скрипт компилируется и не содержит ошибок.

8. Кликните на кнопке "OK" и сохраните все изменения.

Код PascalScript

var v1,v2:double;
    sName1:string = 'Kemro.opc.4.IF1.1.92.Mars1.SVs.system.sv_ShotCounter';
    sName2:string = 'LAST_VALUE';
begin
 // checks that a variable is stored before
 if IsVariableStored(sName2) then
   // retrieves a stored variable
   v1 := PopVariable(sName2)
 else
   // otherwise initialize our value
   v1 := 0;

 // checks a variable in a data packet
 if IsVariableDefined(sName1) then
  begin
    v2 := GetVariable(sName1);
    // stores a value between script executions
    PushVariable(sName2, v2);

    // the script will discard data packets by the following condition
    if v1 = v2 then
     DiscardDataPacket();
  end
 else
  // discard data also when the counter didn't read yet
  DiscardDataPacket();

end.

Сопутствующие статьи:

Настройка DCOM и OPC на Windows 2008 и Windows 7

Настройка DCOM и OPC на Windows 10, 11, Windows Server 2019, 2022