Amicoadi Inserito: 25 ottobre 2019 Segnala Inserito: 25 ottobre 2019 Buonasera, vorrei chiedere a voi che praticate maggiormante questo argomento se esiste un evento per visual basic che si attivi al cambiare di una word o un bit dell'homeplc. Mi spiego meglio, per leggere una word su visual basic dall'homeplc bisogna usare l'istruzione XComm1.DTHP ( 1000, 1, 1 ), oppure del bit XComm1.HP_ReadIO(450, 1, 1).BIT2. Questa istruzione deve essre inserita in un comando button.click, oppure in un timer.event. Quello che vorrei sapere se esiste un evento di Xcomm1 che si attivi al cambiare di un bit o del valore di una word, come invece avviene già per esempio alla lettura di un lettore Transponder che scatena il seguente evento:evento Private Sub XComm1_ReadCardA(ByVal Codeimp As Long, NumCard As Long, CardError As Long, Level As Integer, DataScad As String, HourScad As String, Timeframes As Integer, _ OptValue1 As Long, Optvalue2 As Long, V_Address As Long, Ind As Long, Srv As Integer) if ....... then xxx end if End Sub Da altre discussioni ho visto che un evento simile esiste per il termo, ma non vedo quacosa di simile solo per un determinato bit/word. Grazie
HomePLC_Manager Inserita: 26 ottobre 2019 Segnala Inserita: 26 ottobre 2019 (modificato) Si esiste.. Essendo HomePLC un PLC ad eventi basta che utilizzi: Area Eventi 1 che trovi sul manuale di HomePLC da %MW3301 fino %MW3332 oppure Area Eventi 2 che va da %MW3351 fino %MW3382 anche spostando un valore o un Bit (ingresso, uscita ecc..) tramite programma, e la variazione arriva per evento tramite la libreria XComm utilizzando l'evento ZoneEvent, i parametri dell'evento sono: Zone - identifica l'area che viene trasmessa dall'evento Value () - riporta i valori dei registri dell'area V_Address - è l'indirizzo Virtuale dell'HomePLC Ind - è l'indirizzo Fisico dell'HomePLC Srv - è il Numero di Server su cui è connesso HomePLC Esempio di lettura dei registri per evento: Private Sub XComm1_ZoneEvent(ByVal Zone As Integer, value() As Long, V_Address As Integer, Ind As Integer, Srv As Integer) Dim cnt, idx, b(64) Select Case Zone Case 1 ' Eventi Zona 1 For cnt = 0 To 31 Form2.lblArea1(cnt).Caption = value(cnt + 1) Next cnt Case 2 ' Eventi Zona 2 For cnt = 0 To 31 Form2.lblArea2(cnt).Caption = value(cnt + 1) Next cnt End Select End Sub Essendo XComm un sistema distribuito l'evento viene ricevuto da tutte le postazioni connesse al server, quindi il programma di gestione dell'evento può girare indistintamente sia sul Server, sia sulle postazioni Client (Workstation) ma anche su Internet dai vari Browser connessi al Web Server di sistema. Nota: Per precisare rispetto al titolo del post, lo stesso Evento è valido per vari linguaggi quindi oltre al Visual Basic 6, si può ricevere da: VBA Visual Basic for Application (MS Word, Excel, ecc..) e relativi Software che lo integrano tra cui molti Scada Industriali Visual Basic .NET C# PHP ecc.. in pratica da qualsiasi programma che è in grado di creare un riferimento o incorporare la tecnologia COM di Microsoft Modificato: 26 ottobre 2019 da HomePLC_Manager
Amicoadi Inserita: 27 ottobre 2019 Autore Segnala Inserita: 27 ottobre 2019 Grazie per la risposta. Ho provato ma non funziona. Probabilmente sbaglio qualcosa o non ho capito come va usato. Quello che ho testato è: lato HomePlc ho messo in parallelo una memoria 424.13 e un evento 3301.0 comandati da un ingresso fisico. %MX3301.0 %IX0.0 () -------| |--------------()--------GND %MX424.13 Lato Visual Basic: Private Sub XComm1_ZoneEvent(ByVal Zone As Integer, value() As Long, V_Address As Integer, Ind As Integer, Srv As Integer) Label12.Text = 1 End Sub Da quello che ho capito attivando l'ingresso IX0.0 automaticamente cambia il valore dell'evento 3301. Questo dovrebbe attivare la Sub ZoneEvent ed eseguire il codice all'interno, ma questo non avviene. Io uso per delle prove l'HomePlc EMPLL2T. Su ladderhome tutto va bene. Qualche suggerimento?
del_user_45696 Inserita: 27 ottobre 2019 Segnala Inserita: 27 ottobre 2019 Si, il primo è di verificare che XComm sia realmente connesso al sistema, questo lo si fa semplicemente testando il risultato della funzione ConnectSRV se lato Server oppure ConnectWS se lato Workstation If XComm1.ConnectSRV() Then ServerConnesso = True Else ServerConnesso = False End If poi anche senza disturbare il Ladder, puoi fare una verifica veloce tramite la finestra di TEST I/O di Home&BUilding modificando il valore del registro 3301 e controllare che questo venga inviato per evento come nella figura sottostante:
Amicoadi Inserita: 27 ottobre 2019 Autore Segnala Inserita: 27 ottobre 2019 Ciao la connessione è Ok, avevo già controllato questo. Inoltre, per testare, nel form ho inserito un TimerEvent con il seguente codice per far cambiare colore ad un button If (XComm1.HP_ReadIO(424, 1, 1).BIT13) Then Button1.BackColor = Color.Green Else Button1.BackColor = Color.Gray End If e questo codice funziona correttamente. Ho testato quello che mi ha suggerito, inviando 54, leggo 54. Dato che il mio evento è appoggiato sul 3301.0, alzando l'ingresso %XI0.0 (quindi mettendo a 1 %MX3301.0), nella finestra sotto vedo che il valore cambiare a 55. Ho provato altri registri evento (3310) ma nulla cambia.
del_user_45696 Inserita: 28 ottobre 2019 Segnala Inserita: 28 ottobre 2019 Non ci sono altri parametri se non controllare che il framework e HomePLC cosi come eventuali Master I/O siano effettivamente aggiornati. L' evento viene trasmesso se si modifica anche un solo Bit delle aree ad eventi.
HomePLC_Manager Inserita: 28 ottobre 2019 Segnala Inserita: 28 ottobre 2019 Con che sistema operativo stai lavorando?
Amicoadi Inserita: 28 ottobre 2019 Autore Segnala Inserita: 28 ottobre 2019 Ciao, utilizzo windows 7 ultimate. L'applicativo di controllo utilizzo Visual studio express 2013.
HomePLC_Manager Inserita: 28 ottobre 2019 Segnala Inserita: 28 ottobre 2019 Quote utilizzo windows 7 ultimate. L'applicativo di controllo utilizzo Visual studio express 2013. stai utilizzando la libreria COM oppure quella .NET ?
Amicoadi Inserita: 28 ottobre 2019 Autore Segnala Inserita: 28 ottobre 2019 (modificato) libreria COM. Ho provato a utilizzare sia la word intera dell'evento che il singolo bit, ma nulla. Le altre comunicazioni vanno, ma l'event change non ne vuol sapere di andare. C'è modo di aggiornare la libreria COM= Se voglio importare la .NET come dovrei fare? Modificato: 28 ottobre 2019 da Amicoadi
HomePLC_Manager Inserita: 29 ottobre 2019 Segnala Inserita: 29 ottobre 2019 Specifica sempre il sistema operativo e l'ambiente di sviluppo, anche utilizzando la stessa versione di XComm, ogni ambiente SO/IDE ha le sue caratteristiche, simulando quello che fai tu, rilevo che su WIN7 l'avvio di VS.NET per l'uso di componenti COM (senza la configurazione specifica prevista) deve avvenire come amministratore (Tasto destro < Avvia Come Amministratore >) indistintamente dal fatto che tu lo sia come utente. Infatti avviando il programma senza specificarlo ho lo stesso comportamento che descrivi, mentre con l'avvio con diritti estesi funziona tutto regolarmente,
Amicoadi Inserita: 30 ottobre 2019 Autore Segnala Inserita: 30 ottobre 2019 Ciao, ho provato ad avviare visual studio come amministratore, e ho controllato tutti i consensi e sono ok. Per prova ho caricato il programma di prova C:\ActiveSystem\LH2_Samples\VB.NET Samples\Demo XComm ++ (COM), l'ho modificato per inserire un Form con un listbox e ho inserito nel form la Sub ZoneEvent. Provando a inviare 40 sul registro DTHP 3001 nulla accade. Al connessione al server, nella label Read DTHP ogni tanto inserire qualche valore a random (1, 2,3) ma non so da dove li tira fuori. Sicuramente mi sto perdendo in un bicchier d'acqua, ma non capisco dove sto sbagliando. L'editor che utilizzo è Visual Studio Express 2013 per Windows Desktop Versione 12.0.21
HomePLC_Manager Inserita: 30 ottobre 2019 Segnala Inserita: 30 ottobre 2019 Quote Provando a inviare 40 sul registro DTHP 3001 nulla accade Be, per partire prova a scrivere nel registro 3301 il 3001 non è un registro ad eventi...😊
Amicoadi Inserita: 31 ottobre 2019 Autore Segnala Inserita: 31 ottobre 2019 In realtà preso dalla disperazione le ho provate tutte. Eventi gruppo 1 (3301-3332), eventi gruppo 2 (3351-3382) e non eventi. Nel post precedente non so perchè ho incollato la prova con il non evento. HomePLC_Manager tu usi Visual Studio 2019? Su che windows?
HomePLC_Manager Inserita: 31 ottobre 2019 Segnala Inserita: 31 ottobre 2019 Uso Visual Studio 2017 su WIN 7
Amicoadi Inserita: 3 novembre 2019 Autore Segnala Inserita: 3 novembre 2019 (modificato) scusa se te lo chiedo, mi puoi postare il codice che hai scritto in Visual Basic qualche post sopra? Hai utilizzato la libreria Xcomm_building. Il componente AxXcomm1 come lo hai creato/inizializzato? Forse ho capito dove sbaglio. ZoneEvent è un membro della libreria XcommBuilding, mentre io ho sempre usato la libreria AxDrive_Xcomm e non ha l'evento ZoneEvent. Grazie Modificato: 3 novembre 2019 da Amicoadi
HomePLC_Manager Inserita: 4 novembre 2019 Segnala Inserita: 4 novembre 2019 Quote Hai utilizzato la libreria Xcomm_building. Il componente AxXcomm1 come lo hai creato/inizializzato? I componenti COM come quelli .NET si caricano semplicemente in modo standard per Visual Studio dall'apposita finestra
HomePLC_Manager Inserita: 4 novembre 2019 Segnala Inserita: 4 novembre 2019 (modificato) Quote scusa se te lo chiedo, mi puoi postare il codice che hai scritto in Visual Basic qualche post sopra? Direi che è un codice molto snello... Imports AxXComm_Building Public Class Form1 Private Sub AxXComm1_ZoneEvent(sender As Object, e As __XComm_ZoneEventEvent) Handles AxXComm1.ZoneEvent End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Label1.Visible = AxXComm1.ConnectSRV End Sub End Class La prima riga importa i riferimenti all'oggetto che connette Visual Studio al sistema BMS, tramite questa semplice impostazione si ha accesso a tutte le funzioni di Domotica e Building Automation, compreso controllo Accessi, Termoregolazione ecc.. Il Timer che esegue il refresh della Label è stato inserito solo per mostrare a video se l'oggetto è connesso al Server locale (ma potrebbe anche essere usato in Rete connesso alle Workstation) Poi trovi il codice dell'evento dove arrivano le variazioni di stato quando queste si verificano nel programma Ladder/FBD dell'HomePLC Modificato: 4 novembre 2019 da HomePLC_Manager
Amicoadi Inserita: 4 novembre 2019 Autore Segnala Inserita: 4 novembre 2019 Questo è quello che ho fatto. Agiungere la libreria COM Xcomm_building. Creato il form con label e timer e scritto il codice. Mi da errore in quanto non trova il componente AxXcomm1. Il componente va prima inizializzato e creato in InitializeComponent, come nell'esempio Demo XComm ++ (COM). Per intendeci manca sul form il componente che gestisce la comunicazione Xcomm Quindi, ho provato a inizializzarlo sulla nuova libreria, ma mi da errore durante la digitura del codice. Nell'esempio Demo XComm ++ (COM) il componente viene creato in questa maniera: Public WithEvents XComm1 As AxDrive_Xcomm.AxXComm Me.XComm1 = New AxDrive_Xcomm.AxXComm() CType(Me.XComm1, System.ComponentModel.ISupportInitialize).BeginInit() ' 'XComm1 ' Me.XComm1.Enabled = True Me.XComm1.Location = New System.Drawing.Point(27, 256) Me.XComm1.Margin = New System.Windows.Forms.Padding(4) Me.XComm1.Name = "XComm1" Me.XComm1.OcxState = CType(resources.GetObject("XComm1.OcxState"), System.Windows.Forms.AxHost.State) Me.XComm1.Size = New System.Drawing.Size(200, 40) Me.XComm1.TabIndex = 72 Me.Controls.Add(Me.XComm1) CType(Me.XComm1, System.ComponentModel.ISupportInitialize).EndInit() La struttura della libreria Xcomm_building è diversa dalla precedente. Quindi ho provato a replicare il componente in questo modo Public WithEvents XComm1_1 As XComm_Building.XComm Me.XComm1_1 = New XComm_Building.XComm() ma ovviamente non si può in quanto Me.XComm1 = New AxDrive_Xcomm.AxXComm() (vecchia libreria) è una New Sub, mentre Me.XComm1_1 = New XComm_Building.XComm() è solo una interfaccia. Sono io che sto facendo molta confusione con le librerie? Ho perso qualche passaggio nell'importare i componenti? Grazie.
Amicoadi Inserita: 4 novembre 2019 Autore Segnala Inserita: 4 novembre 2019 Ok. Ci sono, problema risolto in parte. Invece di creare la comunicazione con il codice da me, ho caricato l'oggetto "Strumenti-> Scegli dalla casella di strumenti" e ho importato l'oggetto Xcomm_Building.Xcomm. Gli errori del codice sono spariti, riesco a compilare il codice. Quando vado in esecuzione (avvia) mi esce il seguente errore. Sai cosa può essere? System.InvalidOperationException: 'Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Interfaccia non registrata. (Eccezione da HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))' Eccezione Interna COMException: Interfaccia non registrata. (Eccezione da HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) Controllando il codice di errore in internet, ho trovato che il componente COM che voglio importare non è registrato. Dove va registrato il componente COM?
Amicoadi Inserita: 4 novembre 2019 Autore Segnala Inserita: 4 novembre 2019 Ciao, tutto risolto 😃 Finalmente l'evento ZoneEvent funziona. Ho perso 10 giorni dietro a una cavolata. Mi ero fissato a voler importare l'oggetto scrivendo il codice. Importato l'oggetto AxXcomm il tutto diventa facile. Se a qualcuno interessa risolvere il problema Quote System.InvalidOperationException: 'Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Interfaccia non registrata. (Eccezione da HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))' basta guardare il video https://www.youtube.com/watch?v=jBKfTbmAVi4 e il problema si risolve. Grazie per il supporto.
HomePLC_Manager Inserita: 5 novembre 2019 Segnala Inserita: 5 novembre 2019 (modificato) Esatto, l'oggetto importalo sempre dalla finestra delle librerie, non solo come riferimento... Modificato: 5 novembre 2019 da HomePLC_Manager
HomePLC_Manager Inserita: 5 novembre 2019 Segnala Inserita: 5 novembre 2019 Quote Finalmente l'evento ZoneEvent funziona. Direi non solo quello, adesso hai accesso completo al sistema di automazione...😉
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora