Vai al contenuto
PLC Forum


Scrittura Su Plc Cs1h Con Visualbasic6


frommi

Messaggi consigliati

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


Gianmario Pedrani

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

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

ifachsoftware

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 If

End Function

Ciao :)

Link al commento
Condividi su altri siti

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: da frommi
Link al commento
Condividi su altri siti

ifachsoftware

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 If

End Function

Volendo 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 If

End Function

Come 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

ifachsoftware
C'è solo un piccolo problema che non avevo segnalato io sto usando Visual Basic 6

Perche' il codice che ti ho postato ti sembra scritto in aramaico antico ????

Ciao :D:lol:

Modificato: da ifachsoftware
Link al commento
Condividi su altri siti

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 left

PADR( ) inserts padding on the right

PADC( ) inserts padding on both sides.

"

Modificato: da frommi
Link al commento
Condividi su altri siti

ifachsoftware

Quelle funzioni sono delle mie dll .... in fondo che faccio ti do tutto il programma completo :blink::D:lol:

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

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...