L&G FUGGA PRV
Protokol L&G PRV Fugga
Podporované typy a verzie zariadení
Konfigurácia komunikačnej linky
Konfigurácia komunikačnej stanice
Konfigurácia meraných bodov
Literatúra
Zmeny a úpravy
Revízie dokumentu
Podporované typy a verzie zariadení
Komunikácia podporuje čítanie/zápis údajov do zariadení Landis&Gyr PRV 1.xx a 2.xx.
Konfigurácia komunikačnej linky
Kategória komunikačnej linky: Serial.
Prenosová rýchlosť a prenosové parametre podľa nastavenia parametrov komunikačného programu v PRV.
Konfigurácia komunikačnej stanice
Komunikačný protokol: L&G FUGGA PRV.
Adresa stanice je v rozsahu 0 až 255 a zadáva sa v decimálnom tvare podľa nastavenia čísla stanice v komunikačnom programe v PRV (viď ďalej).
Parametre protokolu stanice
Môžu byť zadané nasledovné parametre protokolu stanice:
Tab. č. 2
Kľúčové slovo | Plný názov | Popis | Jednotka | Náhradná hodnota |
|---|---|---|---|---|
MR | Max Retry | Počet opakovaní výzvy v prípade chyby komunikácie. | - | 3 |
MWR | Max Wait Retry | Počet opakovaní čítania odpovede do jej skompletovania. | - | 14 |
RT | Retry Timeout | Oneskorenie medzi opakovaním výzvy v prípade chyby komunikácie. | s.ms | 1.000 s |
WT | Wait Timeout | Oneskorenie medzi čítaniami odpovede do jej skompletovania. | ms | 300 milisek. |
WFT | Wait First Timeout | Prvé čakanie po odvysielani výzvy pred čítaním odpovede. | ms | 1200 milisek. |
RD | Request Delay | Oneskorenie pred vysielaním výzvy. | ms | 1000 milisek. |
MBS | Maximum Buffer Size | Maximálna veľkosť výzvy v bytoch. | byte | 60 |
DOFF | Date Offset | Korekcia posunu dátumu v interpetácií PRV a systému D2000. Systém D2000 interpretuje dátum ako počet dní od 1-1-1972. Pre testované PRV 1.64 (SW ver. 4.04) bolo nutné nastaviť hodnotu 20089, pretože PRV implementuje dátum od 1-1-1917. | dni | 4806 |
String s parametrami protokolu sa zapisuje podľa pravidiel:
Kľúčové_slovo=hodnota;Kľúčové_slovo=hodnota; ...
Príklad:
MR=4;RD=500;
Ak nebolo v inicializačnom stringu nájdené kľúčové slovo s platnou hodnotou, použije sa náhradná hodnota podľa tabuľky.
Konfigurácia meraných bodov
Možné typy bodov: AI, AO, CI, CO, DI, DO, TIR, TOR, TIA, TOA.
Konfigurácia vyžaduje adresu v textovom tvare. Oproti implementácií v D2000 ver.3.xx nie je rozsah typov nijako obmedzený. Formu zápisu niektorých typov znázorňuje tabuľka:
Typ v D2000 v.3.xx | Zápis v D2000 v.4.x | Príklad |
|---|---|---|
I/O | $xxx.name | $120.HW |
PLT | PLTx.name | PLT5.PAR1 |
ZON | ZONx.name |
|
RGB | RGBx.name |
|
VIP | VIPx.name |
|
CVP | CVPx.name |
|
@MGR | @MGRx.name |
|
@MGG | @MGGx.name |
|
@SEZ | @SEZx.name |
|
@AI | @AIx.name |
|
@AO | @AOx.name |
|
@DI | @DIx.name |
|
@DO | @DOx.name |
|
@CI | @CIx.name |
|
@PHON | @PHONx.name |
|
@RING | @RINGx.name |
|
TTY | TTYx.name |
|
@PBUS | @PBUSx.name |
|
@MBUS | @MBUSx.name |
|
@OS | @OSx.name |
|
@BLN | @BLNx.name |
|
@BPS | @BPSx.name |
|
TSK | [tsknr]name | [10]S2 |
SYS | name | DATE |
Protokol PRV (Fugga)
Formát správy:
<STX><ADRESA><FUNKCIA><SEQ><OBSAH SPRAVY><ETX/ETB><CRC>
STX - Start of text, znak 0x02
ADRESA - dvojčíslie v ASCII tvare - rozsah 01 - 99.
FUNKCIA - dvojčíslie v ASCII tvare - číslo funkcie. V odpovedi sa k číslu funkcie pripočítava 50.
SEQ – poradové číslo správy - jeden bajt - hodnoty 0x41 – 0x5A
OBSAH SPRAVY - sprava v ASCII tvare - jednotlivé časti správy sú oddelené znakom “;”.
ETX - koniec správy
ETB - koniec bloku
CRC - kontrolná suma CRC-CCITT Cyclic Redundancy Check according to IBM
Smerom do PRV - 6 bajtov ASCII
Smerom z PRV 2 bajty binárne
Potvrdenie:
ACK - O.K. - obsah správy znak ACK
NAK - chyba - obsah správy znak NAK
Funkcie:
Funkcia | Číslo | Obsah správy | Odpoveď |
|---|---|---|---|
Config Check | 01 | Config ID | ACK/NAK |
New Point Def | 02 | ID:NAME;0:ConfigId; | ACK/NAK(memory) |
Delete Point | 03 | ID;ConfigId; | ACK |
Read All | 04 | --- | ID:VALUE;... |
ReadAllContinue | 05 | INDEX | ID:VALUE;... |
Set Output | 06 | ID=Value; | ACK |
Reset PRV | 07 | --- | ACK |
Clear Config | 08 | --- | ACK |
Riešenie sporných situácií
Na strane D2000:
1. PRV neodpovedá v stanovenom limite
2. Zlá kontrolná suma
Správa sa opakuje N-krát - všetky potrebné parametre sa nastavujú parametrami protokolu stanice.
Na strane PRV:
Zlá kontrolná suma - PRV neodpovedá.
Zmeny komunikačného protokolu PRV (Fugga) ver 1.02
Určenie: Komunikácia s PRV1/PRV2 cez sériové linky a rádiomodem s OnLine konfiguráciou prenášaných hodnôt.
Rozšírenie oproti ver. 1.01:
implementované časové body
optimalizácia komunikácie - prenášajú sa len zmeny hodnôt
Počet prenášaných bodov z jednej stanice je max. 255.
Parametre komunikácie nastavované na strane PRV:
Task 3:
Číslo komunikačného portu v PRV: premenná PRT <1..3>
Adresa stanice: Premenná AD$ - adresa sa skladá vždy z dvoch čísel napr. “01” - adresa 1.
Číslo komunikačného tasku - default 3. Ak ho treba zmeniť treba upraviť tasky 254 a 253 - reštart po výpadku napájania a po WatchDog Error. Nutne upraviť task 4 - odkazy na lokálne premenné tasku 3.
Číslo Watch Dogu - default je 7. Ak ho treba zmeniť treba upraviť task 253 a zadať nové číslo Watch Dogu vo volaní funkcie WADO na riadku 305.
Maximálna veľkosť vysielanej správy do PC - premenná BLK - nesmie byť viac ako 160.
Prenosová rýchlosť: Parameter TTYPRT.BD na riadku 60.
Číslo tasku pre zber hodnôt: Použije sa task číslo 4. Ak ho treba zmeniť - musí sa upraviť číslo tasku na riadku 48 - štart tasku 4.
Task 4:
Parameter TSKFRM$ - určuje výstupný formát tasku. Definuje vlastne presnosť prenášaných floatingových čísel.
Parameter WAIT DURING 5 , na riadku 70 určuje periodu zberu hodnôt v sekundách.
Výpis taskov pre ver. 1.02
.TSK 31 -- FUGGA PROTOCOL (C) IPESOFT 1997 V 1.025 ad$ := "21"; -- adresa stanice10 er := 1 ; cf$ ="";RT$ := "";mx:=10015 sl := 2; bl = 60; cn := 1; wx := 5;20 DIM N$(mx); DIM V$(mx); DIM NW(mx);25 FOR I := 1 TO mx26 V$(I) := ""; NW(I) := 0;27 NEXT I;48 STOP 4; RUN 4;40 TSKPRP:=350 TSKTTY:=155 TSKPRIO:=1556 SYSDIAG:=0;58 ON ERROR GOTO 700060 TTY1.BD=1920061 -- TTY1.PARCHK = 062 TTY1.SSB = 070 TTY1.NOEC=172 TTY1.NCON=174 TTY1.MOD=076 TTY1.NWCR=178 TTY1.NFCR=179 TTY1.NOX=1;80 INITTY190 BEGIN_INKEY100 cm$ := "" ;C$ := ""; ax$ := "";fn$ := "";CR$ := "";WT:=0200 ST := 1; fc := 0;300 INKEY A$305 WADO(7,60) ; -- 7 je cislo Watch Dogu310 IF A$="" THEN WT := WT + 1 ELSE WT:= 0;320 IF WT > wx THEN GOTO 100330 IF WT > 0 THEN WAIT DURING 1; GOTO 300400 FOR RI:= 1 TO LEN(A$)450 C$ := A$[RI..RI]500 ON ST GOSUB 600,800,1000,1200,1300,950,3000540 cm$ := cm$ + C$550 NEXT RI560 GOTO 300600 IF C$ = CHR$(2) THEN ST:= 2; ax$:="" ELSE ST:= 1610 IF C$ = CHR$(24) THEN ST:=7;620 cm$ := ""700 RETURN800 ax$ := ax$ + C$820 IF LEN(ax$) < 2 THEN RETURN;830 IF ax$ = ad$ THEN fn$:= "";ST := 3 ELSE ST := 1;900 RETURN950 RT$ := C$; ST := 4;960 RETURN1000 fn$ := fn$ + C$1020 IF LEN(fn$) < 2 THEN RETURN1025 fc := VAL(fn$); ST := 6;1030 fn$ := STR$(fc+50);1040 RETURN1200 IF (C$ = CHR$(3)) OR (C$ = CHR$(23)) THEN ST := 5; CR$ := ""1210 RETURN1300 CR$ := CR$ + C$ ; C$ := "";C4$ := "";1320 IF LEN(CR$) = 6 THEN GOTO 1400;1340 RETURN1400 C1 := VAL(CR$[1..3]); C2 := VAL(CR$[4..6]);C1$ := "";1410 C1$ := CHR$(C1) + CHR$(C2);1415 C4$ := CRC$(4,cm$)1420 IF C1$ = C4$ THEN GOTO 1500 ELSE ST := 1;1430 RETURN1500 ON fc GOSUB 2100,2200,2300,2400,2500,2600,2700,28001505 ST := 1;cm$ := ""1510 RETURN2100 ET := INSTR(7,cm$,";");2110 FOR I := 1 TO mx2115 IF N$(I) <> "" THEN NW(I) := 1;2117 NEXT I;2120 IF cm$[7..ET-1] = cf$ THEN GOTO 2125 ELSE 21302125 SB(CHR$(6),3,ad$,fn$,RT$); RETURN2130 SB(CHR$(21),3,ad$,fn$,RT$); RETURN2200 S := 72210 FM := FREE2220 IF FM < 1000 THEN SB(CHR$(21),3,ad$,fn$,RT$); RETURN2230 E := INSTR(S,cm$,":")2240 ix := VAL(cm$[S..E-1]);2245 IF ix > mx THEN SB(CHR$(21),3,ad$,fn$,RT$); RETURN;2250 ET := INSTR(E+1,cm$,";");2255 IF ix = 0 THEN cf$ := cm$[E+1..ET-1]; GOTO 2270;2260 N$(ix) := cm$[E+1..ET-1];2270 S := ET+1;2280 IF cm$[S..S] = CHR$(3) THEN GOTO 2290 ELSE GOTO 22102290 SB(CHR$(6),3,ad$,fn$,RT$); RETURN;2300 E := INSTR(cm$,";")2340 ix := VAL(cm$[7..E-1]);2350 N$(ix) := ""2360 ET := INSTR(E+1,cm$,';')2370 cf$ := cm$[E+1..ET-1]2380 SB(CHR$(6),3,ad$,fn$,RT$)2390 RETURN2400 cn := 1;2402 SB$ := "" ;VL$ := ""2405 FOR I:= cn TO mx2407 IF NW(I) = 0 THEN GOTO 24202408 IF N$(I) = "" THEN GOTO 24202410 SB$:=SB$+STR$(I)+":"+V$(I)+";"; NW(I):=0; IF LEN(SB$)>bl THEN GOTO 24452420 NEXT I2430 SB(SB$,3,ad$,fn$,RT$)2440 RETURN2445 SB(SB$,23,ad$,fn$,RT$);RETURN;2500 cn := VAL(cm$[7..9]); GOTO 24022600 E := INSTR(cm$,"=")2640 ix := VAL(cm$[7..E-1]);2645 ET := INSTR(E+1,cm$,";");2650 LVAL(N$(ix)) := VAL(cm$[E+1..ET-1])2660 SB(CHR$(6),3,ad$,fn$,RT$)2665 V$(ix) := STR$(VAL(N$(ix)));2667 NW(ix) := 1;2670 RETURN2700 SB(CHR$(21),3,ad$,fn$,RT$)2701 RETURN2800 FOR I:= 1 TO mx2810 N$(I) := ""; V$(I) := ""; NW(I) := 0;2820 NEXT I2825 cf$ := ""2830 SB(CHR$(6),3,ad$,fn$,RT$)2840 RETURN3000 fn$ := fn$ + C$3010 IF LEN(fn$) = 5 THEN GOTO 31003020 RETURN3100 IF fn$ = "FUGGA" THEN GOTO 32003150 ST := 1; fn$ := ""; RETURN;3200 WADO(7,-1);SDTTY1;SYSDIAG := 1; STOP;7000 ON er GOTO 8100,82007100 RESUME 1008100 RESUME 100;8200 er := 1;8300 VL$ := "???";8400 RESUME 2410;9999 END
.TSK 410 ON ERROR GOTO 200;15 TSKFRM$ :=:(S:2) -- vystupny format - presnost floatingovych hodnot20 VL$ := ""30 FOR I:= 1 TO [3]mx40 IF [3]N$(I) = "" THEN GOTO 60 ELSE VL$ := STR$(VAL([3]N$(I)));50 IF VL$ <> [3]V$(I) THEN [3]V$(I) := VL$; [3]NW(I) := 1;60 NEXT I65 WADO(6,20); -- watch dog pre task 470 WAIT DURING 5; -- perioda zberu hodnot80 GOTO 20200 VL$ := "???";210 RESUME 50;