Vai al contenuto

Blocco funzione SysGetCrc per calcolo CRC

Home Forum Programmazione IEC 61131 (LogicLab) Blocco funzione SysGetCrc per calcolo CRC

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35850
    Michele
    Partecipante

    Mi servirebbe avere il blocco funzione SysGetCrc nel linguaggio che preferite che mi definisca come decifrare un pacchetto stringa dotato di CRC calcolato tramite la vostra SysGetCrc. Il codice che ho provato è il seguente:

    Stringa:= ‘123456789’;
    CalcCRC.Buf:=ADR(Stringa);
    CalcCRC.ByteNr:=LEN(Stringa);
    CalcCRC.CrcIni:=0;
    CalcCRC();
    CRC:=CalcCRC.Crc;

    Dove CalcCRC è una istanza della vostra SysGetCrc. Ho trovato un sito che calcola i CRC di vari tipi, e il vostro sembra essere il primo della lista quindi “normale”, il codice trovato è in linguaggio C quindi va bene al massimo l’unica cosa è che alla fine devo scambiare i due byte del CRC16 tra loro.

    Si potrebbe avere il codice sorgente della SysGetCrc ? Qualsiasi linguaggio va bene se non si può proverò quello trovato, grazie.

    #39074
    Sergio Bertana
    Amministratore del forum

    Il blocco funzione SysGetCrc calcola il CRC a 16 bit secondo lo standard richiesto dal protocollo Modbus RTU. Il blocco funzione è embedded nel nostro sistema operativo perchè viene utilizzato anche per la gestione del protocollo Modbus RTU da sistema operativo.

    L’algoritmo è scritto in linguaggio C e si trova da qualsiasi parte su Internet, se esegui il dowload dal nostro sito del Modbus Protocol Reference Guide lo trovi riportato in fondo alla guida.

    Il fatto che devi scambiare LSB e MSB dipende dalla endiannes del sistema su cui esegui il calcolo, per definizione il protocollo Modbus RTU riporta le variabili WORD  sempre nel formato Big-Endian.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.