запись значений в SQL-сервер

Вопросы по программе Lectus Modbus OPC/DDE server
Alexey
Сообщения: 2
Зарегистрирован: 04 янв 2013, 07:51

запись значений в SQL-сервер

Сообщение Alexey »

День добрый.
Помогите разобраться. Создал два узла, первый собирает данные со сторонних ОРС, второй настроен на БД MySQL (запись в БД).
Одну переменную (меняется 1-8 раз в час) привязал к узлу БД.
Как создать условие, что бы скрипт записи выполнялся по изменению значения переменной?
На данный момент запись идет с периодом по опросу.

PS: пока не обновил до последней версии, записать в БД не смог.

+++++++++++++++++++++++++
Разобрался.
В настройках созданного узла по ОРС, в "Периодический опрос" поставил "НЕТ" , было значение "Синхронный (из кеша)"

========================
Вопрос один остался. Надо получить дату.
Составная переменная не катит, с БД проблемы, там DATA стоит, а тут строковая получается (надо в виде 2013-01-14).
Как сделать дату??
++++++++++++++++++++++++
И тут разобрался. надо в составной переменной писать на "Чтении" "Скрипт" -

Код: Выделить всё

Item(Item):=strtostamp(now)

Переменная типа DATA!!!!!!
Дай бог кому нибудь и поможет.

Разработчикам СПАСИБО!!!!!!!
Alexey
Сообщения: 2
Зарегистрирован: 04 янв 2013, 07:51

Re: запись значений в SQL-сервер

Сообщение Alexey »

Подскажите, как сделать определенное кол-ло знаков после запятой у переменной типа Float ?
Надо ( #.## ) два знака, а на все что можем отобразить.
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: запись значений в SQL-сервер

Сообщение admin »

OPC сервер передает данные OPC клиенту (SCADA системе).
Параметры отображения настраиваются на верхней системе которая использует полученные значения.

Что касается значений отображаемых в сервере, они предназначены для удобного визуального отслеживания работы OPC сервера и представляется нецелесообразным настройка формата отображения значения.
evlmn

Re: запись значений в SQL-сервер

Сообщение evlmn »

Здравствуйте!

Использую PostgreSQL 9.2.3. Соединение с БД устанавливается и запрос типа

Код: Выделить всё

INSERT INTO arc VALUES (CURRENT_TIMESTAMP, 9, 1, Item(ch01))
успешно выполняться. Но, при выполнении блока на PL/pgsql

Код: Выделить всё

DO $$
DECLARE 
dt TIMESTAMP := CURRENT_TIMESTAMP;
src SMALLINT :=9;
BEGIN
INSERT INTO arc VALUES (dt, src, 1, Item(ch01));
...
END
$$;


вываливается ошибка. Код рабочий, экспериментально было определено что Лектус не правильно отрабатывает присваивание := Читая форум, пришел к выводу что Лектус должен работать и просто передавать код Постгресу. Почему так происходит?
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: запись значений в SQL-сервер

Сообщение admin »

1) Вышлите на lectussoft@gmail.com используемую конфигурацию *.cfg и укажите имя SQL переменной
2) Можете посмотреть в профайлере какой SQL скрипт доходит до SQL базы данных ?
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: запись значений в SQL-сервер

Сообщение admin »

Указанный SQL скрипт уходит к SQL базе данных.
Возможно данный SQL скрипт не поддерживается через ADO.
Реализуйте достаточно сложную бизнес логику в хранимой процедуре и вызывайте ее в SQL скрипте.
evlmn

Re: запись значений в SQL-сервер

Сообщение evlmn »

Насчет хранимой процедуры понятно. Тогда второй вопрос.

Передача значения modbus переменной в SQL запрос осуществляется использованием функции Item(имя переменной). Как я понимаю, данная функция подставляет значение перед оправкой запроса на SQL сервер. Отсюда следует, если я опрашиваю устройство с 256 каналами, мне необходимо 256 строк запросов, в которых будет меняться только имя переменной в item(). Это муторно и не удобно. Возможно ли передать данные иначе? Допустим организовать цикл или т.п.?
evlmn

Re: запись значений в SQL-сервер

Сообщение evlmn »

Нарыл на sql.ru что присваивание не обрабатывалась из-за того что ADO и Delphi передают параметры запроса через ":", удвоил двоеточие и все заработало в таком виде:

Код: Выделить всё

DO $$
DECLARE
dt TIMESTAMP ::= CURRENT_TIMESTAMP;
src SMALLINT ::=9;
BEGIN
INSERT INTO arc VALUES (dt, src, 1, 101.55);
...
END
$$;
Как только заменяю 101.55 на Item(ch01) сразу ошибка. В логе Постгрес:

Код: Выделить всё

2013-03-24 23:57:38 VLAT ОШИБКА:  ошибка синтаксиса (примерное положение: ")") (символ 125)
2013-03-24 23:57:38 VLAT ОПЕРАТОР:  DO $$

	DECLARE

	dt TIMESTAMP := CURRENT_TIMESTAMP;

	src SMALLINT := 9;

	BEGIN

	INSERT INTO public.arc VALUES (dt, src, 99, ?);

	END

	$$; 
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: запись значений в SQL-сервер

Сообщение admin »

evlmn писал(а):Насчет хранимой процедуры понятно. Тогда второй вопрос.

Передача значения modbus переменной в SQL запрос осуществляется использованием функции Item(имя переменной). Как я понимаю, данная функция подставляет значение перед оправкой запроса на SQL сервер. Отсюда следует, если я опрашиваю устройство с 256 каналами, мне необходимо 256 строк запросов, в которых будет меняться только имя переменной в item(). Это муторно и не удобно. Возможно ли передать данные иначе? Допустим организовать цикл или т.п.?
Нет к сожалению, т. к. не известен формат таблицы для хранения данных.
Можно сохранять состояние переменной во встроенной базе данных, но это в основном используется для последующей передачи исторических данных по каналу OPC HDA.
admin
Администратор
Сообщения: 578
Зарегистрирован: 05 сен 2010, 00:51

Re: запись значений в SQL-сервер

Сообщение admin »

evlmn писал(а):Нарыл на sql.ru что присваивание не обрабатывалась из-за того что ADO и Delphi передают параметры запроса через ":", удвоил двоеточие и все заработало в таком виде:

Код: Выделить всё

DO $$
DECLARE
dt TIMESTAMP ::= CURRENT_TIMESTAMP;
src SMALLINT ::=9;
BEGIN
INSERT INTO arc VALUES (dt, src, 1, 101.55);
...
END
$$;
Как только заменяю 101.55 на Item(ch01) сразу ошибка. В логе Постгрес:

Код: Выделить всё

2013-03-24 23:57:38 VLAT ОШИБКА:  ошибка синтаксиса (примерное положение: ")") (символ 125)
2013-03-24 23:57:38 VLAT ОПЕРАТОР:  DO $$

	DECLARE

	dt TIMESTAMP := CURRENT_TIMESTAMP;

	src SMALLINT := 9;

	BEGIN

	INSERT INTO public.arc VALUES (dt, src, 99, ?);

	END

	$$; 
При выполнении SQL скрипта, значение и качество переменной ch01 чему равно ?
Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя