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

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Вы же словами логику описали - теперь просто напишите это в программе.

    err - это просто признак удачного/неудачного чтения тега. Чтобы определить, что отсутствуют битовые аварии в прочитанном слове, проверьте это значение (w[1]) на равенство нулю
    Нет, не получается. Если в каждом адресе проверяю биты, то в конце скрипта пишет "Нет в списке аварий" дважды. Если убираю точки после S, в конце скрипта пишет нормально, но при битовой аварии вписывает"Нет в списке аварий" из другого адреса, в котором нет битовой аварии. Я не умею писать скрипты, но понимаю, что надо как то объединить биты двух адресов. Подскажите, как правильно написать строку...

    Если биты одного адреса (1900) равны нулю и биты второго адреса (1902) равны нулю, то S = "Нет в списке аварий"


    Спасибо...

  2. #2

    По умолчанию

    Цитата Сообщение от mkv Посмотреть сообщение
    Нет, не получается. Если в каждом адресе проверяю биты, то в конце скрипта пишет "Нет в списке аварий" дважды. Если убираю точки после S, в конце скрипта пишет нормально, но при битовой аварии вписывает"Нет в списке аварий" из другого адреса, в котором нет битовой аварии. Я не умею писать скрипты, но понимаю, что надо как то объединить биты двух адресов. Подскажите, как правильно написать строку...

    Если биты одного адреса (1900) равны нулю и биты второго адреса (1902) равны нулю, то S = "Нет в списке аварий"
    Примерно так

    Код:
    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
    
    
        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 S=="" then S = "Нет в списке аварий" end
        
        server.WriteCurrentTag( S, OPC_QUALITY_GOOD) 
    else
        S = "0"
        server.WriteCurrentTag( S, OPC_QUALITY_GOOD)
    end

  3. #3

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Примерно так

    Код:
    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
    
    
        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 S=="" then S = "Нет в списке аварий" end
        
        server.WriteCurrentTag( S, OPC_QUALITY_GOOD) 
    else
        S = "0"
        server.WriteCurrentTag( S, OPC_QUALITY_GOOD)
    end
    СПАСИБО ОГРОМНОЕ!!! Завтра и Ваш вариант испробую!!!


    Спасибо...

  4. #4

    По умолчанию

    SCADAMaster
    Поменял строку S = S.."Нет в списке аварий " на S ="Нет в списке аварий ".
    Теперь при наличии битовой аварии скрипт её (битовую аварию) не записывает, хотя она присутствует. А записывает только "Нет в списке аварий ".
    Мне кажется надо как то объединить биты аварий двух адресов...


    Спасибо...

  5. #5

    По умолчанию

    Можно так сделать:
    if s=="" and alarm == true and err == false then
    S = S.."Нет в списке аварий "
    end
    Спасибо.

  6. #6

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Можно так сделать:
    if s=="" and alarm == true and err == false then
    S = S.."Нет в списке аварий "
    end
    Ох блин, вроде так работает!!! Уже домой пора. Завтра с утра ещё хорошенько погоняю, проверю все варианты аварий и тогда отпишусь.
    СПАСИБО!!!


    Спасибо...

  7. #7

    По умолчанию

    SCADAMaster , 1exan
    Сразу с утра проверил!!! Это для контроллера Danfoss MCX08 и MCX15B2.
    Большое Вам спасибо!!! Работают оба варианта!


    Спасибо...

  8. #8

    По умолчанию

    Добрый день!
    Некорректно удалили MasterOPC Universal Modbus Server. Теперь не дает установить его, пишет, что копия установлена. Как корректно удалить и заново установить?

  9. #9

    По умолчанию

    Удалить ветку реестра HKEY_CURRENT_USER\SOFTWARE\MasterOPC Universal Modbus Server
    Спасибо.

  10. #10

    По умолчанию

    Здравствуйте. Вопрос: При использовании коэффициентов пересчета для целого числа OPC округляет не так как хотелось бы.
    Например: 38,89 float округляет как 38, вместо 39?Округление.png

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

Ваши права

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