17.11.2019, 12:33 [+3 UTC]
в нашей команде: 3 977 чел. | участники онлайн: 7 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.11.2019, 20:23

Последний вопрос:
17.11.2019, 12:05
Всего: 150984

Последний ответ:
17.11.2019, 02:39
Всего: 259420

Последняя рассылка:
17.11.2019, 10:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
03.05.2010, 21:12 »
Мироненко Николай Николаевич
Спасибо большое. Книги конечно пригодятся, но только для ознакомления, чтобы узнать подходит она мне и стоит ли покупать реальную книжку, потому как читать с компьютера не могу и так уже в очках smile Спасибо Вам большое за помощь. [вопрос № 178187, ответ № 261187]
18.12.2011, 09:12 »
Посетитель - 385948
Спасибо огромное за помощь !!! [вопрос № 184839, ответ № 269198]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Gluck
Статус: 7-й класс
Рейтинг: 873
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 565
puporev
Статус: Профессионал
Рейтинг: 306

Перейти к консультации №:
 

Консультация онлайн # 192997
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: helic (Посетитель)
Отправлена: 28.03.2018, 10:31
Поступило ответов: 1

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

Мне необходимо досконально разобраться с логикой этого примера
и применить эти шаблоны для строительства реальной системы

источник- https://simplight.ru/manual/komandy-raboty-s-globalnymi-peremennymi/flushglobalvarcache-



VALUE_Y' и VALUE_X - это измерительные каналы датчика
значения которых пишутся в и читаются с БД MS SQL

каналы Conn_status, result - диагнастические

моя задача записать значения и считать их за заданный промежуток времени

Прошу Вас поставить поясняющие комментарии в строках скрипта
у меня пока нет опыта в Pascal


Код (Pascal) :: выделить код
var
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
  ConnectionString: string;

  VALUE_Y_tm:string;
  VALUE_X_tm:string;
  DT_XY:String;
  tmptxt:String;

procedure Replace(var str, OldPattern, NewPattern: string);
  var
    ind: integer;
  begin
    ind := Pos(OldPattern, str);
    if ind = 0 then
      exit;
    str[ind] := NewPattern;
  end;

procedure OnStartScript;
begin
  CoInitialize(nil);
  ADOConnection := TADOConnection.Create(nil);
  ADOQuery := TADOQuery.Create(nil);
end;

procedure OnStopScript;
begin
  CoUninitialize;
  ADOConnection.free;
  ADOQuery.free;
end;


begin

  try
    ADOConnection.Connected := false;
    ADOQuery.Active := false;
    ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=testuser;Password=test;Initial Catalog=testDB;Data Source=DMITRYSIMP-PC\SQLEXPRESS;';
    ADOQuery.Connection := ADOConnection;

VALUE_Y_tm:= floatToStr(ReadValue('VALUE_Y'));  Replace(VALUE_Y_tm ,',','.');
VALUE_X_tm:=  floatToStr(ReadValue('VALUE_X')); Replace(VALUE_X_tm ,',','.');
DT_XY:=FormatDateTime('yyyy-mm-dd hh:nn:ss', now);
Replace(DT_XY ,' ','T');

    tmptxt:=Format('insert into Value_01(VALUE_Y, TIME_XY, VALUE_X) values (%s, ''%s'', %s)', [VALUE_Y_tm, DT_XY, VALUE_X_tm]);

     ADOQuery.SQL.Text:= tmptxt;
   ADOQuery.Active:=true;

  finally

  end;
end.




Второй скрипт


Код (Pascal) :: выделить код
var
  ADOConnection: TADOConnection;
  ADOQuery: TADOQuery;
  ConnectionString: string;
  val: string;

procedure OnStartScript;
begin
  CoInitialize(nil);
  ADOConnection := TADOConnection.Create(nil);
  ADOQuery := TADOQuery.Create(nil);
end;

procedure OnStopScript;
begin
  CoUninitialize;
  ADOConnection.free;
  ADOQuery.free;
end;


begin

  val:='';
  WriteValue('Conn_status',0);

  try
    ADOConnection.Connected := false;
    ADOQuery.Active := false;
    ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=testuser;Password=test;Initial Catalog=testDB;Data Source=DMITRYSIMP-PC\SQLEXPRESS;';
    ADOQuery.Connection := ADOConnection;
    ADOQuery.SQL.Text := 'SELECT TOP 1000 [VALUE_Y],[TIME_XY],[VALUE_X] FROM [dbo].[Value_01]';

    ADOQuery.Active:=true;

    if ADOQuery.Active then
    begin
     WriteValue('Conn_status',1);

     while ADOQuery.Eof = false do
     begin
       val := val+  ' VALUE_X='+floattostr(ADOQuery.FieldByName('VALUE_X').AsInteger);
       val:=  val+  ' TIME='+              ADOQuery.FieldByName('TIME_XY').AsString;
       val:=val+chr(13);

       ADOQuery.Next;
     end;
     WriteValue('result', val);
   end
   else begin
      AddToDebugLog('fail SQL connection');
      WriteValue('Conn_status',0);
   end;

  finally

  end;
end.

Последнее редактирование 28.03.2018, 12:14 Зенченко Константин Николаевич (Старший модератор)

Состояние: Консультация закрыта

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

Экспертов по SKADA SIMP Light, на портале нет. Несмотря,на то, что эта система использует pascal-подобные скрипты, они далеки от языка программирования: Pascal / Delphi / Lazarus.

Скачал, поставил, "балуюсь" с системой. И это весь мой экспертный уровень.
Обратитесь в службу поддержки, по отзывам, она работает нормально и помогает.
Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 06.04.2018, 16:13

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 192997
helic
Посетитель

ID: 401918

# 1

= общий = | 28.03.2018, 12:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Экспертам раздела:


Помогите пожалуйста адаптировать скрипт

var
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
ConnectionString: string;

VALUE_Y_tm:string;
VALUE_X_tm:string;
DT_XY:String;
tmptxt:String;

procedure Replace(var str, OldPattern, NewPattern: string);
var
ind: integer;
begin
ind := Pos(OldPattern, str);
if ind = 0 then
exit;
str[ind] := NewPattern;
end;

procedure OnStartScript;
begin
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOQuery := TADOQuery.Create(nil);
end;

procedure OnStopScript;
begin
CoUninitialize;
ADOConnection.free;
ADOQuery.free;
end;


begin

try
ADOConnection.Connected := false;
ADOQuery.Active := false;
ADOConnection.ConnectionString := 'Provider=DIAR;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=MonitoringStudio.MonitoringClient;Data Source=S702IS-SMIS\SQLEXPRESS;';
ADOQuery.Connection := ADOConnection;

VALUE_Y_tm:= floatToStr(ReadValue('VALUE_Y')); Replace(VALUE_Y_tm ,',','.');
VALUE_X_tm:= floatToStr(ReadValue('VALUE_X')); Replace(VALUE_X_tm ,',','.');
DT_XY:=FormatDateTime('yyyy-mm-dd hh:nn:ss', now);
Replace(DT_XY ,' ','T');

tmptxt:=Format('insert into Value_01(VALUE_Y, TIME_XY, VALUE_X) values (%s, ''%s'', %s)', [VALUE_Y_tm, DT_XY, VALUE_X_tm]);

ADOQuery.SQL.Text:= tmptxt;
ADOQuery.Active:=true;

finally

end;
end.

к записи в таблицу

USE [MonitoringStudio.MonitoringClient]
GO

/****** Object: Table [dbo].[DataExchange] Script Date: 28.03.2018 11:19:05 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[DataExchange](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TagValue] [float] NOT NULL,
[TagName] [nvarchar](50) NOT NULL,
[Timestamp] [datetime] NOT NULL,
CONSTRAINT [PK_DataExchange] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[DataExchange] ADD CONSTRAINT [DF__DataExcha__Times__0425A276] DEFAULT (getdate()) FOR [Timestamp]
GO

значение TagName можно задать в скрипте


мой вариант спотыкается на строке --- procedure Replace(var str, OldPattern, NewPattern: string);
пишет - Строка:13 Ошибка: ';' expected
но я ничего не менял в этом месте


var
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
ConnectionString: string;

VALUE_Y_tm:string;
VALUE_X_tm:string;
DT_XY:String;
TagName_Y_tm:String;
TagName_X_tm:String;
tmptxt_X:String;
tmptxt_Y:String

procedure Replace(var str, OldPattern, NewPattern: string);
var
ind: integer;
begin
ind := Pos(OldPattern, str);
if ind = 0 then
exit;
str[ind] := NewPattern;
end;

procedure OnStartScript;
begin
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOQuery := TADOQuery.Create(nil);

end;

procedure OnStopScript;
begin
CoUninitialize;
ADOConnection.free;
ADOQuery.free;
end;


begin

try
ADOConnection.Connected := false;
ADOQuery.Active := false;
ADOConnection.ConnectionString := 'Provider=DIAR;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=MonitoringStudio.MonitoringClient;Data Source=S702IS-SMIS\SQLEXPRESS;';
ADOQuery.Connection := ADOConnection;

TagName_Y_tm:= 'Èí_29_Y' ;
TagName_X_tm:= 'Èí_29_X' ;

VALUE_Y_tm:= floatToStr(ReadValue('VALUE_Y')); Replace(VALUE_Y_tm ,',','.');
VALUE_X_tm:= floatToStr(ReadValue('VALUE_X')); Replace(VALUE_X_tm ,',','.');
DT_XY:=FormatDateTime('yyyy-mm-dd hh:nn:ss', now);
Replace(DT_XY ,' ','T');

tmptxt_X:=Format('insert into DataExchange(TagValue, TagName, Timestamp) values (%s, ''%s'', %s)', [VALUE_X_tm, TagName_X_tm, DT_XY]);
tmptxt_Y:=Format('insert into DataExchange(TagValue, TagName, Timestamp) values (%s, ''%s'', %s)', [VALUE_Y_tm, TagName_Y_tm, DT_XY]);



ADOQuery.SQL.Text:= tmptxt_X;
ADOQuery.SQL.Text:= tmptxt_Y;
ADOQuery.Active:=true;

finally

end;
end.

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 2

= общий = | 28.03.2018, 12:34 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
helic:

© Цитата: helic
у меня пока нет опыта в Pascal

Не Pascal, а Delphi, который, только предоставляет инструменты для работы с базами данных. Если Вы хотите досконально разобраться, то Вам нужно изучить технологию ActiveX от MS.
Что именно Вам не понятно?

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

helic
Посетитель

ID: 401918

# 3

= общий = | 28.03.2018, 12:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер


Приветствую!

В настоящий момент не могу получить соединение с ODBC

ADOConnection.ConnectionString := 'Provider=DIAR;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=MonitoringStudio.MonitoringClient;Data Source=S702IS-SMIS\SQLEXPRESS;';

строка - ;Initial Catalog=MonitoringStudio.MonitoringClient; вызывает сомнения

-----
 Прикрепленный файл (кликните по картинке для увеличения):

helic
Посетитель

ID: 401918

# 4

= общий = | 28.03.2018, 14:17 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

помоги пожалуйста разобраться

Скрипт компилируется но дает ошибку

28.03.2018 13:51:34.707 Неправильный синтаксис около конструкции "T13@P1" - [insert]

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

USE [simp]
GO

/****** Object: Table [dbo].[DataExchange] Script Date: 28.03.2018 13:59:38 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[DataExchange](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TagValue] [float] NOT NULL,
[TagName] [nvarchar](50) NOT NULL,
[Timestamp] [datetime] NOT NULL,
CONSTRAINT [PK_DataExchange] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[DataExchange] ADD CONSTRAINT [DF__DataExcha__Times__0425A276] DEFAULT (getdate()) FOR [Timestamp]
GO


СКРИПТ



var
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
ConnectionString: string;

VALUE_Y_tm:string;
VALUE_X_tm:string;
DT_XY:String;
TagName_Y_tm:String;
TagName_X_tm:String;
tmptxt_X:String;
tmptxt_Y:String;

procedure Replace(var str, OldPattern, NewPattern: string);
var
ind: integer;
begin
ind := Pos(OldPattern, str);
if ind = 0 then
exit;
str[ind] := NewPattern;
end;

procedure OnStartScript;
begin
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOQuery := TADOQuery.Create(nil);

end;

procedure OnStopScript;
begin
CoUninitialize;
ADOConnection.free;
ADOQuery.free;
end;


begin

try
ADOConnection.Connected := false;
ADOQuery.Active := false;
// ADOConnection.ConnectionString := 'Provider=DIAR;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=MonitoringStudio.MonitoringClient;Data Source=S702IS-SMIS\SQLEXPRESS;';
ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=simp;Data Source=S702IS-SMIS\SQLEXPRESS;';
ADOQuery.Connection := ADOConnection;

TagName_Y_tm:= 'In_29_Y' ;
TagName_X_tm:= 'In_29_X' ;

VALUE_Y_tm:= floatToStr(ReadValue('VALUE_Y')); Replace(VALUE_Y_tm ,',','.');
VALUE_X_tm:= floatToStr(ReadValue('VALUE_X')); Replace(VALUE_X_tm ,',','.');
DT_XY:=FormatDateTime('yyyy-mm-dd hh:nn:ss', now);
Replace(DT_XY ,' ','T');

tmptxt_X:=Format('insert into DataExchange(TagValue, TagName, Timestamp) values (%s, ''%s'', %s)', [VALUE_X_tm, TagName_X_tm, DT_XY]);
tmptxt_Y:=Format('insert into DataExchange(TagValue, TagName, Timestamp) values (%s, ''%s'', %s)', [VALUE_Y_tm, TagName_Y_tm, DT_XY]);



ADOQuery.SQL.Text:= tmptxt_X;
ADOQuery.SQL.Text:= tmptxt_Y;
ADOQuery.Active:=true;

finally
// AddToDebugLog('fail SQL connection');
// WriteValue('Conn_status',2);

end;
end.

helic
Посетитель

ID: 401918

# 5

= общий = | 28.03.2018, 16:54 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер


Структура таблицы

CREATE TABLE [dbo].[DataExchange](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TagValue] [float] NOT NULL,
[TagName] [nvarchar](50) NOT NULL,
[Timestamp] [datetime] NOT NULL,

Скрипт

var
ADOConnection: TADOConnection;
ADOQuery: TADOQuery;
ConnectionString: string;

VALUE_Y_tm:string;
VALUE_X_tm:string;
DT_XY:string;

TagName_Y_tm:string;
TagName_X_tm:string;
tmptxt_X:string;
tmptxt_Y:string;
procedure Replace(var str, OldPattern, NewPattern: string);
var
ind: integer;
begin
ind := Pos(OldPattern, str);
if ind = 0 then
exit;
str[ind] := NewPattern;
end;

procedure OnStartScript;
begin
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOQuery := TADOQuery.Create(nil);
//TagName_Y_tm:= 'Teg_29Y';
TagName_X_tm:= 'Teg';

end;

procedure OnStopScript;
begin
CoUninitialize;
ADOConnection.free;
ADOQuery.free;
end;


begin

try
ADOConnection.Connected := false;
ADOQuery.Active := false;
ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=Wth,th006;Initial Catalog=simp;Data Source=S702IS-SMIS\SQLEXPRESS;';
ADOQuery.Connection := ADOConnection;

VALUE_Y_tm:= floatToStr(ReadValue('VALUE_Y')); Replace(VALUE_Y_tm ,',','.');
VALUE_X_tm:= floatToStr(ReadValue('VALUE_X')); Replace(VALUE_X_tm ,',','.');
DT_XY:=FormatDateTime('yyyy-mm-dd hh:nn:ss', now);
Replace(DT_XY ,' ','T');

// tmptxt_X:=Format('insert into DataExchange(TagValue, Timestamp ) values (%s, ''%s'')', [VALUE_X_tm, DT_XY]);
tmptxt_X:=Format('insert into DataExchange(TagValue, Timestamp, TagName) values (%s, ''%s'', %s)', [VALUE_X_tm, DT_XY, TagName_X_tm]);
// tmptxt_Y:=Format('insert into DataExchange(TagValue, TagName, Timestamp) values (%s, ''%s'', %s)', [VALUE_Y_tm, TagName_Y_tm, DT_XY]);

ADOQuery.SQL.Text:= tmptxt_X;
// ADOQuery.SQL.Text:= tmptxt_Y;
ADOQuery.Active:=true;

finally

end;
end.

Дает ошибку " 28.03.2018 16:53:02.253 Недопустимое имя столбца "Teg" - [insert]"

почему ?

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16341 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35