Показано с 1 по 10 из 1109

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

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

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

    По умолчанию

    Цитата Сообщение от 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

  2. #2

    По умолчанию

    Цитата Сообщение от 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
    СПАСИБО ОГРОМНОЕ!!! Завтра и Ваш вариант испробую!!!


    Спасибо...

Ваши права

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