ID Modbus Comunicação

Bom dia

Terei alguns dispositivos com comunicação via Modbus que ambos terão um Id, todo vez que eu troca este Id terá que troca meu dispositivo.Agora como eu faço isso se no elipse os objetos já são endereçados com um endereço fixo do modbus.
Espero que tenham intendido a pergunta .

Att

Jefferson

@Araujo, bom dia.

Para mudar o ID do dispositivo Modbus nas tags, pode mudar o parâmetro N1.

Sds.

Certo

Agora você teria algum exemplo de algum a aplicação para intendimento melhor .

Att

@Araujo, não tenho nada pronto.

É interessante que passe mais detalhes do que precisa, de como pretende fazer essas modificações (setpoint, botão, evento, etc) e etc para poder lhe auxiliar com mais precisão.

Sds.

Então vou ter 10 controles neles vão ter as seguintes informações em cada um.
Sinal “via Radio”
Nível de bateria
Acionamento
E um led .
Isso tudo monitorado pelo supervisório
Cada controle tem que ter seu id caso algum tenha defeito ou a bateria esgote ser feita a troca e o sistema não pare imediatamente .

@Araujo,

Então serão 10 controladores independentes (cada um com um IP), certo?

Não entendi esta parte. Por favor, poderia esclarecer?

Sds.

Certo cada um com um IP
Agora a comunicação vai ser via serial entre o modulo e os controles.
Supomos que só estamos usando 8 controle em de problema vai ter que ser feita a troca dele por outro.

Att

@Araujo,

Certo. Então os dispositivos que estavam configurados 1 por IP agora serão uma rede serial com 8 dispositivos.

Se eles estarão em uma rede serial (RS-485, por exemplo) e um deles der defeito, acredito que a melhor solução é trocar por um outro dispositivo com mesmo endereço escravo. Entretanto, não sendo possível, deve-se substituir o valor da propriedade N1 dos tags deste dispositivo pelo endereço do novo em Studio.

Sds.

Certo , então como eu faria para escrever na tela de Viewer o ip do do controle e mudar no drive .
Att

@Araujo,

Acredito que este tópico irá lhe ajudar:

Sds.

Esse artigo é para mudar o IP ,gostaria de saber coou mudar o N1, já que ele representa meu endereço do controle sabendo que vamos temos 10 controles .

Att

@Araujo,

Se quer modificá-lo em Runtime, cria um Setpoint e associa bidirecional ao N1 da tag ou passa o valor para o N1 tag via script.

É importante observar que modificar o valor do N1 em Runtime irá consumir pontos IO do seu hardkey. Sugiro que realize as modificações em Studio.

Sds.

Bom dia

Desculpa a demora para responder ,a questão maior como é que eu faria para mudar o ip do controle.
Exemplo

Controle 1
Endereço Modbus 10001
10002
10003
10004
Sabendo que o ip dele é 10 no N1
Agora eu quero mudar para outro controle ,e o ip dele é 9 sabendo quando eu mudar terá que acontecer nos 4 endereços modbus do controle juntos ,e isso tem que ser feito na tela de Viewer

Espero que tenha entendido minha duvida .

Att

@Araujo, bom dia.

Acredito, pelo contexto, que está tentando mudar o ID (endereço escravo) que é o N1 do tag ao invés do IP do dispositivo.

Entretanto ainda não consegui entender exatamente o que precisa, mas, por favor, confirma para mim qual pensamento está correto:

  1. Quando mudar o parâmetro N1, deve-se manter os endereços do registros (N4) iguais ao do ID anterior; ou
  2. Adicionar o valor do ID (N1) aos dos registros (por exemplo, se no Controle 1 o N1 era 1 e o N4 era 10001, se mudar para o N1 = 5, então o N4 será 10006)?

Sobre mudar em Runtime:

Sds.

As duas formas estão corretas agora qual eu consigo aplicar melhor ?

Att

@Araujo,

Em teoria eles são excludentes, mas se acha que pode fazer um ou outro, sugiro o item 1.

Sds.

E como seria eu faria o item 1 ?

Att

@Araujo,

  • Cria um setpoint com a propriedade Name “spID”;

  • Cria um commandbutton e no evento Click insere o seguinte script:

      Sub CommandButton1_Click()
      SetFocus()
      set Driver = Application.GetObject("Driver1")
          FuncRecursiv(Driver)
          Driver.Save()
      End Sub 
    
      Sub FuncRecursiv(pasta)
          for each obj in pasta
              if typename(obj) = "IOFolder" then
      			FuncRecursiv(obj)
              else
                if typename(obj) = "IOTag" then
        			obj.N1 = Screen.Item("spID").Value
       			elseif typename(obj) = "IOBlock" then
      				obj.B1 = Screen.Item("spID").Value
      			end if
      		end if
      	next
      End Sub
    
    

Lembrando que antes de clicar no botão deve preencher o setpoint.

Artigos de referência:


Sds.

Boa Tarde
Testei aqui e funcionou ,agora eu tenho que cadastra 10 controles vou ter que ter 10 drives para configura cada um ?
Att

@Araujo,

Se estiverem na mesma rede, não. Basta configurá-los com N1 diferentes.

Mais detalhes:


Sds.