Atuar unidade de comando dentro de xControl

Boa tarde,

estou criando um xControl que é basicamente um botão e um texto. O botão indica com a cor de fundo o valor de uma variável discreta associada à uma propriedade “Alarme” e o texto com o Docstring da propriedade “Texto” e está funcionando. Meu problema é quando tento fazer o clique do botão atuar uma unidade de comando da subestação. Tentei de diversas formas mas não consegui.

Recebo a mensagem de erro:

image

Segue o script utilizado:

image

Tentei inclusive mudar o tipo da propriedade Comando, mas sem sucesso.

Agradeço a ajuda.

Sugiro começar alterando o tipo da propriedade "Comando" para "PowerCommandUnit", feito isso, altere o script para algo como:

Sub btnComando_Click()
	Dim objCmdUnit
	
	' Alterar aqui para o nome do seu XControl
	' ou, se o btnComando nao estiver agrupado
	' pode-se usar "Parent"
	Set objCmdUnit = Parent.Comando
	
	If (TypeName(objCmdUnit) = "PowerCommandUnit") Then
		' TODO: Verificar Interlock...
		objCmdUnit.Operate()
	Else
		MsgBox "Por favor, associe corretamente uma unidade de comando ao:" & _
				vbCrLf & "- '" & Me.PathName & ".Comando'" & vbCrLf & _
				" * Tipo atual: " & TypeName(objCmdUnit), _
				vbExclamation
	End If
End Sub

image

1 Like

Tentei fazer mas ainda estou com problemas.

1- mudei o tipo da propriedade comando como você disse:

2- alterei o script o botão:

3- fiz a seguinte associação:

4- seguem os objetos da subestação:

5- mas quando clico no botão recebo a msgbox que fizemos no script dizendo que o tipo está errado:
image

Acho que estou cometendo algum erro na associação então, mas não entendo como corrigir.

Obrigado pela ajuda.

Se você alterou o Tipo da propriedade e registrou sua biblioteca, a associação deveria aparecer como um link “indireto”, com o símbolo da “correntinha”. :chains:
Portanto, creio que você terá que refazer a associação.

image

Em tempo: embora não seja a melhor prática, é possível fazê-lo funcionar como umVariant, no caso uma String utilizando a função GetObject conforme sua pergunta inicial. Vou deixar aqui um exemplo, caso refazer as associções demande muito trabalho:

Sub btnComando_Click()
	Dim objCmdUnit
	Dim objParent
	Dim sPath : sPath = ""
		
	' Usar nome do XC caso btn esteja agrupado
	Set objParent = Parent
	
	sPath = objParent.Comando
	
	If (Trim(sPath) = "") Then
		' Procura por link
		For Each objLink In Parent.Links
			If (objLink.Property = "Comando") Then
				sPath = Trim(objLink.Source)
				Exit For
			End If
		Next
	End If
	
	On Error Resume Next
	Set objCmdUnit = Application.GetObject(sPath)
	On Error Goto 0
	
	If (TypeName(objCmdUnit) = "PowerCommandUnit") Then
		' TODO: Verificar Interlock...
		objCmdUnit.Operate()
	Else
		MsgBox "Por favor, associe corretamente uma unidade de comando ao:" & _
				vbCrLf & "- '" & objParent.PathName & ".Comando'" & vbCrLf & _
				" * Tipo atual: " & TypeName(objCmdUnit), _
				vbExclamation
	End If
End Sub

Bom dia Leandro,

eu havia registrado a biblioteca mas tive que apagar o objeto de tala e inserir novamente para aparecer a “corrente”. Depois que apareceu e refiz o link funcionou corretamente.

Muito obrigado pela ajuda.