L&G FUGGA PRV

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 3
1 -- FUGGA PROTOCOL (C) IPESOFT 1997 V 1.02
5 ad$ := "21"; -- adresa stanice
10 er := 1 ; cf$ ="";RT$ := "";mx:=100
15 sl := 2; bl = 60; cn := 1; wx := 5;
20 DIM N$(mx); DIM V$(mx); DIM NW(mx);
25 FOR I := 1 TO mx
26 V$(I) := ""; NW(I) := 0;
27 NEXT I;
48 STOP 4; RUN 4;
40 TSKPRP:=3
50 TSKTTY:=1
55 TSKPRIO:=15
56 SYSDIAG:=0;
58 ON ERROR GOTO 7000
60 TTY1.BD=19200
61 -- TTY1.PARCHK = 0
62 TTY1.SSB = 0
70 TTY1.NOEC=1
72 TTY1.NCON=1
74 TTY1.MOD=0
76 TTY1.NWCR=1
78 TTY1.NFCR=1
79 TTY1.NOX=1;
80 INITTY1
90 BEGIN_INKEY
100 cm$ := "" ;C$ := ""; ax$ := "";fn$ := "";CR$ := "";WT:=0
200 ST := 1; fc := 0;
300 INKEY A$
305 WADO(7,60) ; -- 7 je cislo Watch Dogu
310 IF A$="" THEN WT := WT + 1 ELSE WT:= 0;
320 IF WT > wx THEN GOTO 100
330 IF WT > 0 THEN WAIT DURING 1; GOTO 300
400 FOR RI:= 1 TO LEN(A$)
450 C$ := A$[RI..RI]
500 ON ST GOSUB 600,800,1000,1200,1300,950,3000
540 cm$ := cm$ + C$
550 NEXT RI
560 GOTO 300
600 IF C$ = CHR$(2) THEN ST:= 2; ax$:="" ELSE ST:= 1
610 IF C$ = CHR$(24) THEN ST:=7;
620 cm$ := ""
700 RETURN
800 ax$ := ax$ + C$
820 IF LEN(ax$) < 2 THEN RETURN;
830 IF ax$ = ad$ THEN fn$:= "";ST := 3 ELSE ST := 1;
900 RETURN
950 RT$ := C$; ST := 4;
960 RETURN
1000 fn$ := fn$ + C$
1020 IF LEN(fn$) < 2 THEN RETURN
1025 fc := VAL(fn$); ST := 6;
1030 fn$ := STR$(fc+50);
1040 RETURN
1200 IF (C$ = CHR$(3)) OR (C$ = CHR$(23)) THEN ST := 5; CR$ := ""
1210 RETURN
1300 CR$ := CR$ + C$ ; C$ := "";C4$ := "";
1320 IF LEN(CR$) = 6 THEN GOTO 1400;
1340 RETURN
1400 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 RETURN
1500 ON fc GOSUB 2100,2200,2300,2400,2500,2600,2700,2800
1505 ST := 1;cm$ := ""
1510 RETURN
2100 ET := INSTR(7,cm$,";");
2110 FOR I := 1 TO mx
2115 IF N$(I) <> "" THEN NW(I) := 1;
2117 NEXT I;
2120 IF cm$[7..ET-1] = cf$ THEN GOTO 2125 ELSE 2130
2125 SB(CHR$(6),3,ad$,fn$,RT$); RETURN
2130 SB(CHR$(21),3,ad$,fn$,RT$); RETURN
2200 S := 7
2210 FM := FREE
2220 IF FM < 1000 THEN SB(CHR$(21),3,ad$,fn$,RT$); RETURN
2230 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 2210
2290 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 RETURN
2400 cn := 1;
2402 SB$ := "" ;VL$ := ""
2405 FOR I:= cn TO mx
2407 IF NW(I) = 0 THEN GOTO 2420
2408 IF N$(I) = "" THEN GOTO 2420
2410 SB$:=SB$+STR$(I)+":"+V$(I)+";"; NW(I):=0; IF LEN(SB$)>bl THEN GOTO 2445
2420 NEXT I
2430 SB(SB$,3,ad$,fn$,RT$)
2440 RETURN
2445 SB(SB$,23,ad$,fn$,RT$);RETURN;
2500 cn := VAL(cm$[7..9]); GOTO 2402
2600 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 RETURN
2700 SB(CHR$(21),3,ad$,fn$,RT$)
2701 RETURN
2800 FOR I:= 1 TO mx
2810 N$(I) := ""; V$(I) := ""; NW(I) := 0;
2820 NEXT I
2825 cf$ := ""
2830 SB(CHR$(6),3,ad$,fn$,RT$)
2840 RETURN
3000 fn$ := fn$ + C$
3010 IF LEN(fn$) = 5 THEN GOTO 3100
3020 RETURN
3100 IF fn$ = "FUGGA" THEN GOTO 3200
3150 ST := 1; fn$ := ""; RETURN;
3200 WADO(7,-1);SDTTY1;SYSDIAG := 1; STOP;
7000 ON er GOTO 8100,8200
7100 RESUME 100
8100 RESUME 100;
8200 er := 1;
8300 VL$ := "???";
8400 RESUME 2410;
9999 END

 

.TSK 4
10 ON ERROR GOTO 200;
15 TSKFRM$ :=:(S:2) -- vystupny format - presnost floatingovych hodnot
20 VL$ := ""
30 FOR I:= 1 TO [3]mx
40 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 I
65 WADO(6,20); -- watch dog pre task 4
70 WAIT DURING 5; -- perioda zberu hodnot
80 GOTO 20
200 VL$ := "???";
210 RESUME 50;