Programmazione in TDBasic
I terminali sono dotati di compilatore BASIC
integrato che permette la realizzazione di procedure custom in linguaggio
TDBasic. Questa funzione e’ particolarmente utile per personalizzare le
funzioni standard dei terminali.
La realizzazione di procedure per la gestione delle
commesse e avanzamento della produzione costituiscono an'applicazione tipica di
TDBasic.
Il compilatore supporta solo numeri interi (long a 32 bit)
e stringhe alfanumeriche. I salti sono gestiti con l’uso di label ed i numeri di
riga non sono necessari. Alcuni nomi di variabili sono dedicate ad un uso
specifico (vedi elenco seguente).
|
TIMER1 |
Se diverso da zero si decrementa ogni 0.001 secondi |
|
TIMER2 |
Se diverso da zero si decrementa ogni 0.001 secondi |
|
TIMER3 |
Se diverso da zero si decrementa ogni 0.1 secondi |
|
TIMER4 |
Se diverso da zero si decrementa ogni 0.1 secondi |
|
MEMOR1 |
Ritiene il valore anche in mancanza di
alimentazione |
|
MEMOR2 |
Ritiene il valore anche in mancanza di
alimentazione |
|
MEMOR3 |
Ritiene il valore anche in mancanza di
alimentazione |
|
MEMOR4 |
Ritiene il valore anche in mancanza di
alimentazione |
|
MEMOR5 |
Ritiene il valore anche in mancanza di
alimentazione |
|
COUNTER1 |
Si incrementa sul cambio di stato positivo di
Input1 |
|
COUNTER2 |
Si incrementa sul cambio di stato positivo di
Input2 |
|
BACKLIGHT |
Determina lo stato della lampada del LCD. 1=ON
0=OFF |
|
TIME$ |
Contiene l’ora di sistema hh:mm:ss |
|
DATE$ |
Contiene la data di sistema giorno dd-mm-yy |
|
COM2$ |
Ritorna una stringa da COM2 o una stringa vuota |
|
COM3$ |
Ritorna una stringa da COM3 o una stringa vuota |
|
BADGE1$ |
Ritorna una stringa da BADGE1 o una stringa vuota |
|
BADGE2$ |
Ritorna una stringa da BADGE2 o una stringa vuota |
|
ERRORLINE |
Contiene il numero di riga dell’ultimo errore
verificato |
|
ERRORCODE |
Contiene il codice dell’ultimo errore verificato |
|
Funzione |
Descrizione |
|
ABS(exp) |
absolute value
|
|
SGN(exp) |
expression sign |
|
ASC(exp$) |
ASCII code of exp$ |
|
CHR$(exp) |
string char |
|
VAL(exp$) |
string value |
|
LEN(exp$) |
string length |
|
INSTR([start],str$,sub$) |
sub$
position |
|
TRIM$(exp$) |
delete Left & Right spaces |
|
LTRIM$(exp$) |
|
|
RTRIM$(exp$) |
delete right spaces |
|
UCASE$(exp$) |
upper case |
|
LCASE$(exp$) |
|
|
LEFT$(exp$,len) |
create left substring |
|
RIGHT$(exp$,len) |
create right substring\r\ |
|
MID$(exp$,pos,len) |
create mid substring |
|
HEX$(num) |
hexadecimal string |
|
SPACE$(len) |
create a space string |
|
STRING$(len,char) |
create a chr string\ |
|
STR$(num) |
string convert |
|
MKI$(num) |
convert a long in a 4 bytes
string |
|
FOR...TO...STEP / NEXT |
Loop control |
|
GOSUB label/ RETURN |
Subroutine menagement |
|
GOTO label |
|
|
ONERRORGOTO label |
|
|
END |
stop program |
|
REM \"comment\"- |
Remark |
|
LCDCLEAR
|
Clear LCD display |
|
GETCH
|
Ritorna il codice del tasto premuto. Zero se nessun
tasto premuto |
|
SCAN
|
Attende la pressione di un tasto e ne ritorna il
codice |
|
GOTOXY
x,y
|
Posiziona il cursore del display alle coordionate
x,y |
|
SLEEP time
|
Pausa per il tempo time in millisecondi |
|
BEEP
nbeep
|
Emette nbeep dal buzzer |
|
RELE
numrele,time
|
Scatta il rele per time in decimi di secondo
Se time=0 il rele si spegne
Se time=0 il rele si attiva permanentemente |
|
IF exp THEN ….
|
Conditional jumps |
|
IF #TIMERn
THEN …
|
Jump if TIMERn is 0 |
|
IF #INPUTn
THEN …
|
Jump if INPUTn is active |
|
PRINT
exp
|
|
|
PRINT #TRANSIT ,var$
|
|
|
PRINT #TERMINAL,
exp
|
|
|
PRINT #PTRANSIT, esp
|
|
|
PRINT #COM2, var$
|
|
|
PRINT #COM3, var$
|
|
|
PRINT #COM4, var$,ID
|
|
|
PRINT #FILE, num, var$
|
|
|
PRINT #FILE, num ,numrec,
var$
|
|
|
FILE$(num,
record)
|
|
|
FILESRC(num,var$)
|
|
|
INPUT
var$,mode,x,y,len,MenuT
|
|
|
SYSTEM
|
|
|
MESSAGE$(exp)
|
|
|
MBOX var$
|
|
|
FONT exp
|
|
|
ASKFORBDG$
|
|
|
READLTRN$(numbadge)
|
|
|
BLACKLIST(numbadge)
|
|
|
MENUT$(NumMenu,select)
|
|
|
MENUTVP
(x1y1,x2,y2)
|
|
|
COM485
var$,
ID
|
|
|
LASTFTP$
|
|
|
bit |
Peso esa. |
Peso dec. |
Descrizione |
|
0 |
0x01 |
1 |
Richiesta singolo tasto |
|
1 |
0x02 |
2 |
Richiesta stringa |
|
2 |
0x04 |
4 |
Richiesta badge #1 |
|
3 |
0x08 |
8 |
Richiesta badge #2 |
|
4 |
0x10 |
16 |
Richiesta scanner RS232 #1 |
|
5 |
0x20 |
32 |
Richiesta scanner RS232 #2 |
|
6 |
0x40 |
64 |
Richiesta menu a tendina |
|
7 |
0x80 |
128 |
Conferma con input #1
|
Esempio di un breve programma
scritto in TDBasic
REM INIZIO CICLO INPUT
DATI
LCDCLEAR
BDG$=ASKFORBDG$
IF
LEN(BDG$)=0 THEN GOTO ERROR
IN_SENSO:
LCDCLEAR
GOTOXY
1,1
IF SENSO=0
THEN PRINT "INGRESSO" ELSE PRINT "USCITA"
X=SCAN
IF X=1
THEN GOTO IN_COD_CAR
IF X=2
THEN GOTO ERROR
IF SENSO=0 THEN
SENSO=1 ELSE SENSO=0
GOTO IN_SENSO
SENSO$=STR$(SENSO)
REM
IN_COD_CAR:
LCDCLEAR
GOTOXY
1,1
PRINT "INSERIRE
CARRELLO"
INPUT
STATUS,CAR$,18,1,2,6
IF STATUS
<> 1 THEN GOTO ERROR
REM
LCDCLEAR
GOTOXY
1,1
PRINT "INSERIRE PESO"
INPUT
STATUS,PESO$,18,1,2,6
IF STATUS
<> 1 THEN GOTO ERROR
REM
LCDCLEAR
GOTOXY
1,1
PRINT "INSERIRE
QUANTITA"
INPUT
STATUS,QUAN$,18,1,2,6
IF STATUS
<> 1 THEN GOTO ERROR
REM
LCDCLEAR
GOTOXY
1,1
PRINT "INSERIRE
PRODOTTO"
INPUT
STATUS,PROD$,18,1,2,6
IF STATUS
<> 1 THEN GOTO ERROR
LCDCLEAR
GOTOXY
1,1
PRINT "INSERIRE
LOTTO"
INPUT
STATUS,LOTTO$,18,1,2,6
IF STATUS
<> 1 THEN GOTO ERROR
ALL$=SENSO$+CAR$+PESO$+QUAN$+PROD$+LOTTO$
DIFF$=STRING$(9-LEN(BDG$) , 48)
BDG$=DIFF$
+ BDG$
PRINT #PTRANSIT,
BDG$ + ALL$
PRINT
#TERMINAL, BDG$ + ALL$
MBOX "FINE
INSERIMENTO"
END
ERROR:
MBOX "ERRORE
DI INPUT"
BEEP 5
SLEEP 3000
END
|