Страница 110 из 111 ПерваяПервая ... 1060100108109110111 ПоследняяПоследняя
Показано с 1,091 по 1,100 из 1109

Тема: Modbus Universal MasterOPC Server новый OPC сервер от компании ИнСАТ

  1. #1091

    По умолчанию

    Цитата Сообщение от mkv Посмотреть сообщение
    Вы имеете ввиду сделать ещё один тэг, только с побитным опросом другого адреса?
    А в одном тэге добавить другой адрес не получится?
    Ну не получается у меня. Не спец я в этих скриптах. Не знаю я порядка написания команд. Если Вам не трудно, напишите на примере, как это будет выглядеть.


    Спасибо...

  2. #1092

    По умолчанию

    Посмотрите пример
    Вложения Вложения
    • Тип файла: zip 1.zip (3.6 Кб, Просмотров: 3)
    Спасибо.

  3. #1093

    По умолчанию

    SCADAMaster
    Спасибо. Буду пробовать.


    Спасибо...

  4. #1094

    По умолчанию

    Добрый вечер. Что то у меня не совсем получается.
    Когда тэг работает с одним адресом, всё отлично. Все аварии пишутся в строчку. ( См. картинку в сервере). А когда я добавляю ещё адрес, то аварии начинают поочерёдно меняться. Сразу две не отображаются. Я Вам картинки скинул по тэгу с одним адресом. И с двумя. Что то я не дописал. Получается тэг не останавливает свою работу, а гоняет по кругу.
    Один адрес.png
    Отображение в сервере с одним адресом.png
    Два адреса.png


    Спасибо...

  5. #1095

    По умолчанию

    Потому что вы дважды значение в тег пишите.
    Вам нужно скомпоновать ваши условия, чтобы в итоге получалось одно значение строки е его уже писать через WriteCurrentTag.
    Спасибо.

  6. #1096

    По умолчанию

    Попробовал дома набросок сделать. Завтра на работе проверю.
    Посмотрите пожалуйста, правильно я сделал или опять "накосячил".

    13.png


    Спасибо...

  7. #1097

    По умолчанию

    Без форматирования тут трудно понять логику.
    Смотрите сами
    Спасибо.

  8. #1098

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Потому что вы дважды значение в тег пишите.
    Вам нужно скомпоновать ваши условия, чтобы в итоге получалось одно значение строки е его уже писать через WriteCurrentTag.
    Большое спасибо за помощь! Всё получилось. Скрипт принял вот такой вид.

    10.png


    Спасибо...

  9. #1099

    По умолчанию

    Добрый день. Помогите пожалуйста разобраться, что не так написал.

    СКРИПТ АВАРИИ.png

    При появлении общей аварии "ОБЩАЯ АВАРИЯ" скрипт проверяет два адреса (1900 и 1902) побитно.
    Если есть какие либо побитные аварии, то они в строчку пишутся в скрипте. Это всё отлично. Если нет "ОБЩЕЙ АВАРИИ" и нет битовых аварий,
    то в конце скрипта появляется "0".
    Мне надо сделать, что бы когда нет побитных аварий, но присутствует "ОБЩАЯ АВАРИЯ", в конце скрипта отображался текст " Нет в списке аварий".
    Я добавил три строки (они выделены в картинке). Но что то не так работает.
    Когда нет побитовых аварий, то всё нормально записывается ("Нет в списке аварий").
    Но если в любом из двух адресов появляется побитовая авария, то она записывается вместе с основной аварией в строку ( "Нет в списке аварий /Авария насоса".)
    А должна записаться только одна битовая авария ("Авария насоса"). Что я не так написал.
    Когда пробую скрипт только с одним из адресов (1900 или 1902) то всё нормально получается.
    Подскажите пожалуйста.
    А это скрипт в тексте:
    ---------------------------------
    function OnRead()
    alarm, _, _ = server.ReadTag( "$(N).$(D).ОБЩАЯ АВАРИЯ" )
    if alarm == true then
    S = ""

    err, w = modbus.ReadInputRegistersAsInt16( 1900, 1, true, "10325476" )
    if err == false then
    if bit.BitFromData( w[1], 0 ) == true then S = S.."/Авария " end
    if bit.BitFromData( w[1], 3 ) == true then S = S.."/Авария насоса " end
    if bit.BitFromData( w[1], 13 ) == true then S = S.."/Низкая Т.обратки " end
    if bit.BitFromData( w[1], 14 ) == true then S = S.."/Низкая Т.притока " end
    if bit.BitFromData( w[1], 15 ) == true then S = S.."/Сработал термостат " end
    end
    if alarm == true then
    err, w = modbus.ReadInputRegistersAsInt16( 1902, 1, true, "10325476" )
    if err == false then
    if bit.BitFromData( w[1], 8 ) == true then S = S.."/Авария вентилятора №1 " end
    if bit.BitFromData( w[1], 14 ) == true then S = S.."/Авария приточки "end
    end
    if alarm == true and err == false then
    S = S.."Нет в списке аварий "
    end

    server.WriteCurrentTag( S, OPC_QUALITY_GOOD) end
    else
    S = "0"
    server.WriteCurrentTag( S, OPC_QUALITY_GOOD)

    end
    end


    Спасибо...

  10. #1100

    По умолчанию

    Цитата Сообщение от mkv Посмотреть сообщение
    Но если в любом из двух адресов появляется побитовая авария, то она записывается вместе с основной аварией в строку ( "Нет в списке аварий /Авария насоса".)
    И что вас удивляет?
    if bit.BitFromData( w[1], 8 ) == true then S = S.."/Авария вентилятора №1 " end
    if bit.BitFromData( w[1], 14 ) == true then S = S.."/Авария приточки "end
    end
    if alarm == true and err == false then
    S = S.."Нет в списке аварий "
    end

    Если условие из bit.BitFromData( w[1], 8 ) и bit.BitFromData( w[1], 14 ) выполнятся, то и в S запишется значение.

    Можете вот так сделать:
    S = "Нет в списке аварий "
    Тогда прошлое S значение затрется новым.
    Спасибо.

Страница 110 из 111 ПерваяПервая ... 1060100108109110111 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •