Função artmetica dependente de uma função lógica

Olá,
Eu estou tentando uma soma, desde um verdadeiro valor é a soma deve ser executado, mas se falsa a soma deve ser 0

É o direito frase? O que pode estar errado?

@piter, bom dia.

Se estiver trocando o valor em um Setpoint e quer mostrar o resultado da soma em um Display, então o ideal é que faça este script no evento Validate do Setpoint.

Exemplo:

Sub Setpoint_Validate(Cancel, NewValue)
If NewValue = 0 Then
Screen.Item(“Display”).Value = 0
Else Screen.Item(“Display”).Value = Soma
End If
End Sub

Function Soma()
Soma = 10+12
End Function

Sub Temp()
End Sub

Obs.: O evento OnStartRunning só é executado ao iniciar o objeto.

Obs.2: Como nada foi definido, acredito que o seu objeto Texto5 seja um Setpoint e o objeto Texto4 seja um Display.

EDIT1: Verifica também se os objetos (Display, Setpoint) estão com o tipo de dado na propriedade Value como String. Se sim, modifica para um tipo numérico (Double, Integer, etc).

Gracias Fernando, ya logre realizarlo.

Aprovecho para comentarte otra duda:
¿Qué propiedad debemos colocar en “else” para que no se abra la pantalla o en todo caso para que no se ejecute en evento Pick?”

  • Lo que pasa es que en el script estoy llamando al “cuadro2”(lo dividí en 3 áreas: superior, central e inferior) y en el evento Pick abre una pantalla “X” en el área central del cuadro2; por esta razón no puedo eliminar el Pick.
    En tu respuesta mencionas que al hacer click se ejecutara el script y el pick, tal como te mencione el pick debe ejecutarse siempre y cuando “texto5” tenga una determinada información, siendo este el caso ¿De qué forma podría lograrlo?

@piter, bom dia.

Havendo necessidade de se controlar o motivo da abertura da tela, deve-se, então, descartar o “Pick de Abrir Tela” e usar somente o script. Sendo assim, não precisa colocar nada no Else ou apenas uma mensagem utilizando MsgBox. Veja:

Exemplo1:

Sub Texto1_Click()

if Screen.Item(“Texto2”).Value = “admin” then
Application.GetFrame(“Nome_do_Quadro”).OpenScreen(“Nome_da_Tela”), 1
end if

End Sub

Exemplo 2:

Sub Texto1_Click()

if Screen.Item(“Texto2”).Value = “admin” then
Application.GetFrame(“Nome_do_Quadro”).OpenScreen(“Nome_da_Tela”), 1
else
MsgBox “Usuário não permitido!”
end if

End Sub

Acredito que o Pick Abrir Tela neste caso não será necessário.

Buen día Fernando.
ya hice lo que me indicas, pero el problema es que la pantalla se abre en todo el cuadro y lo que yo quiero es que la pantalla se abra solo en el “área central”. Lo que pasa es que el cuadro 2 lo dividí en 3 áreas:

Y por esa razon esta usando el Pick ya que en el pick puedo definir en que parte del cuadro puede abrirse la pantalla.

¿como puedo lograrlo? En resumen lo que quiero es que si alguien no esta logeado no pueda ingresar a as pantallas.

Hola Fernando.
Ya me salio. muchas gracias solo agregue otra sentencia mas.

Sub TE1_Click()
If Screen.Item(“Texto5”) = “admin” then
Application.GetFrame("").OpenScreen(“Cuadro2”), 0
Application.GetFrame(“central”).OpenScreen(“MINA_SHOUGANG”), 1
Else MsgBox “ingrese usuario”
end if
End Sub

Saludos.

@piter, deve-se fazer conforme este script:

Em “Nome_da_Tela”, colocar a tela “Mina_Shougang”;
Em “Nome_do_Quadro” colocar a Divisão “Central”.

Hola Fernando buen día.
Disculpa las molestias, tengo un problema al representar un conmutador de 2 y 4 estados:
En mi proyecto algunos conmutadores tienen que operar solo con 2 posiciones y otros con 4 posiciones. Por defecto cuando se crean lós conmutadores desde el modelador eléctrico ya tienen predefinido um template ( de 4 estados ), sabiendo esto: ¿Como puedo lograr que algunos conmutadores operen solo com 2 posiciones y otros con 4 posiciones?¿Qué alternativas me puedes recomendar para que un conmutador tenga posiciones (abierto,cerrado) y otro con posiciones(intermedio,abierto,cerrado,error)?

@piter,

Isto irá depender dos valores que recebe na variável.
Por exemplo, se sua Tag recebe 0 (zero) para Aberto e 1 (um) para Fechado, então os outros valores serão ignorados por não existirem. Entretanto, se sua Tag recebe 0 para Aberto, 1 para Fechado, 2 para Intermediário e 3 para Inválido, então é o que será mostrado.

Caso queira mudar a ordem desses significados devido ao valor recebido na Tag, então deve-se modificar a coluna Valor na Fonte (4ª coluna) da Discreta SwitchPosition (ver imagem) ou criar uma Conversão para ela.

Hola Fernando,
El problema es que si yo cambio el valor del template del *SwitchPosition , cambiaría para todos.
como te comente: (primer caso) hay algunos switch que operan con 1:open,2:closed,0:intermediate,3:error ( para este caso no tengo problemas porque solo tengo que cambiar en valor de a fuente), y (segundo caso) otros switch con 0:closed y 1:open. E problema es que si cambio el valor para 0:open y 1:closed tambien se cambiaria el valor que cambie en el “primer caso”.
Intente crear otro template(*SwitchPosition2) pero no puedo agregarlo ya que por defecto solo está el (*SwitchPosition) en Measurements.

Há como criar formas próprias. Veja:

  • Vai na aba Discretas > SwitchPosition;

  • Clica em Nova (número 1) irá abrir uma janela para escolher o nome (número 2). Ver imagem;

  • Seleciona a conversão que acabou de criar, no meu caso “Teste” (número 3);

  • Muda os dados da coluna Valor na Fonte (numero 4);

  • Quando for configurar a fonte Scada, seleciona o tipo de conversão que utilizará:

Fernando muchas gracias !!!
Justo lo que buscaba!!
Saludos atentos.

Buen día Fernando,

  • Tengo una consulta con respecto al E3Chart, estoy trabajando con tiempo real e histórico pero no aparece un baner para poder visualizar la tendencia histórica. ¿ De qué forma puedo agregarla?
  • Con respecto al WachWindow ¿De qué forma puedo asociarlo con un CommandButton1?

@piter, bom dia.

Item 1: Configurou a Consulta e realizou as configurações da pena de forma correta? Verificar no ‘Tutorial do E3 para Desenvolvedores’ > Capítulo ‘Gráficos e E3Chart’ > Exercícios.

Item 2: Respondido aqui

Buen día Fernando,
Si, lo que pasa es que hay un baner pero eso es para la leyenda, lo que quiero es un baner para el gráfico. Por ejemplo mi gráfico solo me muestra los ultimos 60s. y si yo quiero ver lo que paso hace 5 horas ¿como lo puedo ver? (la escala en horizontal siempre debe mostrarme los ultimos 60s.)
Agradezco tu apoyo.
Saludos

@piter, bom dia.

Duas formas de fazer isso são:

Primeira forma

  • Criar um ToggleButton e no evento Change colocar o seguinte script:

Sub ToggleButton1_Change()
Set eixo = Screen.Item(“E3Chart1”).Axes.Item(“EixoHorizontal”)

’ Ultimas 5 horas
If Value Then
eixo.SetRealTimePeriod 5, 2

’ Ultimos 60 segundos
Else
eixo.SetRealTimePeriod 60, 0
End If

End Sub

Segunda forma

  • Cria dois OptionButtons na tela e muda a propriedade GroupName de ambos para “Chart”

  • No evento OnChange do OptionButton “Real” colocar:

Sub opbReal_Change()
’ Seta o eixo que quer configurar
Set eixo = Screen.Item(“E3Chart1”).Axes.Item(“EixoHorizontal”)

’ Muda para o tipo real e seleciona a janela de tempo
If Value Then
eixo.ScaleType = 1
eixo.SetRealTimePeriod 60, 0
End If

End Sub

  • No evento OnChange do OptionButton “Historico” colocar:

Sub OptionButton6_Change()
’ Seta o eixo que quer configurar
Set eixo = Screen.Item(“E3Chart1”).Axes.Item(“EixoHorizontal”)

’ Muda para o tipo real e seleciona a janela de tempo
If Value Then
eixo.ScaleType = 2
eixo.SetHistoricPeriod Now-5/24, Now
End If

End Sub

Hola Fernando, buenos días.
Gracias por lo anterior.

  • Disculpa las molestias Fernando, pero actualmente estoy teniendo un problema con el E3Browser, tengo 2 ventanas: una para históricos de alarmas y otra para históricos de eventos. Para ambos estoy utilizando un E3Browser y ambos registran alarmas y eventos al mismo tiempo ¿cómo puedo hacer para que en la primera ventana solo me aparezcan las alarmas y en la segunda ventana solo os eventos?(estoy trabajando con el servidor de alarmas).
  • Para poder visualizar los usuarios en el E3Browser estoy usando la columna ActorID, pero solo registra cuando se reconocen las alarmas.¿cómo puedo hacer para que también me registre cuando un usuario ingrese y cuando se desconecte?¿existe forma de que en el evento se registre cuando se abre y cierre el Viewer?

Gracias por tu apoyo.
Saludos atentos.

@piter, boa tarde.
Por nada!

Neste artigo, tem uma forma de fazer o que precisa.

Pode-se utilizar o método do Servidor de Alarmes LogTrackingEvent. Para gravar algo ao realizar Login ou Logout, utilizar no evento OnLogin/ OnLogout do Viewer.
Para quando abrirem ou fecharem o Viewer, utilizar os eventos OnStartRunning/ OnStopRunning.

Exemplo:

Sub Viewer_OnLogin()

Application.GetObject(“ServidorAlarmes1”).LogTrackingEvent “O usuário “&User&” logou na aplicação!”, , , , , , , , , , “”

End Sub

Muy Agradecido por tu apoyo Fernando!! :slight_smile:

1 Like

Buen día Fernando,
-Tengo un problema, de que forma puedo bloquear el Elipse Power Studio para que nadie pueda hacer cambios (ejemplo: crear pantallas,borrar señales, etc), que la única forma que puedan hacer cambios sea mediante una contraseña y usuario.

  • Estoy haciendo pruebas reales y noto que la única forma en la que no se pierdan datos (sobre todo tendencias en tiempo real) es que siempre se este ejecutando el dominio ¿De que forma puedo hacer que siempre se mantenga ejecutado?¿Existe otra forma para no perder ningún dato?