Newsgroup: it.comp.lang.visual-basic
Titolo: PLC Omron, protocolli, RS232 e vb

Altra questioncina:
devo far colloquare un PC con un Omron CQM2, come si evinceva dal 
post precedente.
Ho cercato un po' su internet alla ricerca di un aiutino, ma nulla da
fare, se non ocx o dll a pagamento (da 500 a 1100 euro). La omron 
stessa vende le librerie per sviluppatori.
Mi hanno parlato di un sito che dovrebbe aiutarmi, del tipo 
www.plc.it/.com
, ma non esiste (o meglio e' registrato senza essere 
utilizzato). 
Qualcuno ha gia' fatto qlc del genere? e in caso affermativo, 
potrebbe mandarmi degli esempi via mail di codicillo?
(in particolare qualche esempio di comando inviato, di 
interpretazione di risposte ricevute, di costruzione comandi da 
inviare secondo il protocollo ("@AA00WL......*" & vbcr)
Per esempio, il terminatore e' il carattere asterisco ("*") seguito 
da un cariage return. quindi la mia stringa di terminazione sara' 
"*" & vbcr
oppure
"*" & vbcrlf
?
Inoltre, come si calcola l'FCS (ok, facendo l'OR del pacchetto, ma 
come lo faccio l'OR tra stringhe??)
Ed ancora: i dati che mi invia sono gia' convertiti in un formato 
"umano", o devo riconvertirli
(ad es.: esadecimale --> binario, stringa-->binario, ecc.)
Magari chiederei anche quali sono le funzioni di conversione tra 
stringhe, ma ho paura che potrei spaventare eventuali volontari per 
una risposta :-)
lo so che l'help vb mi risolverebbe molte cose, ma mi sono incasinato
con l'MSDS, e non riesco a leggerlo (diciamo cosi'...)
Come avviene l'handshake della comunicazione? CTS? Xon?...
Molte di queste domande so anch'io che trovano risposta avendo a 
disposizione un PLC, ma non posso disporne di uno sino a sabato, e 
lunedi' devo consegnare il lavoro, quindi vorrei arrivare al sabato 
di test senza l'acqua alla gola con ancora una miriade di problemi da
risolvere.
(Ovvio che alla prima domenica piovosa mettero' disponibili free ogni
esempio, cosi' chi come me avra' lo stesso problema una tantum non 
dovra' pagare librerie a pagamento, ma potra' avvalersi di esempi 
comodi e commentati)
vi ringrazio sin d'ora
Marco Foschi (fritz@work)
-- 
Hebrew: Macho glass of beer 
News 2000 [v 2.06] - 
http://www.akapulce.net/socket2000

 Come avviene l'handshake della comunicazione? CTS? Xon?...
Generalmente è spento.
Per il calcolo del fine messaggio puoi usare
'FUNZIONE DI CALCOLO FINE_STRINGA PER PROTOCOLLO SYSWAY
Public Function Fine_Stringa(ByVal stringa As String) As String
Dim Q
Dim I As Integer
For I = 1 To Len(stringa)
    Q = Asc(Mid(stringa, I, 1)) Xor Q
Next I
Fine_Stringa = Hex(Q)
If Len(Fine_Stringa) = 1 Then
    Fine_Stringa = "0" & Fine_Stringa
End If
End Function
(non l'ho scritta io, lo so che fa schifo, ma funziona).
Per inviare un messaggio:
'FUNZIONE DI SCRITTURA PORTA SERIALE - Protocollo Omron Sysway
Public Function Scrittura_Sysway(Porta As Object, nodo As String, ByVal
inizio_area As Integer, ByVal valore As Long, Risposta As String, Timeout As
Long, Optional verboso As Boolean, Optional testo_out As Object, Optional
testo_in As Object) As Integer
Dim Comando As String
Dim esci As Boolean
Dim Valore_Hex As String
Dim lunghezza_risposta As Integer
Dim ora_inizio, ora_adesso As Long
If Porta.PortOpen = False Then
    Risposta = ""
    Scrittura_Sysway = cost_NoCom
    Exit Function
End If
'Converto il valore in stringa esadecimale a quattro cifre
Valore_Hex = Dec2Hex(valore, 4)
'Vuoto il buffer di input
Risposta = Porta.Input
Risposta = ""
Scrittura_Sysway = cost_NoEseguito
Comando = "@" & nodo & "WD" & Format$(inizio_area, "0000") & Valore_Hex
Comando = Comando & Pubbliche.Fine_Stringa(Comando) & "*" & Chr$(13)
lunghezza_risposta = 11
If verboso Then
testo_out.Caption = "Scrittura Sysway: " & Comando
testo_in.Caption = "In Attesa...."
testo_out.Refresh
testo_in.Refresh
End If
Porta.Output = Comando
Ritardo (300)
ora_inizio = GetTickCount()
esci = False
    Do Until esci = True
        If Porta.InBufferCount >= lunghezza_risposta Then
            esci = True
            Scrittura_Sysway = cost_OK
        End If
        'DoEvents
        ora_adesso = GetTickCount()
        If (ora_adesso - ora_inizio) > Timeout And Not esci Then
            esci = True
            Scrittura_Sysway = cost_NoCom
        End If
    Loop
If Scrittura_Sysway <> cost_NoCom Then
    Risposta = Porta.Input
    If Mid(Risposta, 1, 1) <> "@" Then
        Risposta = ""
        Scrittura_Sysway = cost_NoDati
        Else
        Scrittura_Sysway = cost_OK
    End If
End If
If Comando = Risposta Then
    Risposta = "Stringa di Rimbalzo"
    Scrittura_Sysway = cost_NoCom
End If
If verboso Then
    testo_in.Caption = "Scrittura Sysway: " & Risposta
    testo_in.Refresh
End If
End Function
Devi vedere un po' le chiamate alle funzioni e le costanti, ma ci si salta
fuori.
Ciao
Alberto

 fuori.
si, qualche dubbio, ma mi hai dato un'enorme aiuto, se consideri che 
ci sto battendo la testa da parecchio...
Inoltre, se non abuso della tua disponibilità, avresti un codicillo 
simile per il comando di richiesta lettura di una serie di relay, e 
successiva funzione di elaborazione della risposta del PLC (cosi', 
assieme all'esempio che mi hai fornito per scrivere una DM, posso 
fare tutto)
grazie ancora
Marco Foschi (fritz@work)
-- 
Software is to computers as yeast is to dough.  - Chuck Bradshaw


 fare tutto)
Cosa intendi per lettura di relay?
Teoricamente basta inviare il comando di lettura opportuno, ed aspettare la
risposta.
Alberto