Напрямую к прибору (без этого шлюза) пробовали подключиться? Например через USB-COM?
Посмотрите на вкладке Сообщения и Запросы - что вообще происходит на шине? Открывается ли порт, есть ли запросы?
Напрямую к прибору (без этого шлюза) пробовали подключиться? Например через USB-COM?
Посмотрите на вкладке Сообщения и Запросы - что вообще происходит на шине? Открывается ли порт, есть ли запросы?
Спасибо.
Добрый день.
Никогда не писал скриптов. По этому прошу у Вас помощи.
В Modbus сервере имеется значение с типом данных "bool'. Можно ли как то прописать в скрипте, что бы при значении 1
выдавалось какое либо сообщение. Т.е. При значении 1 выдавалась строка (string) с текстом "Авария", а при 0 ничего. Именно сделать это в сервере, а ни в SCADA системе в "Событии".
Спасибо...
Довольно странно это решать в ОРС сервере.
Примерно так:
val,qual=server.ReadCurrentTag();
if (val==true) then
server.WriteCurrentTag("Авария", qual);
else
server.WriteCurrentTag("", qual);
end
Тег должен иметь тип в сервере - string. Тип в устройстве - bool.
Спасибо.
Да, Вы правы. Странное решение. Я Вам сейчас попробую объяснить задачу.
Имеются чиллеры на основе контроллера CAREL.pCO XS. Он использует очень много адресов (более 30) с авариями. Мне не очень хочется вносить все аварии в сервер, а потом в SCADA для каждой аварии использовать событие.
Появилась одна идея. Вот хочу попросить у Вас помощи.
А идея заключается вот в чём:
В сервере создать тэг "SERVER ONLY" с типом данных "string" и в нём написать скрипт объединяющий все нужные адреса с авариями. И там преобразовать их в текстовое значение.
Выглядеть будет примерно так:
Если адрес 1 будет принимать значение 1, то это значение преобразовывается в текст "Авария Компрессора 1". Или
если адрес 3 будет принимать значение 1, то это значение преобразовывается в текст "Авария Компрессора 2". Или
если адрес 4 будет принимать значение 1, то это значение преобразовывается в текст "Авария Компрессора 3".
И так далее.
В SCADA я в "Событие" в закладку "Сообщение" перетаскиваю этот тэг и жму кнопку "В текст".
Но написать такой скрипт тямы нет. Вот и пытаюсь как то решить эту задачу и прошу Вашей помощи.
Спасибо...
Это разве много?
Вам в любом случае придется где-то создавать тесты аварии - так какая разница в скрипте или в событиях. В скаде это сделать просто - сделали событие, скопировали, связи поправили, а тексты сообщений можно через этот механизм сделать:
https://support.mps-soft.ru/MasterSC...t_dannykh.html
А если значение 1 пример и адрес и адрес 3?
Спасибо.
Что значит "последовательно"? В строке будет отображаться только одна какая то авария.
Спасибо.
У меня есть скрипт для отображения аварий в контроллере Pixel. Все аварии вписываются одна за другой. В SCADA используется только функциональный блок "Сравнение строк" и всё. Да, я понимаю, тут идёт побитная информация. Вот я и спросил, нельзя ли сделать такого же типа скрипт, только конкретно с адресами.
-- Uninitialization
function OnClose()
end
-- Processing
function OnRead()
alarm, _, _ = server.ReadTag( "$(N).$(D).АВАРИЯ" )
if alarm == true then
S = ""
err, w = modbus.ReadInputRegistersAsInt16( 40966, 1, true, "10325476" )
if err == false then
if bit.BitFromData( w[1], 0 ) == true then S = S.."/Жалюзи притока " end
if bit.BitFromData( w[1], 1 ) == true then S = S.."/Обрыв ремней " end
if bit.BitFromData( w[1], 3 ) == true then S = S.."/Авария насоса " end
if bit.BitFromData( w[1], 4 ) == true then S = S.."/Низкая Т.притока " end
if bit.BitFromData( w[1], 5 ) == true then S = S.."/Обрыв датчика " end
if bit.BitFromData( w[1], 6 ) == true then S = S.."/Низкая Т.обратки " end
if bit.BitFromData( w[1], 7 ) == true then S = S.."/Авария двигателя " end
if bit.BitFromData( w[1], 8 ) == true then S = S.."/Пожар " end
if bit.BitFromData( w[1], 10 ) == true then S = S.."/Авария по термостату " end
server.WriteCurrentTag( S, OPC_QUALITY_GOOD)
end
else
S = ""
server.WriteCurrentTag( S, OPC_QUALITY_GOOD)
end
end
Спасибо...