frommi Inserito: 9 maggio 2006 Segnala Share Inserito: 9 maggio 2006 Salve a tutti, devo scrivere su un PLc Omron CS1H una serie di dati. Li scrivo tramite seriale con il protocollo hostLink.Il formato del messaggio l' ho presente e ho fatto delle prove di scrittura, tutto bene...la cosa che mi crea problemi è che non riesco a capire in che formato devo mandare i dati nel campo "WriteData".Ho provato a scrivere su un TextBox di VB 1234 e lui me lo scrive ma se scrivo 123 mi dice che il fomato è sbaglito, inoltre dovrei mandare anche valori con la virgola tipo 0,5 - 1,34 ecc.Altro dubbio dovendo spedirli tanti insime il fomato Host link prevede il carattere di ritono a capo dopo ogni dato giusto!!?Grazie a chiunque mi riaponda!Ciao! Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 9 maggio 2006 Segnala Share Inserita: 9 maggio 2006 Per la prima parte, quella della textbox ti posso rispondere con sicurezza... se scrivi 123 in una textbox non scrivi realmente un numero ma bensi scrivi una stringa di caratteri... la textbox accetta solo stringhe, devi usare 2 funzioni che ora non ricordo il nome per convertire una stringha in numero.. e vice versa... per la tua seconda domanda non so darti una risposta... ma comunque inizia a controllare questo ciaooooooo Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 9 maggio 2006 Segnala Share Inserita: 9 maggio 2006 Per quanto riguarda l'invio dati, mi sembra che tu possa spedire fino a 30 word consecutive prima di chiudere la stringa in trasmissione.E' chiaro che se devi scrivere il dm0, poi il dm2053 ed il dm8675 devi ogni volta trasmettere la stringa con FCS e i caratteri di coda. Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 10 maggio 2006 Segnala Share Inserita: 10 maggio 2006 Premetto che il CS1 non l'ho mai utilizzato ma i CQMH , C200H , C200HS , CJ ecc.. si .Bene se il CS1 e' simile al CJ e quello che vuoi scrivere e' in un'area W devi utilizzare il comando FINS che e' una versione un po' allungata del protocollo HOST LINK.Con il CJ in Host link inoltre non riesci a leggere tutte le aree di memoria fino in fondo ; quindi ti conviene passare al protocollo FINS.Ti allego una parte di una mia libreria in VB6 per leggere nell'area W' W HEX PLC -> Legge un Valore Esadecimale tramite comandi Fins'Function OmronHexFinsWRead(nUnit As Long, nChannel As Long, nValue As Long) As Boolean Dim Bufft As String ' Transmission Buffer Bufft = "[at]" & PadLeft(nUnit, 2, "0") & "FA" & Hex(FinsRespWait) ' Ritardo per risposta Bufft = Bufft & "000000000101B1"' BuffFins = "00" ' ICF - (00) Plc collegato direttamente al PC (80) se collegato in rete' BuffFins = BuffFins & "00" ' DA2 - (00) Host Link Mode' BuffFins = BuffFins & "00" ' SA2 - (00) Comunicazione Seriale' BuffFins = BuffFins & "00" ' SID - (00) Valore default per counter' BuffFins = BuffFins & "0101" ' Lettura CIO 0101' BuffFins = BuffFins & "B1" ' (B1) Area W a Word Bufft = Bufft & PadLeftHex(nChannel, 4, "0") & "00" ' Canale di Partenza Bufft = Bufft & PadLeftHex(1, 4, "0") ' N° Dati da leggere ' Send String'MsgBox "Tx Bufft = " & Bufft Bufft = OmronDial(Bufft, 31, True)'MsgBox "Rx Bufft = " & Bufft ' Check return value If (Bufft <> "") Then nValue = Hex_Long("&H" + Mid(Bufft, 24, 4)) OmronHexFinsWRead = True ' Reading OK Else nValue = 0 OmronHexFinsWRead = False ' Error End IfEnd FunctionCiao Link al commento Condividi su altri siti More sharing options...
frommi Inserita: 10 maggio 2006 Autore Segnala Share Inserita: 10 maggio 2006 (modificato) Ti ringrazio per il codice. comunque io devo scrivere nell' area D valori di seguito cioè partendo da un' indirizzo e poi gli altri di seguito!Il problema è che non capisco come deve essere il formato con cui devo mandare il comando, come cavolo faccio a scrivergli nella DM 123 (per esempio) il valore 0,9 o 1,23 ????Grazie Modificato: 10 maggio 2006 da frommi Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 10 maggio 2006 Segnala Share Inserita: 10 maggio 2006 Per scrivere nelle DM il codice e' questo :' Scrive un Valore Decimale -> DM HEX PLC'Function OmronHexDmWrite(nUnit As Long, nChannel As Long, nValue As Long) As Boolean Dim Bufft As String ' Transmission Buffer Bufft = "[at]" + PadLeft(nUnit, 2, "0") + "WD" + PadLeft(nChannel, 4, "0") + PadLeftHex(nValue, 4, "0") ' Send String Bufft = OmronDial(Bufft, 11, True) ' Check return value If (Bufft <> "") Then OmronHexDmWrite = True ' Reading OK Else OmronHexDmWrite = False ' Error End IfEnd FunctionVolendo puoi scrivere fino a 30 DM eccoti un esempio :' Scrive una Valore in Esadecimale nel PLC'' Funzione che Scrive in N Canali' Numero massimo di canali = 1-30 Altrimenti poi bisognerebbe gestire i frame'Function OmronHexDmNWrite(nUnit As Long, nChannel As Long, nValues As Long, ByRef anValue() As Long) As Boolean Dim Bufft As String ' Transmission Buffer Dim n As Long If nValues < 1 Or nValues > 30 Then ' Controlla i limiti dell'array MsgBox "Bound Error nValues = " & nValues & " (1-30) !", vbOKOnly Or vbCritical, "OmronHexDmNWrite" OmronHexDmNWrite = False ' Error Exit Function End If Bufft = "[at]" & PadLeft(nUnit, 2, "0") & "WD" & PadLeft(nChannel, 4, "0") For n = 1 To nValues ' Imposta tutti i valori Bufft = Bufft & PadLeftHex(anValue(n), 4, "0") Next ' Send String Bufft = OmronDial(Bufft, 11, True) ' Check return value If (Bufft <> "") Then OmronHexDmNWrite = True ' Reading OK Else OmronHexDmNWrite = False ' Error End IfEnd FunctionCome puoi vedere la scrittura di fino a 30DM consecutive e' preferibile per velocizzare le scritture.Tieni a mente che queste due funzioni sono Host Link e se devi scrivere in DM > 9999 devi usare comandi FINS...Ciao Link al commento Condividi su altri siti More sharing options...
frommi Inserita: 10 maggio 2006 Autore Segnala Share Inserita: 10 maggio 2006 Grazie! C'è solo un piccolo problema che non avevo segnalato io sto usando Visual Basic 6 Chiedo scusa a tutti !!! Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 10 maggio 2006 Segnala Share Inserita: 10 maggio 2006 (modificato) C'è solo un piccolo problema che non avevo segnalato io sto usando Visual Basic 6Perche' il codice che ti ho postato ti sembra scritto in aramaico antico ????Ciao Modificato: 10 maggio 2006 da ifachsoftware Link al commento Condividi su altri siti More sharing options...
frommi Inserita: 10 maggio 2006 Autore Segnala Share Inserita: 10 maggio 2006 (modificato) Credevo che le funzioni PadLeft, PadLeftHex sono di .Net perchè io nel mio VB6 non ce le ho!!!Si possono creare chiaro!!E la funzione OmronDial cosa fa!?Il calcolo dell' FCS dove lo esegui?In VB6 esiste:"PADL( ) inserts padding on the leftPADR( ) inserts padding on the rightPADC( ) inserts padding on both sides." Modificato: 10 maggio 2006 da frommi Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 10 maggio 2006 Segnala Share Inserita: 10 maggio 2006 Quelle funzioni sono delle mie dll .... in fondo che faccio ti do tutto il programma completo Quello che ti ho allegato e' un esempio per capire la composizione della stringa.le Funzioni Padleft mettono degli 0 alla sinistra di un numero decimale ; padlefthex mettono degli 0 alla Sx di un numero esadecimale.La funzione OmronDial si incarica di spedire la stringa e leggere il dato di ritorno.Ciao Link al commento Condividi su altri siti More sharing options...
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