Ваши комментарии

Объясню суть задачи.Работаем с приборами Termodat. Значение температуры с прибора в программу приходит целым числом(тип Word), на приборе значение отображается в виде числа с плавающей точкой(вещественное). Нам нужно, чтобы значение в программе было тоже с плавающей точкой. В принципе задача решается с использованием виртуальных каналов. То есть скрипт в виртуальном канале преобразует значение с прибора в вещественное и выводит его в этом же виртуальном канале. Код примерно такой:

var d:real; d:=ReadValue('COM1/dev2(addr=2)/var1'); WriteValue('Virtual channel 1',d/10);
При этом физический канал "COM1/dev2(addr=2)/var1" делаем невидимым. При запуске Монитора значение в виртуальном канале отображается верно, но физический канал мелькает в списке каналов находящих вне зоны уставки. Вопрос в том, как его убрать с этого списка? И вообщем корректно выводить значения с прибора в виртуальный канал? Или может писать измененное значение в физический канал (если выговорите, что это возможно)? Если да,то возникает вопрос Как?
Следующее, что нужно сделать это повторить манипуляцию со значение с прибора на 108 каналов. То есть создать еще 107 виртуальных каналов, и добавить 107 строчек кода, приведенного выше, в скрипт. Пробовал обработать все это дело в цикле(примерный код цикла я приводил в предыдущих сообщениях), как видите, не получается.Хотя если если бы я написал этот код на Delphi или на другом языке, уверен, что он интерпретировался бы верно.Не знаю, может быть, есть другой путь!?
Евгений Горло
ОАО ААК "ПРОГРЕСС"
А с мнемосхемы к примеру в этот канал можете записать значение?

по-моему я чего-то не понимаю. мнемосхема же просто должна выводить значение, тоже что и на Мониторе.
Теоретически должно работать, уточните какой ОРС сервер, какой канал (Read / Write).

Owen OPC сервер
Немного неточно, из под скрипта можно писать как в виртуальный, так и в физический канал. При работе в редакторе скриптов, не производится запуск опроса переменных. В режиме выполнения скрипта (в редакторе скриптов) есть возможность вручную изменять переменную на входе, тем самым следить за реакцией программы скрипта.

Как это сделать в скрипте, то есть как изменять значение физического канала?
Код вида не работает:

var1:=ReadValue('Физический канал 1'); var2:=var1+10; WriteValue('Физический канал 1', var2);В редакторе скриптов код выполняется, в Мониторе - не работает

Еще хотел бы задать вопрос по работе с циклами. Есть такой код:

Var d,r:array[1..10] of real; i:integer; Begin for i:=1 to 10 do begin d[i]:=ReadValue('Датчик 1_('+IntToStr(i)+')'); r[i]:=d[i]+100 ; WriteValue('Стапель1 Датчик 1_('+IntToStr(i)+')',r[i]+i); end; end. В редакторе скриптов код выполняется и выводит результат правильно. В мониторе результата нет, статус каналов - нет данных. Если я напишу код без цикла, то есть десять таких строк, в которых будет меняться только имена каналов и номера переменных то все прекрасно работает:
d[1]:=ReadValue('Датчик 1_(1)'); r[1]:=d[1]+100 ; WriteValue('Стапель1 Датчик 1_(1)',r[1]+i);
Еще вопросик возник! Со скриптом.
Пробую простой скрипт в виртуальном канале:
'Пример Basic Script
dim In1, Out1
' присвоить переменной In1, значение переменной канала
In1=ReadValue("COM13/MV110-2A(addr=14)/Output1/Read")
' присвоить переменной In2, значение переменной канала
'In2=ReadValue("Имя канала")
' If (In1 >= 30.00) Then WriteValue("COM13/MK110-8R(addr=16)/Output1/r.oe", Out1)
' записать значение переменной Out1 в канал
нажимаю компилировать! Все нормал! Жму выполнить! Все ок! Только в графе значения 0! А не прочитанные значения с модуля ввода! Мб я что нибудь неправильно в скрипте составил?
Если можно дайте пример скрипта виртуального канала просто прочитать с канала МВ значение!
Зарание блогадарен!


Приветствую! Сейчас на производстве внедряем Simp Light. Тоже возникла необходимость в написании скрипта. По вашему вопросу могу сказать, записывать значение можно только виртуальный канал, а канал "COM13/MV110-2A(addr=14)/Output1/Read" получает данные с прибора и не может быть изменен в скрипте. Таким образом, ваш скрипт будет выглядеть так:
'Пример Basic Script
dim In1, Out1
' присвоить переменной In1, значение переменной канала
In1=ReadValue("COM13/MV110-2A(addr=14)/Output1/Read")
' присвоить переменной In2, значение переменной канала
'In2=ReadValue("Имя канала")
' If (In1 >= 30.00) Then WriteValue("Virtual channel 1", Out1)
' записать значение переменной Out1 в канал
Приветствую! Сейчас на производстве внедряем Simp Light. Тоже возникла необходимость в написании скрипта. По вашему вопросу могу сказать, записывать значение можно только виртуальный канал, а канал "COM13/MV110-2A(addr=14)/Output1/Read" получает данные с прибора и не может быть изменен в скрипте. Таким образом, ваш скрипт будет выглядеть так:
'Пример Basic Script
dim In1, Out1
' присвоить переменной In1, значение переменной канала
In1=ReadValue("COM13/MV110-2A(addr=14)/Output1/Read")
' присвоить переменной In2, значение переменной канала
'In2=ReadValue("Имя канала")
' If (In1 >= 30.00) Then WriteValue("Virtual channel 1", Out1)
' записать значение переменной Out1 в канал


Сервис поддержки клиентов работает на платформе UserEcho