Ciao a tutti
Vorrei creare un client per trasferire dei file di testo da un PC a una macchina utensile collegata in rete.
La macchina ha installato il server OPC , dovrei connettermi e trasmettere un semplice file di testo.
Il costruttore della macchina mi ha inviato il codice per connettersi alla macchina e le stringhe per dialogare.
Ho creato un Form con un button "Connetti"" e una finestra per sfogliare le cartelle e cercare il file da trasferire.
Una volta scelto lo invio con la stringa:
codice:
LoadPart(path as string, partname as string) as integerDove path è un percorso UNC (esempio: c:\xxxx, \\192.168.12.12\xxxx) da dove si trova il
pezzo partname da copiare nella cartella database della macchina.
La funzione ritorna un valore intero dove:
0 funzione svolta correttamente
1 la macchina è in uno stato operativo attivo, nulla di fatto
2 errore in path o partname, nulla di fatto
3 il pezzo da sovrascrivere è quello in produzione, nulla di fatto
Per la connessione ho il seguente codice che mi ha dato il costruttore della macchina e l'ho inserito in un modulo di classe:
codice:
Private GuiIpAddress as string=”192.168.xxx.xxx” ‘ indirizzo ip del pc macchina in rete aziendalePrivate serverUrl as string=” opc.tcp://” & GuiIpAddress & “:51210/UA/Gui3D”
Private Async Sub InitServer()
Dim conf As New ApplicationConfiguration
conf.ApplicationName = "Test"
conf.ApplicationType = ApplicationType.Client
conf.ClientConfiguration = New ClientConfiguration With {.DefaultSessionTimeout = 50000}
conf.SecurityConfiguration = New SecurityConfiguration With {
.ApplicationCertificate = New CertificateIdentifier With {.StoreType = "Directory", .StorePath =
"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", .SubjectName =
"Reference Client"},
.TrustedPeerCertificates = New CertificateTrustList With {.StoreType = "Directory", .StorePath =
"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications"},
.TrustedIssuerCertificates = New CertificateTrustList With {.StoreType = "Directory", .StorePath =
"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities"},
.RejectedCertificateStore = New CertificateTrustList With {.StoreType = "Directory", .StorePath =
"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates"},
.NonceLength = 32,
.AutoAcceptUntrustedCertificates = True
}
Await conf.Validate(ApplicationType.Client)
m_configuration = conf
Dim configuration As EndpointConfiguration = Opc.Ua.EndpointConfiguration.Create()
configuration.OperationTimeout = 5000
Dim uri As New Uri(serverUrl)
Dim selectedEndpoint As EndpointDescription = Nothing
Using client As DiscoveryClient = DiscoveryClient.Create(uri, configuration)
Dim endpoints As EndpointDescriptionCollection = client.GetEndpoints(Nothing)
For ii As Integer = 0 To endpoints.Count - 1
Dim ep As EndpointDescription = endpoints(ii)
If ep.EndpointUrl.StartsWith(uri.Scheme) Then
If (ep.SecurityMode <> MessageSecurityMode.None) Then
Continue For
End If
If (selectedEndpoint Is Nothing) Then
selectedEndpoint = ep
End If
If (ep.SecurityLevel > selectedEndpoint.SecurityLevel) Then
selectedEndpoint = ep
End If
End If
Next
If (selectedEndpoint Is Nothing And endpoints.Count > 0) Then
selectedEndpoint = endpoints(0)
End If
End Using
Dim endpointUrl As Uri = Utils.ParseUri(selectedEndpoint.EndpointUrl)
If (endpointUrl IsNot Nothing And endpointUrl.Scheme = uri.Scheme) Then
Dim builder As UriBuilder = New UriBuilder(endpointUrl)
builder.Host = uri.DnsSafeHost
builder.Port = uri.Port
selectedEndpoint.EndpointUrl = builder.ToString()
End If
Dim endpointConfiguration As EndpointConfiguration = EndpointConfiguration.Create(m_configuration)Dim endpoint As ConfiguredEndpoint = New ConfiguredEndpoint(Nothing, selectedEndpoint,
endpointConfiguration)
Dim m_session As Opc.Ua.Client.Session = Await Opc.Ua.Client.Session.Create(
m_configuration,
endpoint,
False,
False,
"Sessione",
60000,
UserIdentity,
PreferredLocales)
End Sub
Public Property UserIdentity As IUserIdentity = Nothing
Public Property PreferredLocales As String() = Nothing
Private m_configuration As ApplicationConfiguration
Public Property Configuration As ApplicationConfiguration
Get
Return m_configuration
End Get
Set(value As ApplicationConfiguration)
If Not Object.ReferenceEquals(m_configuration, value) Then
If m_configuration IsNot Nothing Then
RemoveHandler m_configuration.CertificateValidator.CertificateValidation, m_CertificateValidation
End If
m_configuration = value
If m_configuration IsNot Nothing Then
AddHandler m_configuration.CertificateValidator.CertificateValidation, m_CertificateValidation
End If
End If
End Set
End Property
Mi servirebbe aiuto per invocare la connessione e gestire la connessione dal tasto "Connetti" del form.
Grazie