Vai al contenuto
PLC Forum


Modifica Programma Vb - Lettura dati su As511


MICHELESAMM

Messaggi consigliati

Ciao a tutti.....

Non so come fare per trasferire il mio file As511 modificato su forum , comunque per chi lo conosce

la mia modifica da effettuare è quella di leggere contemporaneamente piu' dw , in diverse listbox

senza la necessita' di dover premere il pulsante per lettura dw.

Grazie.....

Link al commento
Condividi su altri siti


Inserisci nel form un controllo Timer e, dall'evento omonimo, richiama la subroutine del tasto (NonSoComeSiChiama_Click()...).

Ricordati di impostare un valore coerente nella proprietà Interval del controllo Timer.

Link al commento
Condividi su altri siti

Se non deve necessariamente trascorrere del tempo tra una lettura e l'altra, è sufficiente che la routine legga in sequenza i dati dalle list boxes, magari con dei cicli for, o do while, o do until, applicati a cascata su tutte le list boxes da leggere. Volendo posso inserire le righe di codice, se non sufficientemente chiara la mia esposizione.

Link al commento
Condividi su altri siti

Grazie del consiglio.....

Ok ho fatto come mi avete consigliato e funziona!!..

Purtroppo, ho ancora un ostacolo da superare, devo trasferire i dati esistenti nelle listbox e traferirli,

in un foglio excel , in modo tale da condividere il file excel e mettere a disposizione i dati in rete ethernet.

x nll ti sarei grato se mi mandi un esempio di codice .

Vi saluto a Presto....

Modificato: da MICHELESAMM
Link al commento
Condividi su altri siti

Questa potrebbe essere una soluzione, tieni presente che ho scritto il codice a caso.Meglio se aspetti altri suggerimenti piu' professionali.

'Prima cosa serve caricare da Progetto > Riferimenti > la libreria "Microsoft Excel 10.0 Object Library"

'Per provare chiama CreaXLS(NomeFileXLS)

Public NomeFileXLS As String

Public MyXL As Workbook

Public FoglioExcel As Worksheet

Sub GetExcel(Modello As String)

On Error Resume Next

If Err.Number <> 0 Then ExcelWasNotRunning = True

Err.Clear

Set MyXL = Excel.Workbooks.Open(Modello)

End Sub

Sub DetectExcel()

Const WM_USER = 1024

Dim hwnd As Long

hwnd = FindWindow("XLMAIN", 0)

If hwnd = 0 Then ' 0 significa che Excel non è in esecuzione.

      Exit Sub

Else

      SendMessage hwnd, WM_USER + 18, 0, 0

End If

End Sub

Sub CreaXLS(NomeFile)

    GetExcel (NomeFile)

    'trasferisci un valore a excel in foglio 1, riga e colonna 1

    MyXL.Sheets(1).Cells(1, 1).Value = 123

    If ExcelWasNotRunning = True Then

        MyXL.Worksheets(1).Close (False)

        MyXL.Close (True)

        Set FoglioExcel = Nothing

        Set MyXL = Nothing

        Exit Sub

    End If

    MyXL.Close (True)

    Set FoglioExcel = Nothing

    Set MyXL = Nothing

End Sub

Link al commento
Condividi su altri siti

Ciao dago.....

Ho caricato il codice che mi hai gentilmente mandato ,

Mi servirebbero maggiori dettagli per poter provare , ho praticamente una serie di textbox

che ricevono dei valori da plc text1,text2,text3....ecc.. , in più come faccio a indicare il foglio excel,

come posizione per esempio si trova in c:\documenti nel codice.

Grazie ancora...

Ciao Michele

Link al commento
Condividi su altri siti

Prova cosi:

Sostituisci il codice precedente con questa sub

Sub CreaXLS(NomeFile As String, DatoDaScrivere As String)

    GetExcel (NomeFile)

    'trasferisci un valore a excel in foglio 1, riga e colonna 1

    MyXL.Sheets(1).Cells(1, 1).Value = DatoDaScrivere

    If ExcelWasNotRunning = True Then

        MyXL.Worksheets(1).Close (False)

        MyXL.Close (True)

        Set FoglioExcel = Nothing

        Set MyXL = Nothing

        Exit Sub

    End If

    MyXL.Close (True)

    Set FoglioExcel = Nothing

    Set MyXL = Nothing

End Sub

Quindi:

'Devi creare un file xls, vuoto oppure formattato come vuoi e salvarlo ad

'esempio in c:\documenti con il nome di "prova.xls"

'Metti un pulsante sul form con il nome Command1 e una casella di testo Text1

'Copy questo nel codice del form e prova un po' a vedere cosa succede.

Private Sub Command1_Click()

Dim Nome As String

Nome = "c:\documenti\prova.xls"

    Call CreaXLS(Nome, Text1.Text)

   

End Sub

Come gia' detto il codice che ho scritto non prevede tutta una serie di cose e controlli da fare, ma penso che un po' alla volta riuscirai ad ottimizzare tutte le sue belle cose.In ogni caso non preoccuparti se rimane qualche baco la colpa e' "di Windows che e' instabile" ,come si suol dire :lol:

Link al commento
Condividi su altri siti

E gia' da parecchi anni che vengo utilizzando con successo visual c++ per la costruzione di APIs sotto windows

che interfacciano sistemi plcs o raba del genere e quindi non posso aiutarti con visual basic.

Il bello e' che dentro una frame c++ puoi scrivere anche del codice in assembler per la gestione

del UART e quindi evitare una marea di problemi.In ogni caso, visual c++ e ricco in librerie per la gestione

del DCB.

Si, e' vero che windows e' ancora instabile pero' tante volte siamo noi i porgrammatori a generare

le grane.

Comunque se l'api esegue un pulling periodico,dovresti anche scrivere una buona routine di scape e

reinitialization del colloquio di communicazione in caso di break e fare molta attenzione nella gestione

della memoria perche e' qui dove sempre si sbaglia e quindi la applicazione rallenta o si pianta.

Per quanto riguarda alla converzione in formato excel, ti consiglio prima di salvare i dati in

formato binario,questi occupano poco spazio e sono facili di manovrargli.

Poi una seconda applicazione locale puo fare la converzione in excel oppure access per ulteriori usi.

Saluti.

Link al commento
Condividi su altri siti

Ciao Dago.....

Ho caricato il tuo nuovo codice , non so se ho fatto bene ma locaricato nella sezione generale_dichiarazioni,

il problema che si verifica è un errore di compilazione nel momento in cui vado a premere il pulsante command1 mi dice "sub o function non definita", per il resto ho fatto esattamente come mi hai riferito.

Ti saluto e Grazie ancora.....

Ciao Michele

Link al commento
Condividi su altri siti

MICHELESAMM

Non ho postato codice, perché ho visto che lo ha fatto egregiamente Dago.

Personalmente l'avrei impostato diversamente, ma questo non toglie nulla al lavoro di Dago.

Ovvio che si può fare di meglio, ma questo è utile riservarlo all'adattamento che certamente farai nell'applicare il programma sulla tua macchina. Ti suggerisco di curare bene anche la gestione degli errori, particolarmente aprendo e chiudendo files, altrimenti rischi di trovarti bloccato.

E' importante che tutte le librerie richiamate siano presenti sulla macchina e nella giusta cartella, altrimenti è logico che qualche procedura/funzione non risulti definita (la definizione è, appunto, contenuta nella libreria).

Link al commento
Condividi su altri siti

X Nll e Dago

Forse ho scelto il modo peggiore per iniziare a lavorare con Vb , probabilmente dovrei partire con nozioni di base

anche se ho delle conoscenze in programmazione Plc Siemens ; Comunque Per rispondere a te Dago la

libreria che ho caricato è "Microsoft office 8.0 Obiect Library".

Vi saluto...

Michele

Link al commento
Condividi su altri siti

Mi correggo oltre a office nella libreria ho caricato anche "Microsoft Excel 8.0 Object library"

comunque più precisamente nel premere il pulsante command1 la riga di codice che viene evidenziata

è " getexcel(nomefile)"

Ciao a presto...

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...