Page 1 of 1
VO e ModBus RTU [Risolto]
Posted: Tue Jan 02, 2024 10:13 pm
by claudiocarletta
Salve a tutti e buon anno,
vorrei utilizzare il protocollo ModBus RTU, tramite un adattatore USB to RS485
https://www.waveshare.com/usb-to-rs485.htm, per far
colloquiare il PC con sensori e attuatori tramite questo protocollo.
Ho già sviluppato e risolto, a scuola (sono un insegnante), in ambiente Arduino questo problema e mi sarebbe piaciuto poterlo mostrare ai ragazzi in altra veste, con una applicazione Win32.
Ho trovato una libreria già bella e pronta qui:
https://github.com/stephane/libmodbus/w ... 08-Express ma non so dove metterla nel progetto Visual Studio per utilizzarla ammesso che la possa utilizzare con VO.
Ho provato pure ad inserire tutto il codice
https://github.com/stephane/libmodbus/tree/master/src in un nuovo progetto VO Windows Application senza nessun risultato, credo che sia scritto per una console C++.
Ho provato anche ad importare qualche libreria da
NuGet ma durante l'import mi dà il seguente errore:
Non è stato possibile installare il pacchetto 'MDBLib 1.0.5'. Si sta tentando di eseguire l'installazione in un progetto destinato a '.NETFramework,Version=v4.6', ma il pacchetto non contiene riferimenti ad assembly o file di dati compatibili con il framework.
e non so che significa.
Se ci fosse qualcuno che potesse darmi una dritta ...
Grazie a tutti
e Buon Anno
Re: VO e ModBus RTU
Posted: Wed Jan 03, 2024 7:05 am
by wriedmann
Ciao Claudio,
purtroppo sono in ferie con una connessione internet molto scadente, perciò non ti posso essere d'aiuto.
Questa DLL è una DLL Win32, perciò necessita dei prototipi per VO. Scriverli da un file .h è un lavoro manuale e dipende dal numero delle chiamate necessarie, può impegnare circa 5-10 minuti per chiamata.
Come scritto, sono in ferie e non mi posso guardare l'interfaccia necessaria.
Saluti
Wolfgang
Re: VO e ModBus RTU
Posted: Wed Jan 03, 2024 6:26 pm
by claudiocarletta
Ciao Wolfgang,
grazie per la disponibilità, io continuo a smanettarci sopra, se dovessi risolvere prima del tuo ritorno da solo o con l'aiuto di qualcun altro, troverai un [risolto] nel titolo del post, altrimenti ho paura che ti ruberò del tempo.
P.S. ma quindi è inutile che provo a trovare una libreria da NuGet che non mi dia problemi nell'istallazione, oppure se dovesse installarsi correttamente potrebbe funzionare?
Ciao
Claudio
Re: VO e ModBus RTU
Posted: Thu Jan 04, 2024 1:23 pm
by wriedmann
Ciao Claudio,
una libreria da NuGet non funziona con VO, ma solo con X#. E se usi XIDE serve un po di lavoro manuale.
Saluti
Wolfgang
Re: VO e ModBus RTU
Posted: Fri Jan 05, 2024 9:33 am
by claudiocarletta
Ciao Wolfgang,
per fortuna ho letto in ritardo la tua risposta in cui mi dicevi che:
una libreria da NuGet non funziona con VO, ma solo con X#
continuando a smanettare ho inserito la prima libreria per ModBus che non mi dava errori
e ieri sera ho letto perfettamente volt, amper e watt da un analizzatore di rete, lo stesso che ero riuscito ad interfacciare con Arduino.
Non so quindi se sia stato solo un colpo di
lato B ma credo di aver trovato una soluzione al mio problema. Posto quindi quanto realizzato se ci fosse ancora qualcuno che sviluppa in VO e volesse interfacciarsi con sensori e attuatori in ModBus.
EasyModbus è la libreria che ho inserito nel progetto:
e questo è uno scorcio del codice utilizzato per leggere un registro dell'analizzatore di rete
Code: Select all
LOCAL Com AS STRING
LOCAL Vel:= 9600 AS INT
LOCAL i,status AS INT
LOCAL Valore AS REAL4
LOCAL aRegistro AS INT[]
sSym := oControl:NameSym
DO CASE
CASE sSym == #CbCom
BEGIN SEQUENCE
Com := SELF:oDCCbCom:CurrentItem
status := 0
SELF:ChiudiCom()
SELF:ChiudiModBus()
status := 1
SELF:oSerial := SerialPort{Com, Vel, Parity.None, 8, StopBits.One}
SELF:oSerial:Open()
IF !SELF:oSerial:IsOpen
SELF:aComTro := {}
SELF:oDCCbCom:Clear()
InfoBox{SELF, "Attenzione", "Problemi con la COM selezionata"}:Show()
SELF:oCCCercaCom:SetFocus()
ELSE
status := 2
SELF:Pointer := Pointer{POINTERHOURGLASS}
SELF:oSerial:DiscardInBuffer()
SELF:oSerial:DiscardOutBuffer()
SELF:oSerial:WriteLine("Prova") // Trasmissione dati Iniziale
SELF:AspettaTraCom(2, SELF:oSerial) // Attesa completamento trasmissione
SELF:AspettaRicCom(2, SELF:oSerial) // Attesa dati in ricezione
SELF:oSerial:ReadExisting() // Eliminazione dati ricevuti
SELF:oDCDaTrasm:SetFocus()
SELF:oSerial:Close()
status := 3
SELF:MyMoBu:SerialPort := Com
SELF:MyMoBu:Baudrate := Vel
SELF:MyMoBu:Parity := Parity.None
SELF:MyMoBu:StopBits := StopBits.One
SELF:MyMoBu:UnitIdentifier := 10 // Unità slave da interrogare
SELF:MyMoBu:Connect()
SELF:MyMoBu:ConnectedChanged += CambioConnessioneModBus()
IF SELF:MyMoBu:Connected
aRegistro := SELF:MyMoBu:ReadHoldingRegisters(0X0144, 2) // Registro sull'analizzatore da leggere 2 numero di byte
Valore := EasyModbus.ModbusClient.ConvertRegistersToInt(aRegistro, EasyModbus.ModbusClient.RegisterOrder.HighLow) / 1000.0
ELSE
ErrorBox{SELF, "FALLITA", "comunicazione ModBus"}:Show()
ENDIF
SELF:Pointer := Pointer{POINTERARROW}
ENDIF
RECOVER
DO CASE
CASE status == 0
InfoBox{SELF, "Attenzione", "Impossibile chiudere le precedenti comunicazioni COM e/o ModBus"}:Show()
CASE status == 1
InfoBox{SELF, "Attenzione", "Impossibile aprire la porta " + Com + " selezionata"}:Show()
CASE status == 2
InfoBox{SELF, "Attenzione", "Impossibile verificare la porta " + Com + " selezionata"}:Show()
CASE status == 3
InfoBox{SELF, "Attenzione", "Impossibile utilizzare ModBus sulla porta " + Com + " selezionata"}:Show()
ENDCASE
SELF:ChiudiCom()
SELF:ChiudiModBus()
END SEQUENCE
ENDCASE
Non so se avrò ancora problemi nel prosieguo del progetto ma per adesso va bene così
Ciao
Claudio
p.s. Buone vacanze, penso che leggerai il post dopo la Befana
Re: VO e ModBus RTU
Posted: Sat Jan 06, 2024 2:50 am
by wriedmann
Ciao Claudio,
tanto per correttezza: quello che tu stai usando, non è VO, ma X# con le classi GUI di VO, e perciò un applicatico .NET in tutti i sensi.
Devi ricordare che .NET non ti limita nella scelta delle GUI, ma al contrario ti da un mare di possibilità. Le classi GUI principali sono si Windows Forms e WPF, ma ce ne sono anche altri di Microsoft o altri produttori, come nel nostro caso le classi GUI VO compatibili e le XGUI sempre compatibili con le classi GUI VO, ma basati su Windows Forms.
Mi sembra molto importante che queste scelte siano molto chiare perchè solo in questo caso riesci a muoverti in .NET senza problemi, e anche qui nel forum le risposte possono essere corrette.
Saluti
Wolfgang
Re: VO e ModBus RTU
Posted: Sat Jan 06, 2024 8:18 pm
by claudiocarletta
Ciao Wolfgang,
Grazie della spiegazione. Avevo sempre avuto il dubbio circa il linguaggio in cui in questi anni stavo programmando: ma è VO o X#?
E non capivo come alla fine potessi utilizzare: la libreria per le comunicazioni poi la libreria per il parlato e adesso quella per le comunicazioni ModBus.
Quindi quello che uso io è X# nel dialetto VO ma pur sempre un applicativo .NET
Diciamo che la cosa mi entusiasma non poco visto quello che quindi potrei fare
Grazie sempre
Saluti
Claudio
Re: VO e ModBus RTU [Risolto]
Posted: Sun Jan 07, 2024 9:47 am
by wriedmann
Ciao Claudio,
in effetti è una grandissima cosa che riusciamo a lavorare "come sempre", ma in un ambiente completamente differente e molto più potente.
Saluti
Wolfgang