Передача значений переменных через БД

> [HTML Version](passval.html)

Иногда требуется передавать текущие значения переменных из скада-системы в сторонние приложения. Обычно для этого используется [встроенный UA-сервер](https://simple-scada.com/help/manual/opcuaset.html), который можно включить в проекте Simple-Scada, а затем подключиться к нему любым UA-клиентом и получать значения переменных. Но некоторые приложения не могут работать как UA-клиент и такой способ не подойдет. В данной статье рассмотрим обмен данными через СУБД MySQL. Cкада-система будет сохранять текущие значения переменных в отдельную таблицу БД, а стороннее приложение будет читать эти значения. Сначала нужно создать в БД отдельную таблицу для хранения значений. Запускаем [MySQL Workbench](https://simple-scada.com/help/manual/mysql-workbench.html), находим БД в которую наш проект сохраняет архивные данные, кликаем ПКМ строку "Tables" и в раскрывшемся меню выбираем "Create Table":

_(./images/dbtransfer1.png)_



Назовем таблицу "current\_values", добавим в нее два столбца:

- **id **- тип данных INT, включаем флажки PK (Primary Key), NN (Not Null), UN (Unsigned);

- **value **-** **тип данных DOUBLE, включаем флажок NN (Not Null);

и нажмем кнопку "Apply":

_(./images/dbtransfer2.png)_



Откроется окно с SQL-кодом, в нем также нажимаем кнопку "Apply", а затем "Finish". Теперь таблица "current\_values" создана. Затем перейдем в редактор скриптов и [создадим новый скрипт](via-script-editor.md) с типом события "[Изменились переменные](changed-the-variables.md)". Добавим в список скрипта все переменные, значения которых нужно передавать в БД и нажмем кнопку "Создать":

_(./images/dbtransfer3.png)_

Напишем скрипт:

````
var  
  aQuery: string;  
begin  
  aQuery :=   
    'INSERT INTO \`current\_values\` (\`id\`, \`value\`) VALUES (' +  
      IntToStr(Variable.ID) + ',' +  
      FloatToStr(Variable.AsFloat, 8) +  
    ') ON DUPLICATE KEY UPDATE \`value\`=' + FloatToStr(Variable.AsFloat, 8);  
  
  RunSQL(aQuery);  
end.

````


Во время работы проекта в таблицу "current\_values" будут записываться текущие значения выбранных переменных. Значение в колонке "id" будет соответствовать ID-переменной (ID любой переменной можно посмотреть [в редакторе переменных](https://simple-scada.com/help/manual/variable-editor.html)(колонка ID)). При необходимости, через меню "[Проект -> Настройки -> База данных -> Другие действия -> Создать таблицу переменных](https://simple-scada.com/help/manual/dbset.html)" можно создать в БД таблицу переменных, которая будет содержать список всех переменных проекта. Теперь стороннее приложение может подключиться к БД и считывать значения нужных ему переменных. Пример запроса на выборку:

````
SELECT \`value\` FROM \`demo\_base\`.\`current\_values\` WHERE (\`id\` = 27);

````
Данный запрос считает из таблицы "current\_values" текущее значение переменной с ID = 27.

