ms4369 Inserito: 4 novembre 2015 Segnala Inserito: 4 novembre 2015 Ho creato un blocco funzione per calcolare il CS, ma non funziona perfettamente, dove sto sbagliando?testo blocco strutturato:Fine:= Inizio+lunghezza;N:= 1;FCS:= 0;FOR J:= inizio TO Fine DO Car:= MID(Variabile,N,J); TJ:=STRING_TO_WORD( Car); FCS:= TJ XOR FCS; END_FOR;ENO:= FALSE; variabili interne:J UINT TJ WORD Fine UINT Car STRING(1) N UINT Variabili ingresso:EN BOOLInizio UINT Lunghezza UINT Variabili uscita:ENO BOOLFCS WORD variabili ingresso/uscitaVariabile STRING(40) Grazie
Ctec Inserita: 4 novembre 2015 Segnala Inserita: 4 novembre 2015 Non puoi usare una stringa.Supponiamo che vuoi fare il checksum di due bytes, uno contiene #01 e l'altro #02 (# è esadecimale in Omron). Li metti nella tua stringa e li passi alla FB.Quando fai la MID, ti estrae il primo byte cioè #01, ma l'istruzione STRING_TO_WORD non ti restituisce 1, perchè #01 non è un carattere ASCII di una cifra, e non può convertirlo, per cui probabilmente restituirà 0. Stessa cosa ovviamente per #02.A meno che tu non abbia composto la stringa byte per byte con CONCAT da una STR4... Ma occhio che il valore #00 che è un valore valido, corrisponde a stringa nulla o fine stringa.Meglio lavorare con dati numerici, anche se c'è un po' da smazzarsi per l'utilizzo dei bytes che non sono nativi in Omron...
ms4369 Inserita: 5 novembre 2015 Autore Segnala Inserita: 5 novembre 2015 testo blocco strutturato:IF start THEN (* estrae il byte No.2 *) Cost2:= INT_TO_WORD(255); Var2:= Variabile[0] AND Cost2; temp:= temp XOR Var2; (* Estrae gli altri byte *) FOR N_Ciclo:=1 TO 6 DO Var1:=SHR(Variabile[N_Ciclo],8); temp:= temp XOR Var1; Var2:= Variabile[N_Ciclo] AND Cost2; temp:= temp XOR Var2; END_FOR; Var1:=SHR(Variabile[7],8); temp:= temp XOR Var1; FCS:= temp;END_IF; ENO:=FALSE;Variabili interne:Var1 WORD Var2 WORD N_Ciclo UINT Cost2 WORD temp WORD Variabili Ingresso: start BOOL Variabili Uscita:FCS WORD Mantenuto: Sì Variabili ingresso/uscita:Variabile WORD [40] Questa volta il blocco funziona, unico problema che ogni volta che do l'ingresso start, il valore di FCS va a zero e poi indica il risultato.Mi servirebbe che il valore rimanesse...Grazie
ms4369 Inserita: 5 novembre 2015 Autore Segnala Inserita: 5 novembre 2015 Esempio funzionale: word[] contiene 264E 3030 3030 3030 4C30 3030 3030 305C La funzione calcola il checksum dei valori evidenziati
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