PDA

Просмотр полной версии : masterOPC и метка времени



energvk
23.04.2015, 15:35
Добрый день!
В ОПС сервере есть тэг для принудительного запуска опроса устройства:


-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnWrite()
val=server.ReadCurrentTag();
if val==true then
server.PollCurrentDevice( );
end;
end

Есть переменная на основании которой происходит анализ в мастерСКАДА удачного опроса и чтения метки времени:


count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
tv,tq,ts = server.ReadCurrentTag();
if tq~=192 and count<4 then
server.Sleep(5000);
server.PollCurrentDevice( );
count=count+1;
end;
if tq==192 then
server.WriteCurrentTag(tv,tq);
end;
end

Обратил внимание, что когда опрос устройства происходит не по заданному периоду, а по команде server.PollCurrentDevice( ) присвоение метки времени не происходит. Как можно обойти этот момент?

SCADAMaster
23.04.2015, 18:53
Что значит не происходит присвоение метки времени? В какой момент?
PollCurrentDevice не вызывает мгновенного опроса устройства. Опрос только тогда, когда освободится опрос текущего устройства (в том числе и устройство в котором вызывается PollCurrentDevice )

energvk
23.04.2015, 22:43
Что значит не происходит присвоение метки времени? В какой момент?
PollCurrentDevice не вызывает мгновенного опроса устройства. Опрос только тогда, когда освободится опрос текущего устройства (в том числе и устройство в котором вызывается PollCurrentDevice )

Допустим период опроса устройства в настройках 1 раз в 5 минут. Запустили сервер в режим исполнения, произошел опрос - метка времени появилась. Через 5 минут произошел повторный опрос - метка обновилась. Через 2 минуты выполнил команду PollCurrentDevice - переменные опросились, данные обновились, метка времени нет. Через 5 минут после команды PollCurrentDevice выполнился следующий опрос (в соответствии с заданным периодом) - переменные и метка времени обновилась.

SCADAMaster
24.04.2015, 09:06
Мы проверили на текущей версии (3.1.4) - у нас метка времени изменяется сразу после того как был выполнен опрос. Попробуйте проверить на ней.

energvk
24.04.2015, 14:13
Обновил до версии 3.1.4 ничего не изменилось

SCADAMaster
24.04.2015, 19:16
Мы проверяли на конфигурации из приложения - попробуйте проверить на ней.
Пришлите также вашу конфигурацию.

energvk
25.04.2015, 11:33
Прикладываю конфигурацию и проект. Не понял фразу
Мы проверяли на конфигурации из приложения - попробуйте проверить на ней.
17899

SCADAMaster
25.04.2015, 13:23
Мы проверили - у нас все нормально. Где именно вы контролируете изменение метки времени - в скада системе или ОРС сервере?

energvk
25.04.2015, 13:28
Контролирую в скада системе

SCADAMaster
25.04.2015, 13:46
В скада системе метка времени будет менятся либо если включен полный опрос, либо если значение будет меняться.
Если стоит опрос по изменению и значение не меняется, то и метка времени меняться не будет.

energvk
25.04.2015, 15:53
Понятно, буду думать как это обойти

energvk
25.04.2015, 19:17
Хотел уточнить, а почему меняется метка времени, если выполняется опрос объекта опс-сервером по заданному периоду, даже если значение переменной не меняется? Скада как-то это узнает и выполняет полный опрос? Ещё вопрос, если опрос переменной выполнять не по изменению, а периодически, на что это повлияет?

SCADAMaster
25.04.2015, 20:13
Хотел уточнить, а почему меняется метка времени, если выполняется опрос объекта опс-сервером по заданному периоду, даже если значение переменной не меняется? Скада как-то это узнает и выполняет полный опрос?
ОРС сервер выставляет определенный флаг что значение изменилось и скада его опрашивает.


Ещё вопрос, если опрос переменной выполнять не по изменению, а периодически, на что это повлияет?
Вы имеете ввиду полный опрос в ОРС сервере? Тогда метка времени будет меняться - скада будет опрашивать значение независимо от того менялось оно или нет.

energvk
25.04.2015, 21:45
ОРС сервер выставляет определенный флаг что значение изменилось и скада его опрашивает.

А почему такой же флаг не выставляется после опроса по команде PollCurrentDevice? Можно как то принудительно его выставлять после опроса по этой команде?


Вы имеете ввиду полный опрос в ОРС сервере? Тогда метка времени будет меняться - скада будет опрашивать значение независимо от того менялось оно или нет.

Нет, я имею ввиду если в свойствах опроса переменной изменить
17905

Мне казалось, что эта переменная будет будет опрашиваться постоянно и при изменении метки времени, это будет видно, но оказалось что это не так

energvk
25.04.2015, 22:10
Я вам уже наверное надоел, просто хочется разобраться. Пошел следующим путём. Создал тэг в opc-сервере формата string и записываю в него метку времени переменной Pust.
Запускаю сервер и получаю следующее:



25-04-2015 20:58:53.360 poll:Запись в гайдара-99а.гайдара-99а.poll значения False
25-04-2015 20:58:38.959 poll_time:Запись в гайдара-99а.гайдара-99а.poll_time значения 2015-04-25 20:57:59.080
25-04-2015 20:58:38.959 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 4078 ms) (H41 0,1573,6 )
25-04-2015 20:58:37.380 гайдара-99а:Соединение установлено xx.xx.xxx.x 502
25-04-2015 20:58:34.933 гайдара-99а:Попытка соединения xx.xx.xxx.x 502
25-04-2015 20:58:34.882 гайдара-99а.гайдара-99а:Старт опроса устройства
25-04-2015 20:58:34.882 poll:Запись в гайдара-99а.гайдара-99а.poll значения True
25-04-2015 20:58:06.880 poll:Запись в гайдара-99а.гайдара-99а.poll значения False
25-04-2015 20:57:59.080 poll_time:Запись в гайдара-99а.гайдара-99а.poll_time значения 2015-04-25 20:57:24.586
25-04-2015 20:57:59.080 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 7493 ms) (H41 0,1594,7 )
25-04-2015 20:57:57.478 гайдара-99а:Соединение установлено xx.xx.xxx.x 502
25-04-2015 20:57:51.638 гайдара-99а:Попытка соединения xx.xx.xxx.x 502
25-04-2015 20:57:51.587 гайдара-99а.гайдара-99а:Старт опроса устройства
25-04-2015 20:57:51.587 poll:Запись в гайдара-99а.гайдара-99а.poll значения True
25-04-2015 20:57:24.586 poll_time:Запись в гайдара-99а.гайдара-99а.poll_time значения 2015-04-25 20:57:20.125
25-04-2015 20:57:24.586 гайдара-99а.гайдара-99а:Стоп опроса устройства (t = 3410 ms) (H41 0,1474,5 )
25-04-2015 20:57:23.107 гайдара-99а:Соединение установлено xx.xx.xxx.x 502
25-04-2015 20:57:21.177 гайдара-99а:Попытка соединения xx.xx.xxx.x 502
25-04-2015 20:57:21.177 гайдара-99а.гайдара-99а:Старт опроса устройства
25-04-2015 20:57:21.172 Server:Cтарт конфигурации C:\ProgramData\InSAT\MasterOPC Universal Modbus Server\SERVERCFG\gaidara-99a.mbp
25-04-2015 20:57:21.172 Server:MasterOPC Universal Modbus Server Demo 32 Build - 3.1.3


Мне не понятно почему записывается метка времени предыдущего опроса?

energvk
26.04.2015, 00:12
В общем получил желаемое, добавив дополнительный тэг типа "double", в него пишу метку времени от тэга "Pust", а в скаде беру метку времени от этого тэга.



count=0;
-- Initialization
function OnInit()
end
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
tv,tq,ts = server.ReadCurrentTag();

if tq==192 then
server.WriteCurrentTag(tv,tq);
ts1=time.StringToTimeStamp(ts)
server.WriteTagByRelativeName( "poll_time", ts1,192 );
end;
end


Изврат конечно, но работает.