10 ' 20 'KRIGelec Laisser les Copyrights, sinon c'est du piratage! 30 V$="RXKABAL KRIGelec v1.13" 'No version programme 100 ' 110 DEFINT I-P 120 DEFSTR A-E 140 P$="RXKABAL.PAR":PN=30 'Fichier paramŠtres + Nb maxi 150 DIM MS(110),AP(PN),VA(5) 160 KEY OFF 'Pour basic interpr‚t‚ 170 KEY 1,"":KEY 2,"":KEY 3,"":KEY 4,"":KEY 10,"" 'Annule code Fx en interpr‚t‚ 200 GOSUB 2000 'R‚cup paramŠtres 220 IF IE>0 THEN GOSUB 4000:GOSUB 5000:CO="COM1:" 'Erreur port COM d‚part 230 GOSUB 5500 'Bas d'‚cran + titre 240 AV="N NEE SES SWW NW":AN="NuiAurCr‚SomCouNuaSoVSol" 250 AF="EcoCalIniMes":LA=0 270 ' 280 'Lecture port s‚rie et attente donn‚es 290 ' 300 ON ERROR GOTO 1800 320 C=CO+"300,N,8,1,RS,DS,CS" 340 OPEN C AS #1 'Ouvre port s‚rie 360 IF LOC(1)=<0 THEN 520 'Rien en attente 370 TI=TIMER:I=ASC(INPUT$(1,#1)) 'Marque heure arriv‚e derniŠre donn‚e 380 IF LD>0 OR LA>0 THEN 410 390 IF I<65 OR I>122 THEN 450 'Parasite d'entr‚e: Pas indicatif 400 BA=CHR$(I) 'BA=Indic balise en premiŠre donn‚e 410 IF LA=0 THEN 440 'Mode normal en Hexa 420 IF I<>10 AND I<>12 THEN PRINT CHR$(I);'Affiche en ASCII (ParamŠtres balise) 430 GOTO 620 440 LD=LD+1:IF LD>100 THEN LD=100 'Gros message 450 PRINT RIGHT$("0"+HEX$(I),2)" "; 'Imprime code hexa re‡u 470 IF POS(0)>77 THEN LOCATE 24,1 'Bout ligne: continue par dessus 500 IF LD>0 THEN MS(LD-1)=I 'Stockage pour extraction 520 IF TI+0.3>TIMER THEN 540 'Si pas fin de bloc arriv‚e donn‚es 525 IF LD>5 THEN GOSUB 1000 'Analyse bloc arriv‚ 530 LD=0 'N'accepte pas bloc s‚par‚s de >0,3s 540 IF TI+2>TIMER THEN 620 'Donn‚es de moins 2sec 560 IF POS(0)>69 THEN LOCATE 24,69 'Evite faire scroll par time 565 IF LA>0 THEN 580 'Pas de Timing ni effacement en ASCII 570 IF (POS(0)>1 OR (LD+NERR+NBC)>0) THEN PRINT " "TIME$ SPACE$(80-POS(0)); 580 LOCATE 24,1 'Ecrase affichages bas de ligne 585 LD=0:NERR=0:NBC=0:LA=0 590 ' 600 'Saisie clavier 610 ' 620 A=INKEY$ 660 IF A="" THEN 900 680 IF A=CHR$(0)+"D" THEN ON ERROR GOTO 0:CLOSE:SYSTEM 'F10=Fin du programme 700 IF A=CHR$(0)+";" THEN GOSUB 5000:GOTO 900 'F1= help fichier paramŠtres 720 IF A=CHR$(0)+"<" THEN GOTO 3700 'F2 Alternat port COM 820 IF ASC(A)=0 THEN 880 'N'affiche pas touches de fonction 830 IF POS(0)>77 THEN LOCATE 24,1 'Bout ligne: Continue par dessus 840 PRINT A; 'Affiche frappe au clavier 860 IF A=CHR$(13) THEN GOSUB 6100 'Saut de ligne: remets titre sur ligne 1 880 NBC=NBC+1:TI=TIMER 900 GOTO 360 990 ' 995 '(SP) Test donn‚es aprŠs fin arriv‚e donn‚es s‚rie 997 ' 1000 OFS=0 'D‚callage selon longueur message 1010 IF (LD>11 AND LD<15) AND (MS(11) AND &H4F)=&H4F THEN GOTO 1100 'Radio 1020 IF (LD>11 AND LD<15) AND (MS(11) AND &H4F)=0 THEN GOTO 1100 1030 IF LD<9 THEN 1100 'Message court + parasite 1040 IF LD<27 OR LD>29 THEN 1700 'Si pas bon train arriv‚: Traite pas 1060 IF (MS(15) AND &HCF)=0 AND MS(15)>0 THEN OFS=4:GOTO 1100 1070 IF (MS(15) AND &H4F)=&H4F THEN OFS=4:GOTO 1100 'Bit7=1 si parasites! 1080 IF (MS(24) AND &H4F)=&H4F THEN OFS=13:GOTO 1100 1090 IF (MS(24) AND &HCF)=0 AND MS(24)>0 THEN OFS=13 1100 IF MS(5+OFS)>100 OR MS(5+OFS)<10 THEN 1700 'Humidit‚ >100: Faux 1110 IF MS(2+OFS)>200 THEN 1700 'Vent moyen >200 = Faux 1120 IF MS(4+OFS)>180 OR MS(4+OFS)<10 THEN 1700 'Temp‚rature -35 … +50 1130 I=MS(1+OFS) AND &H0F:IF I=0 OR I>10 THEN 1700 'Luminosit‚/nuit 1137 ' 1138 'Affichage ‚cran en clair message m‚t‚o 1139 ' 1140 LOCATE 24,1: 1160 PRINT MID$(DATE$,4,3) LEFT$(DATE$,2)" "LEFT$(TIME$,5); 'Date Heure 1180 PRINT " "BA; 'Indicatif balise 1200 PRINT USING"### ";MS(2+OFS); 'moy vent 1220 I=(MS(1+OFS) AND &H70)/16 'Garde juste dir vent moyen 1240 PRINT MID$(AV,(I*2+1),2); 'Direction vent moyen 1260 IF MS(3+OFS)<200 THEN PRINT USING"### ";MS(3+OFS); ELSE PRINT " ‚co"; 'Max 1280 PRINT USING"###.#ø";MS(4+OFS)/2-40; 'Temp‚ratures 1300 PRINT USING"###% ";MS(5+OFS); 'Humidit‚ 1320 PRINT MID$(AN,((MS(1+OFS)AND &H07)*3+1),3); 'D‚finition nuages 1340 IF LD<10 THEN 1600 'Message court 1360 PRINT USING"###";MS(7+OFS); 'vent instantan‚ 1380 I=MS(6+OFS) AND &H7 'Garde juste dir vent instantan‚ 1400 PRINT MID$(AV,(I*2+1),2); 'Direction vent instantan‚ 1420 PRINT USING" ##h";INT(MS(10+OFS)/10); 'heure solaire 1440 A=STR$((MS(10+OFS) MOD 10)*6) 1460 PRINT RIGHT$("0"+RIGHT$(A,LEN(A)-1),2); 'minute solaire 1480 PRINT USING" ###L ";MS(8+OFS); 'LumiŠre LUM1 1500 'I=(MS(11+OFS) AND &H30)/16*3+1 'Num‚ro fonction 1510 'PRINT MID$(AF,I,3); 'Fonction en texte 1520 PRINT RIGHT$("0"+HEX$(MS(11+OFS)),2); 'Fonction en HEXA 1540 IF VA(4)=0 THEN PRINT USING" ###A";MS(9+OFS);:GOTO 1600 'Niveau alim 1560 PRINT USING"##.##V";MS(9+OFS)*VA(4)+VA(5); 'Tension alim V=aN+b 1597 ' 1598 'Recherche si nom de balise dans paramŠtres 1599 ' 1600 FOR I=0 TO PN 1610 IF LEFT$(AP(I),2)<>BA+"=" THEN 1630 'Syntaxe: M=Treh 1620 PRINT " ";RIGHT$(AP(I),LEN(AP(I))-2) SPACE$(80-POS(0));:I=PN 1630 NEXT I 1640 PRINT SPACE$(80-POS(0)) 'Efface reste et saut de ligne 1660 GOSUB 6100 'Affiche Haut de ligne 1700 LD=0 1740 RETURN 1770 ' 1780 'Traitement Erreur COM ou autres 1790 ' 1800 CLOSE 1 1820 IF ERR<>57 THEN 1840 1822 NERR=NERR+1:PRINT"*";:TERR=TIMER:IF POS(0)>77 THEN LOCATE 24,1 1825 IF LD>0 THEN LD=LD-1 'Erreur COM 1830 RESUME 320 'R‚ouvre port COM plant‚ 1840 LOCATE 24,1:PRINT "Erreur d‚tect‚e: "ERR " Ligne"ERL" F10=Quitter "; 1860 RESUME 1880 1880 ON ERROR GOTO 0 1900 A=INKEY$ 1920 IF A<>CHR$(0)+"D" THEN 1900 'Attente F10 avant de sortir du programme 1940 CLOSE:SYSTEM 1970 ' 1980 'Charge paramŠtres en texte depuis fichier sur disque 1990 ' 2000 IE=0:CLOSE 1:ON ERROR GOTO 4700 2005 CO="COM1:" 'port COM par d‚faut 2010 OPEN"I",1,P$ 2020 ON ERROR GOTO 0 2040 FOR I=0 TO PN 2050 AP(I)="" 2060 IF EOF(1) THEN 2100 'Fin des paramŠtres 2080 LINE INPUT#1,AP(I) 2100 NEXT I 2120 CLOSE 1 2170 ' 2180 'Transforme tous les textes de paramŠtres en majuscule 2190 ' 2200 'FOR I=0 TO PN 'Balaye tous les paramŠtres 2220 'FOR J=1 TO LEN(AP(I)) 'Analyse tous les caratŠres 2240 'K=ASC(MID$(AP(I),J,1)) 'code ASCII du caractŠre point‚ 2260 'IF K<97 OR K>122 THEN 'Pas une minuscule 2280 'MID$(AP(I),J)=CHR$(K-32) 'Transforme en majuscule 2300 'NEXT J,I 2370 ' 2380 'Recherches paramŠtres utiles: Port COM= 2390 ' 2400 FOR I=0 TO PN 2440 IF LEFT$(AP(I),4)<>"COM=" THEN 2540 'Syntaxe: COM=COM2: ou COM=2 2460 A=RIGHT$(AP(I),LEN(AP(I))-4) 'Reste du paramŠtre 2480 IF VAL(A)>0 THEN CO="COM"+MID$(AP(I),5,1)+":":GOTO 2520 2500 CO=A 2520 I=PN 2540 NEXT I 2870 ' 2880 'Recherche niveau tension seuils accus pour affichage en tension 2890 ' 2900 FOR I=0 TO 5:VA(I)=0:NEXT I 'Raz au d‚part 2920 FOR I=0 TO PN 2940 IF LEFT$(AP(I),5)<>"ACCUB" THEN 3040 'Syntaxe: ACCUB 96=6.25 2960 A=RIGHT$(AP(I),LEN(AP(I))-5) 'Reste du paramŠtre 2980 I=INSTR(A,"=") 'Cherche si = dans compl‚ment 3000 IF VAL(A)=0 OR I=0 THEN 3040 'Pas bon niveau 3020 VA(0)=VAL(A):VA(1)=VAL(MID$(A,I+1,5)):I=PN 'Niveau bas 3040 NEXT I 3120 FOR I=0 TO PN 3140 IF LEFT$(AP(I),5)<>"ACCUH" THEN 3240 'Syntaxe: ACCUH 42=7.18 3160 A=RIGHT$(AP(I),LEN(AP(I))-5) 'Reste du paramŠtre 3180 I=INSTR(A,"=") 'Cherche si = dans compl‚ment 3200 IF VAL(A)=0 OR I=0 THEN 3240 'Pas bon niveau 3220 VA(2)=VAL(A):VA(3)=VAL(MID$(A,I+1,5)):I=PN 'Niveau HAUT 3240 NEXT I 3260 IF VA(0)=0 OR VA(2)=0 THEN 3400 'Pas de paramŠtre pour tension 3280 VA(4)=(VA(1)-VA(3))/(VA(0)-VA(2)) 'a=Vbas-Vhaut/Nbas-Nhaut 3300 VA(5)=VA(3)-VA(4)*VA(2) 'b=Vhaut-a*Nhaut dans y=ax+b 3370 ' 3380 'Test si Port COM trouv‚ fonctionne 3390 ' 3400 C=CO+"300,N,8,1,RS,DS,CS" 3420 ON ERROR GOTO 3500 3440 OPEN C AS 1 3460 CLOSE 1 'Referme: pas d'erreur donc COM bon 3480 GOTO 3560 'Suite 3500 A="Erreur COM="+CO+" port s‚rie ne veut pas s'ouvrir" 3520 IE=1 'sortie avec Erreur 3540 RESUME 3560 3560 ON ERROR GOTO 0 'Annule erreur 3580 RETURN 3670 ' 3680 'BASCULEMENT COM1 COM2 PAR F2 3690 ' 3700 IF CO="COM1:" THEN C="COM2:" ELSE C="COM1:" 3720 LOCATE 24,1:PRINT SPACE$(79); 'Efface ligne 3740 LOCATE 24,1:PRINT "Voulez vous changer le port s‚rie "CO" en "C" (O/N)? "; 3760 A=INKEY$ 3780 IF A="" THEN 3760 3800 LOCATE 24,1:PRINT SPACE$(79);:LOCATE 24,1 'Efface ligne 3820 IF A<>"O" AND A<>"o" AND A<>"Y" AND A<>"y" THEN 360 'Retour attente 3840 CLOSE 1:B=CO:CO=C:IE=0:ON ERROR GOTO 0 3860 GOSUB 3400 'Test port COM 3880 IF IE>0 THEN GOSUB 4000:CO=B 'AFFICHE ERREUR et revient au port pr‚c‚dent 3900 GOSUB 6000 'R‚affiche bas ligne avec nouveau COM 3920 GOTO 300 'R‚ouvre nouveau port 3970 ' 3980 'Attente appui d'une touche aprŠs affichage erreur COM 3990 ' 4000 LOCATE 24,1:PRINT A SPACE$(79-POS(0)); 'AFfiche erreur 4020 A=INKEY$ 4040 IF A="" THEN 4020 4060 LOCATE 24,1:PRINT SPACE$(79);:LOCATE 24,1 4080 RETURN 4670 ' 4680 'Erreur dans fichier paramŠtres 4690 ' 4700 PRINT"Pas de fichier "P$" pr‚sent sur votre disque:" 4720 PRINT" Usage de COM1 par d‚faut" 4740 RESUME 4760 4760 ON ERROR GOTO 0 4780 GOSUB 5000 'Affiche Aide 4800 GOTO 3400 'Test port COM 4970 ' 4980 'aide pour fichier paramŠtres 4990 ' 5000 PRINT:PRINT "Le fichier "P$" peut contenir les paramŠtres suivants:" 5010 PRINT 5020 PRINT "COM=2 pour le port COM2 (ou COM=COM1:) COM en majuscule" 5030 PRINT "M=Le Treh pour afficher en clair l'indicatif d'une balise" 5040 PRINT 5050 PRINT "Autres paramŠtres: (… titre indicatif)" 5060 PRINT "ACCUB,ACCUH N=x.xxV pour conversion niveau/tension des accus" 5090 PRINT 5100 PRINT "Le fichier "P$" est un fichier texte … ‚diter soit mˆme" 5120 PRINT 5140 PRINT "Touches de Fonctions: 5160 PRINT " F1 = Aide F2 = Forcer COM1-COM2" 5200 PRINT " F10 = Quitter le programme" 5220 PRINT:PRINT 5500 LOCATE 23,1:GOSUB 6110 'R‚affiche titre en bas page 5970 ' 5980 'Affichage bas de page 5990 ' 6000 I=POS(0):J=CSRLIN 'Position du curseur 6010 LOCATE 25,1 6020 PRINT V$" "CO; 'Laissez SVP le nom du donnateur. Merci 6040 LOCATE 25,65:PRINT "F10 = Quitter"; 'Vous pouvez y rajouter le votre... 6060 LOCATE J,I 'Re positionne le curseur 6080 RETURN 6090 ' 6092 'Affichage titre colonnes sur ligne point‚e 6095 ' 6100 LOCATE 1,1 6110 PRINT "Date Heure Id VtMoy Max Temp Humi Lum"; 6120 IF VA(0)>0 THEN PRINT " V.Ins HSol Nlum Fct Alim"; 'Mode ‚tendu 6140 PRINT SPACE$(80-POS(0)); 'Rempli reste d'espaces 6160 LOCATE 24,1 6180 RETURN 9000 'V$ No Version programme 9010 'P$ Nom du fichier paramŠtre 9020 'PN (%) Nb max de paramŠtres 9030 'AP() ($) ParamŠtres en strings extrait du fichier P$ 9040 'I,J,K (%) Variables Int‚gr locales 9050 'CO ($) Port COM utilis‚ 9060 'A,B,C ($) Variables Strings locales 9070 'IE (%) Erreur si >0 9080 'AV ($) Texte des directions vent 9085 'AN ($) Texte des luminosit‚s 9090 'BA ($) Indicatif balise: 1er caratŠre d'un message 9100 'AF ($) Texte de la fonction en cours 9110 'VA() (!) Matrice pour conversion niveau accus en tension accu: y=ax+b 9120 'TI (!) Dernier Timer … la r‚ception de donn‚es pour Timout 9130 'LD (%) Longueur Donn‚es arriv‚e sur s‚rie 9140 'NBC (%) Nombre de donn‚es clavier envoy‚es 9150 'NERR (%) Nombre d'erreur s‚rie d‚tect‚es 9160 'MS() (%) Matrice des donn‚es re‡ues de s‚rie 9170 'LA (%) Lecture en ASCII si LA>0