Запись в БД

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева системы > БД-коннекторы и блоки процедур > Использование хранимых процедур >

Запись в БД

Рассмотрим работу с хранимой процедурой на конкретном примере. Например, требуется записывать в базу значения по определенному событию.

Сначала создадим базу, используя Management Studio – аналогично, когда мы создавали базу для хранения данных архива MasterSCADA, назовем ее "First_example" (данное имя нужно также прописать в БД-коннекторе в MasterSCADA), добавим таблицу через контекстное меню, назовем ее "MyTable".

BDpart2_img3

Мы будем записывать три значения и метку времени, поэтому нам нужно четыре столбца "Time_val", "Val1", "Val2", "Val3". Кроме того нам также будет нужен первичный ключ, в данном случае мы будем использовать инкрементируемое поле, назовем столбец "ID".

BDpart2_img4

Нужно чтобы поле "ID" было инкрементируемым. В нижней части окна есть таблица Свойства столбца, найдем в нем параметр Спецификация идентификатора и установим его в "Да". Настройки начального значения и шага можно оставить без изменения – теперь при добавлении данных значение поле "ID" будет увеличиваться на единицу.

BDpart2_img5

Вызовем контекстное меню столбца и выберем пункт: Задать первичный ключ.

BDpart2_img6

Столбец будет иметь метку в виде ключа. Добавим еще четыре столбца, один – типа DateTime (дата-время), остальные – int (целый).

Столбец: Разрешить значения Null - разрешает ввод пустых значений. Запретим ввод пустых значений для столбца "Time_val". В итоге таблица будет иметь следующий вид:

BDpart2_img7

Теперь создадим хранимую процедуру, которая будет записывать данные в базу. Для этого в объекте базы "Программирование" есть специальный раздел "Хранимые процедуры" - вызовем контекстное меню и добавим хранимую процедуру. Введем в появившемся окне код процедуры.

CREATE PROCEDURE AddVal

@Time_val DateTime,

@Val1 int,

@Val2 int,

@Val3 int

AS

BEGIN

 Insert into MyTable(Time_val,Val1,Val2,Val3) values

 (@Time_val,@Val1,@Val2,@Val3);

END

GO

В первой строчке объявляется имя процедуры – "AddVal". Затем задаются переменные, для упрощения мы сделали их имена аналогичные столбцам в таблице "MyTable". Обратите внимание, что перед переменными стоит знак "@" - это идентификатор переменной.

В секции Begin – End должен располагаться непосредственно код процедуры. В данном случае код состоит из одного SQL запроса на запись. В таблицу "MyTable", в столбцы "Time_val", "Val1", "Val2", "Val3" записываются значения из переменных процедуры @Time_val, @Val1, @Val2, @Val3. Столбец "ID", как мы говорили ранее, будет заполняться самостоятельно – увеличивая свое значение.

Теперь настроим взаимодействие с MasterSCADA. Для этого добавим процедуру и настроим ее на закладке Параметры.

BDpart2_img8

На стандартной закладке Опрос настраивается режим выполнения процедуры. По умолчанию установлен режим "По изменению". Это значит, что процедура будет выполняться, когда измениться какой-либо его из параметров. Но нам необходимо записывать данные по определенному событию. Для этого на закладке Параметры поставим галочку Управление выполнением. Появится дополнительный вход "Выполнять" - когда на нем "Ложь" процедура перестает выполняться.

BDpart2_img9

 

Теперь добавим объект в дерево объектов, а в него добавим необходимые переменные – модуль расчет с функцией DateTime( ) (будет выдавать текущее время) и 3 команды типа "Целый" в режиме имитации. Также добавим один ФБ "Пульсатор" который будет выдавать импульс для выполнения процедуры. Установим связи с соответствующими переменными в дереве системы.

BDpart2_img10

Теперь можно запустить режим исполнения. В случае возникновения ошибок на выходах "Код ошибки" и "Текст ошибки" появятся сообщения.

BDpart2_img11

Остановим режим исполнения. Проверим, что данные в базу записаны. Для этого снова перейдем в Management Studio, вызовем контекстное меню таблицы, и выберем пункт: Выбрать первую 1000 строк.

BDpart2_img12

Будет выполнен SQL запрос, и мы сможем увидеть сохраненные в базе данные.

BDpart2_img13

Существует также режим записи архивных значений. В этом режиме в базу передаются не действующие, а архивные значения и метка времени. При очередном выполнении процедуры определяется ближайшее время архивного значения, которое еще не было передано ранее (по всем архивным параметрам). Каждый цикл вызова хранимой процедуры в базу записывается строка из архива данных, таким образом если данные не изменялись, то и в базу они записаны не будут. В этом режиме также исключена возможность потери данных – если процедура какое-то время не будет выполняться, то впоследствии данные все равно будут записаны.

Для корректной работы необходимо поставить галочку: Использовать архивные значения, а также добавить параметр типа "Время", указать его номер в соответствующем поле (подсоединять на его вход в дереве системы ничего не нужно!). При этом способ опроса у хранимой процедуры нужно установить на Периодический.

Если изменилось несколько параметров в пределах диапазона, заданного в поле Временная мертвая зона, то эти параметры записываются в базу одним запросом.

BDpart2_img14

Кроме этого, у хранимой процедуры необходимо включить периодический опрос на вкладке "Опрос":

BDpart2_img15

Хранимая процедура в таком режиме работы никаких отличий не имеет. Для данного примера она будет иметь такой же вид, как и в предыдущем примере (запись ведется в базу "MyTable1")

CREATE PROCEDUREAddArcVal

@Time_val DateTime,

@Val1 int,

@Val2 int,

@Val3 int

AS

BEGIN

 Insert intoMyTable1(Time_val,Val1,Val2,Val3)values

 (@Time_val,@Val1,@Val2,@Val3);        

END

Теперь в таблицу будут записываться значения из архива.

BDpart2_img16