<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева системы > БД-коннекторы и блоки процедур > Использование хранимых процедур > Запись в БД |
Рассмотрим работу с хранимой процедурой на конкретном примере. Например, требуется записывать в базу значения по определенному событию.
Сначала создадим базу, используя Management Studio – аналогично, когда мы создавали базу для хранения данных архива MasterSCADA, назовем ее "First_example" (данное имя нужно также прописать в БД-коннекторе в MasterSCADA), добавим таблицу через контекстное меню, назовем ее "MyTable".
Мы будем записывать три значения и метку времени, поэтому нам нужно четыре столбца "Time_val", "Val1", "Val2", "Val3". Кроме того нам также будет нужен первичный ключ, в данном случае мы будем использовать инкрементируемое поле, назовем столбец "ID".
Нужно чтобы поле "ID" было инкрементируемым. В нижней части окна есть таблица Свойства столбца, найдем в нем параметр Спецификация идентификатора и установим его в "Да". Настройки начального значения и шага можно оставить без изменения – теперь при добавлении данных значение поле "ID" будет увеличиваться на единицу.
Вызовем контекстное меню столбца и выберем пункт: Задать первичный ключ.
Столбец будет иметь метку в виде ключа. Добавим еще четыре столбца, один – типа DateTime (дата-время), остальные – int (целый).
Столбец: Разрешить значения Null - разрешает ввод пустых значений. Запретим ввод пустых значений для столбца "Time_val". В итоге таблица будет иметь следующий вид:
Теперь создадим хранимую процедуру, которая будет записывать данные в базу. Для этого в объекте базы "Программирование" есть специальный раздел "Хранимые процедуры" - вызовем контекстное меню и добавим хранимую процедуру. Введем в появившемся окне код процедуры.
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. Для этого добавим процедуру и настроим ее на закладке Параметры.
На стандартной закладке Опрос настраивается режим выполнения процедуры. По умолчанию установлен режим "По изменению". Это значит, что процедура будет выполняться, когда измениться какой-либо его из параметров. Но нам необходимо записывать данные по определенному событию. Для этого на закладке Параметры поставим галочку Управление выполнением. Появится дополнительный вход "Выполнять" - когда на нем "Ложь" процедура перестает выполняться.
Теперь добавим объект в дерево объектов, а в него добавим необходимые переменные – модуль расчет с функцией DateTime( ) (будет выдавать текущее время) и 3 команды типа "Целый" в режиме имитации. Также добавим один ФБ "Пульсатор" который будет выдавать импульс для выполнения процедуры. Установим связи с соответствующими переменными в дереве системы.
Теперь можно запустить режим исполнения. В случае возникновения ошибок на выходах "Код ошибки" и "Текст ошибки" появятся сообщения.
Остановим режим исполнения. Проверим, что данные в базу записаны. Для этого снова перейдем в Management Studio, вызовем контекстное меню таблицы, и выберем пункт: Выбрать первую 1000 строк.
Будет выполнен SQL запрос, и мы сможем увидеть сохраненные в базе данные.
Существует также режим записи архивных значений. В этом режиме в базу передаются не действующие, а архивные значения и метка времени. При очередном выполнении процедуры определяется ближайшее время архивного значения, которое еще не было передано ранее (по всем архивным параметрам). Каждый цикл вызова хранимой процедуры в базу записывается строка из архива данных, таким образом если данные не изменялись, то и в базу они записаны не будут. В этом режиме также исключена возможность потери данных – если процедура какое-то время не будет выполняться, то впоследствии данные все равно будут записаны.
Для корректной работы необходимо поставить галочку: Использовать архивные значения, а также добавить параметр типа "Время", указать его номер в соответствующем поле (подсоединять на его вход в дереве системы ничего не нужно!). При этом способ опроса у хранимой процедуры нужно установить на Периодический.
Если изменилось несколько параметров в пределах диапазона, заданного в поле Временная мертвая зона, то эти параметры записываются в базу одним запросом.
Кроме этого, у хранимой процедуры необходимо включить периодический опрос на вкладке "Опрос":
Хранимая процедура в таком режиме работы никаких отличий не имеет. Для данного примера она будет иметь такой же вид, как и в предыдущем примере (запись ведется в базу "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
Теперь в таблицу будут записываться значения из архива.