ok
allora i messaggi da inviare al registratore di cassa sono cosi formati:

DLE,STX,<NUM>,<ID>,<UF>,<UF>,<CODICE>,..........., DLE,ETX,<CRC>

dove al posto dei puntini è necessario inserire un valore che identifica il comando da inviare al registratore.

Il protocollo è del tipo "trasparent mode" ossia i caratteri di controllo sono preceduti dal carattere speciale DLE. Se nel testo del messaggio capita un carattere coincidente con DLE, questo viene prefissato da un altro DLE.

Ciò consente di utilizzare pienamente per i dati tutti e 8 i bit possibili e quindi permette di rappresentare i dati in BCD-PACKED (binary coded decimal) ossia di dimezzare la lunghezza dei messaggi numerici, trasmettendo due digits decimali per ogni carattere. (Questa scelta però obbliga ad utilizzare sempre 8 bit per carattere.)

STX = carattere di controllo : start-of-text
ETX = carattere di controllo : end-of-text
CRC = 1 byte calcolato come check-sum sul messaggio

Il messaggio si compone di due parti logiche, la "testata" e la parte "dati" (che può anche essere nulla).

La testata è formata da 5 bytes :

NUM:
Contatore binario di messaggio. Viene incrementato ad ogni nuovo messaggio mentre resta invariato quando il messaggio viene ritrasmesso per retry.

ID:
Indirizzo del nodo.
Nei messaggi in partenza da ecr è posto uguale all' indirizzo di canale programmato sull'ecr; nei messaggi verso l'ecr deve essere uguale all' indirizzo di canale dell' ecr a cui viene inviato il messaggio. L'ecr, infatti, "ignora" gli eventuali messaggi dove il campo ID non coincide con il proprio indirizzo di canale ossia non destinati a lui, mentre l'host può controllare che, anche a livello logico, un messaggio sia stato effettivamente ricevuto dall' ecr con il quale ha intrapreso una connessione.

U.F.
Uso Futuro. Lasciare sempre a 00 Hex per compatibilità con implementazioni future.

COD:
E' un codice che specifica il "tipo" di messaggio ossia l'azione (logica) che esso comporta. E' una lettera ascii compresa tra "A" e "Z".

DLE = 10h prefisso codici di controllo
STX = 02h inizio messaggio
ETX = 03h fine messaggio

Come codice utilizzo sempre quelli di tipo "A"che servono per emulare la tastiera

Con il messaggio tipo “A”, PC simula una sequenza di tasti premuti da tastiera.
In tal modo si può lanciare sull'ecr qualsiasi funzione attivabile da tastiera dell'ecr.

I dati rappresentano una sequenza di tasti, dove ogni tasto è identificato da un numero compreso tra 0 e 255 e quindi rappresentabile in un byte. Ne segue che il campo dati è una stringa di N bytes, dove ogni byte rappresenta un codice-tasto, ossia la stringa dati è l’immagine di una sequenza di N tasti.

E’ indispensabile che la sequenza di tasti sia sempre “terminata” da un tasto di funzione (es, Reparto, Plu, Totale ecc.) altrimenti non viene processata dall’automa accettore dell’ecr.

ecco alcuni valori relativi ai tasti:

01=Tasto '1'
02=Tasto '2'
03=Tasto '3'
...
09=Tasto '9'
75=Reparto

Per comunicare con la porta seriale utilizzo la classe SerialPort di C#.
Come devo costruire il messaggio da inviare?