Obsah:
PROFIBUS.DLL - komunikacni driver pro CW3, verze 3.00
posledni editace: 23.9.1998
(c)1996-1998 ELSACO Kolin, Hradec Kralove
Z duvodu jineho kodovani cestiny v Dosu, Windows a Control Panelu
je tento popisovy soubor psan bez hacku a carek, aby byl alespon
trochu citelny ve vsech prostredich, ostatne systemovym clovekum
by to vubec nemelo vadit.
UPGRADE
verze 2.01, uvolnena asi 7.2.1997 ( TIME_BLOCK - synchronizovane cteni )
- Pri definicich jednotlivych bloku ve stanicich lze uvest jako klicove
slovo definice bloku TIME_BLOCK. Struktura definice je dale stejna jako
pri BLOCK.
-
Komunikace s blokem TIME_BLOCK bude casove synchronizovana s ctenim jeho
kanalu nadrazenou aplikaci. Zpravy tohoto typu jdou do vysilaci fronty pro
rizeni, tj. maji prioritu pred "prstynkem". Pokud bude pred zarazenim
do fronty zjisteno, ze tam zprava tohoto typu jiz je, nebude nova zarazena.
-
Pro komunikaci podle "prstynku" plati nadale, ze je provaden ve volnem
case, kdy v prioritni vysilaci fronte nic neni. Proto pozor na casovani
aplikace, pri casove narocnosti vyrizovani zprav z vysilaci fronty by se
mohlo stat, ze "prstynek" nebude vubec provaden. Pak je vhodne pri vytvareni
PAR-souboru nedefinovat zadny kanal pro "prstynek", tj. nepouzivat
definice BLOCK, BOOLEAN_INPUT ani BOOLEAN_OUTPUT. Sekce BOOLEAN_INPUT a
BOOLEAN_OUTPUT lze nahradit v bloku promennou typu BITSET, popripade
BITSETWORD.
-
Z duvodu synchronizace prenosu po jednotlivych blocich je VHODNE uvadet
kanaly typu OUTPUT jako samostatne bloky, nejlepe jako TIME_BLOCK. Pak
pri nenadefinovani zadne promenne do sekce BLOCK nedojde k aktivaci
programove obsluhy "prstynku".
-
Predelano dialogove okno ovladace do anglickeho jazyka vcetne veskerych
zprav do ramecku "Line state":
jednotliva hlaseni:
- start ovladace:
Dojde k vypsani zprav nastaveni serioveho portu, stavu nacteni skupiny
[GLOBAL] - "global info OK", a stavu nasteni stanic "Stations loaded".
- hlaseni pri prekroceni casu pri vysilani a prijmu:
Address xxx - timeout on transmit (vysilani)
Address xxx - timeout on receive (prijem)
"xxx" obsahuje adresu stanice, se kterou doslo k chybe.
- vypis pri stisku tlacitka "INFO":
Promos / Profibus RS485, (c) 1998 R.Vacek
Version x.xx (DAPI x.xx)
COM: cislo rychlost bity parita stop-bit | options
Station address x - a blocks, b BIn, c BOut
...
Station address x - a blocks, b BIn, c BOut
- pocatek preruseni komunikace se stanici z duvodu nekolika chyb za sebou:
Address xxx - sleep mode
- pri instalaci najdete v adresari PAR program PAR2DMF.EXE pro automaticke
vytvareni DMF-souboru podle definice PAR-souboru.
odstranene chyby
- obcasne chyby pri zapisu vystupnich kanalu, ktere vznikaly pri kombinovani
vstupnich a vystupnich promennych v jednom bloku
- chyba pri cteni vstupnich kanalu z promennych typu BITSET a BITSETWORD
- doladen zapis (OUTPUT) do "blokovych" promennych typu BITSET a BITSETWORD.
verze 2.02, vytvorena 8.7.1997
- definovan diagnosticky kanal cislo 6, jako BOOLEAN OUTPUT.
zapis hodnoty TRUE do tohoto kanalu zpusobi obcerstveni vsech
kanalu, definovanych jako OUTPUT. Tzn. zaradi se do prioritni
fronty pro rizeni vsechny tyto kanaly s poslednimi stavy.
- Tento kanal 6 je do souboru .DMF automaticky zarazen pri jeho vytvoreni
pomoci programu PAR2DMF.EXE
- Kanalu OUTPUT budou do fronty zarazovany ve stejnem poradi, jako jsou definovany
jednotlive stanice v PAR-souboru.
verze 2.03, vytvorena 25.06.1997
verze 2.04, vytvorena 02.09.1997
- kanal 7 boolean output -> true = vymaz vysilaci fronty
verze 2.05, vytvorena 04.09.1997
- ADDRESS_CHANNEL / SHORTCARD BIDIR = pro zmenu kom. adresy promenna pro [STATION], je nepovinna
verze 3.00, vytvorena 12.08.1998
- prvni chodiva betaverze ovladace pro CW / Windows verzi
UVOD
Struktura PAR-souboru jako definice komunikacnich zprav pro PROFIBUS PROMOS
Jednotlive bloky parametru jsou rozdeleny do skupin, hlavicka kazde
skupiny zacina jejich nazvem ohranicenym zavorkami [ ] a konci
slovem END.
Rozdeleni jednotlivych definic do radku a odsazeni ve sloupcich
je nepovinne, ale je vhodne jej pouzivat k udrzeni prehlednosti
v souboru.
Cteni kazdeho parametru jako jedno slovo STRING (lze oddelovat libovolnym
poctem mezer, tabulatoru a novych radku-CR+LF) a pote rozebrani do
promennych, v zavorkach <...> je uveden typ a priklad. Soucasti je
moznost zapisu hexa-cisel, za cislem pak bude znak "h" bez mezery, pr. FFh
psani poznamek do PAR-souboru:
poznamku nutno uhranicit slozenymi zavorkami {}. Tyto zavorky je nutno
psat take jako samostatna slova, tj. zleva i zprava s oddelovacem:
napr.:
- spravne je tato poznamka:
{ dobry den }
- chybne je to:
{dobry den} nebo
{dobry den } nebo
{ dobry den}
Pokud je nutno jako parametr promenne uvest retezec (STRING), je mozno
uvest klicove slovo NONE, ktere znaci prazdny retezec.
Poznamka: z PAR-souboru pujde pomocnym programkem PAR2DMF.EXE
vytvorit soubor .DMF (mapovaci soubor kanalu pro CP)
Pokud budete vytvaret mapu kanalu ovladace rucne, musi mit presnou
strukturu podle definovaneho PAR-souboru. Pozor! v mapovacim souboru
.DMF musi byt vse uvedeno malymi pismeny.
Pri definici cisla kanalu je mozno uvadet cela cisla v rozsahu 100 - 65532.
Ostatni kanaly jsou rozervovany pro diagnostiku a ladeni:
aktualni stav komunikace:
kanal popis
1 (integer) adresa stanice
2 (integer) cislo bloku
3 (longint) offset v bloku
4 (integer) delka bloku (u BLOCK) nebo cislo prenaseneho bitu (BOOLEAN)
5 (real) pocet zprav ve vysilaci fronte vystupnich kanalu
COMM_TIME (real) cas od posledni kom.zpravy, 1 kanal pro kazdou stanici,
cislo kanalu definovano v sekci [STATION]
6 (boolean out) zapis hodnoty TRUE do tohoto kanalu zpusobi obcerstveni vsech
kanalu, definovanych jako OUTPUT. Tzn. zaradi se do prioritni
fronty pro rizeni vsechny tyto kanaly s poslednimi stavy.
7 (boolean out) true = vymaz vysilaci fronty !!!
8 (boolean out) true = zakaz komunikace, ovladac vrati hodnoty kanalu
ihned a dle poslednich stavu
9 (longint out) Z80 pack time = vstup pro konverzi do kanalu 10 az 18
10 (longint in) Z80 date
11 (longint in) Z80 time
12 (cardinal in) Z80 year
13 (cardinal in) Z80 month
14 (cardinal in) Z80 day
15 (cardinal in) Z80 hour
16 (cardinal in) Z80 minute
17 (cardinal in) Z80 second
18 (string in) Z80 datetime string "DD.MM.RRRR HH:MM"
kanaly pro praci s modemem
20 - string out - telef.cislo pro vytoceni
21 - bool out - zmena = init modemu
22 - bool in - true = posledni init byl OK
23 - bool out - zmena = provede spojeni s cislem dle kan. 20
24 - bool in - true = prave se snazi o spojeni
25 - bool in - true = spojeni provedeno - zapne "prstynek"
26 - bool out - zmena = zavesi linku
27 - bool out - hodnota promenne X.ISACTIVE !!! - je/neni modem
28 - real in - aktualni prubeh timeoutu 1.zpravy v bafru
kanaly pro testovani chodu aplikaci bez pripojeni hardware:
(soucasna verze 1.00 toto dosud neumi)
kanal popis
65533 (longreal) Hodnota, ktera bude zapsana do kanalu
(konverze typu je automaticka, u typu BOOLEAN 1=true,0=false)
65534 (longreal) Cislo kanalu, do ktereho bude zapsana
65535 (boolean) Zapis TRUE zpusobi prenos hodonty do kanalu
dle nastaveni
Struktura souboru .DMF je popsana v navodu na system Control Panel a dale
je v tomto textu nize uveden priklad tohoto souboru.
Na poradi definice jednotlivych skupin ZALEZI z duvodu kontroly definice
nekterych promennych podle jinych, jejichz hodnota by mela byt znama, tj.
definice by mela byt uvedena drive, proto v souboru uvadejte skupiny
v poradi [COM], [GLOBAL] a pote minimalne jedna definice skupiny [STATION].
"Ostre" ukazky parametrickych souboru obsahuje instalacni disketa, tyto
ukazky budou pri instalaci nakopirovany do adresaru PAR a DMF Vaseho systemu
Control Panel.
UVOD
UVOD
popis cinnosti driveru
Pokud pri instalaci ovladace PROFIBUS dojde k chybe cteni parametrickeho
souboru, bude instalace prerusena (pri startu aplikace bude prerusen jeji
start) s vypisem prislusne chyby souboru v dialogovem okne.
seznam chybovych hlaseni:
- 'Nenalezen souboru parametru'
Na disku v prislusne ceste neni zadany definicni soubor .PAR. Zkontro-
lujte cestu *.PAR = v presmerovacim souboru .RED systemu CP2
nebo v teto ceste vytvorte parametricky soubor pozadovaneho jmena.
- 'Chybi definice skupiny'
Nutno definovat skupinu [COM] a [GLOBAL]. Dale je nutno definovat
alespon jednu skupinu [STATION].
- 'Neni definovana zadna stanice'
Chybi definice alespon jedne skupiny [STATION].
- 'Chybna definice promenne '
Nesmyslne zadani hodnoty promenne nebo zadane cislo je mimo rozsah.
- 'Chybi END na konci skupiny'
Pri nacitani se narazilo na hlavicku dalsi skupiny aniz by byla
predchozi ukoncena.
- '! Chyba alokace pameti !'
Nedostatek pameti pri instalaci definovanych struktur.
- 'Chyba instalace COM portu !'
Chybne zadani parametru skupiny [COM].
- 'expected: [ARRAY ] BYTE|BITSET|BITSETWORD|WORD|LONGINT|INTEGER|REAL|STRING '
Ocekavana definice promenne bloku podle uvedeneho popisu.
- 'expected INPUT or OUTPUT'
Ocekavano klicove slovo INPUT nebo OUTPUT v definici promenne.
- 'expected channel number (word type)'
Ocekavano cislo kanalu jako cele cislo typu word (0 - 65535).
- 'channels 1 to 99 and 65533 to 65535 are reserved'
Kanaly uvedeneho rozsahu jsou rezervovany pro diagnostiku komunikace
a ladeni aplikace.
- 'LEN expected in BLOCK-HEADER'
Ocekavana definice delky bloku v jeho hlavicce.
- 'OFFSET expected in BLOCK-HEADER'
Ocekavana definice pocatku pameti definovaneho bloku v hlavicce.
- 'OFFSET in BOOLEAN BLOCK expected'
Ocekavana definice pametove bunky definovaneho bloku v sekci BOOLEAN.
- 'BIT <0-7> in BOOLEAN BLOCK expected'
Ocekavana definice cisla bitu z definovane bunky bloku.
- 'CHANNEL in BOOLEAN BLOCK expected'
Ocekavana definice cisla kanalu promenne.
- 'BLOCK OFFSET BIT <0-7> CHANNEL or END expected'
Ocekavana definice promenne v bloku BOOLEAN nebo klicove slovo END
pro ukonceni tohoto bloku.
- 'Prekrocen maximalni pocet stanic'
V parametrickem souboru je definovano vice skupin [STATION], nez je
mozno definovat pro Vasi verzi ovladace PROFIBUS.DLL. Soucasna verze
pro distribuci umoznuje definovat maximalne 20 stanic.
poznamky
- nastaveni sekce COM podle definice normy na profibus:
[COM]
SYSTEM 2 ; cislo COM-kanalu v PC
BAUD 57600 ; komunikacni rychlost, pb_initslave(xx,adr)
... BAUD = xx * 1200
BITS 8
PARITY EVEN
STOPS 1
OPTIONS 32 ; smer toku dat je prepinan RTS-signalem
BUFFER_SIZE 1024 ; velikost vyr.bufferu
END
v sekci [GLOBAL] jsou tyto promenne pro definici casovani obsluhy COM-portu:
- TIMEOUT sec ... max. doba odpovedi stanice (do teto doby musi byt
prijata cela odpovidaci zprava
- SILENCE_WAIT msec ... cas mezi relacemi, prodleva pro casove rozliseni
jednotlivych relaci, zadava se v milisec., doba od
prijmu posledniho bajtu odpovedi a pocatkem vysilani
prvniho bajtu dalsiho pozadavku SLEEP_TIME
... viz bod 5.
- SLEEP_COUNT pocet ... viz bod 5.
- REINSTAL_TIMEOUT sec ... po zadanou dobu zadna vyhodnocena zprava ->
probehne inicializace COM - portu
- sekce BLOCK
- nacitani probiha pomoci zpravy READN
- max. delka bloku je zatim 246 bajtu (vychazi z max. delky profibusove
zpravy)
- delsi bloky nutno zatim rucne rozepsat na vice bloku s pripoctenim
OFFSET
- sekce s definici pouze vstupnich promennych (INPUT) jsou vyrazeny
s automatickeho nacitani dat pomoci prstynku
- pri zapisu do kanalu OUTPUT je vyslana hodnota pomoci zpravy WRITEN
primo na spocteny OFFSET teto promenne (ne cely BLOCK)
- v jednom bloku lze kombinovat INPUT/OUTPUT
- sekce BOOLEAN_INPUT, BOOLEAN_OUTPUT
- promenne ze vstupni sekce _INPUT jsou nacitany v prstynku pomoci
zpravy READB
- promenne z vystupni sekce _OUTPUT jsou zapisovany zpravou WRITEB
- zpravy WRITEN a WRITEB maji pred prstynkem (cteni vstupnich dat) prioritu
a jsou ukladany do kruhoveho bufferu, po prijmu a vyhodnoceni kladne
odpovedi na tyto typy zprav je provedena zprava z bufferu vymazana. Pokud
nastane TIMEOUT nebo je prijata jina odpoved nez typu SACK (viz navod na
PROFIBUS), je zprava presunuta z hlavy bufferu na jeho konec.
- pokud nastane s libovolnou stanici vice poruch komunikace za sebou, nez
urcuje promenna SLEEP_COUNT, je po definovany cas SLEEP_TIME pozastavena
komunikace s touto komunikaci, aby dalsi poruchy nebrzdily komunikaci
jinych stanic (odzkouseno je COUNT=20, TIME=600)
- pokud nastane pozadavek na prenos hodnoty kanalu OUTPUT a tento typ
zpravy jiz bude nalezen ve vysilacim bufferu, misto vlozeni dalsi zpravy
do nej bude preparametrizovana nalezena zprava.
- pri zatim rucni definici souboru .DMF je nutno psat vse pouze malymi
pismeny (!!!) - pokud bude neco zadane velkymi pismeny -> pri definici
kanalu z gr.editoru to projde tvrdym RESETem ! (chyba v CP)
UVOD
UKAZKA DEFINICE PARAMETRICKEHO SOUBORU .PAR
[COM]
SYSTEM 2
BAUD 57600
BITS 8
PARITY EVEN
STOPS 1
OPTIONS 32
BUFFER_SIZE 1024
END
[GLOBAL]
ADDRESS 1
TIMEOUT 0.2
SILENCE_WAIT 0.6
SLEEP_TIME 0.0
SLEEP_COUNT 20.0
PREFIX NONE
SUFFIX NONE
INIT "ATX3" "#"
CONNECT "ATDP" ""
CONNECT_END "#" ""
DISCONNECT "~~+++~~" "ATH0#~~"
REINSTAL_TIMEOUT 2.0
END
[STATION]
ADDRESS 2
CONNECT NONE
IDENT 1001
VERSION_IMP 1002
VERSION_USER 1003
VERSION_BUS 1004
CONTROL_WORD 1500
SET_CONTROL_WORD 1501
STATUS_WORD 1502
GET_STATUS_WORD 1503
COMM_TIME 666
DATETIME_INPUT 1005
DATETIME_OUTPUT 1012
DATETIME_SET 1019
DATETIME_GET 1020
BLOCK 1 OFFSET 20 LEN 12
REAL INPUT 100
REAL INPUT 300
REAL INPUT 302
END
BLOCK 1 OFFSET 24 LEN 4
REAL OUTPUT 301
END
BLOCK 0 OFFSET 0 LEN 2
INTEGER INPUT 101
END
BLOCK 2 OFFSET 2 LEN 2
BITSETWORD INPUT 107
END
BLOCK 0 OFFSET 200 LEN 2
INTEGER INPUT 102
END
BLOCK 2 OFFSET 2 LEN 2
INTEGER OUTPUT 103
END
BLOCK 3 OFFSET 0 LEN 3
BYTE OUTPUT 104
BYTE INPUT 105
BITSET INPUT 150
END
BLOCK 3 OFFSET 11 LEN 7
ARRAY 7 BYTE INPUT 200
END
BLOCK 3 OFFSET 50 LEN 1
BITSET INPUT 230
END
BOOLEAN_INPUT
BLOCK 3 OFFSET 50 BIT 0 CHANNEL 210
BLOCK 3 OFFSET 50 BIT 1 CHANNEL 211
BLOCK 3 OFFSET 50 BIT 2 CHANNEL 212
BLOCK 3 OFFSET 50 BIT 3 CHANNEL 213
BLOCK 3 OFFSET 50 BIT 4 CHANNEL 214
BLOCK 3 OFFSET 50 BIT 5 CHANNEL 215
BLOCK 3 OFFSET 50 BIT 6 CHANNEL 216
BLOCK 3 OFFSET 50 BIT 7 CHANNEL 217
END
BOOLEAN_OUTPUT
BLOCK 3 OFFSET 50 BIT 0 CHANNEL 220
BLOCK 3 OFFSET 50 BIT 1 CHANNEL 221
BLOCK 3 OFFSET 50 BIT 2 CHANNEL 222
BLOCK 3 OFFSET 50 BIT 3 CHANNEL 223
BLOCK 3 OFFSET 50 BIT 4 CHANNEL 224
BLOCK 3 OFFSET 50 BIT 5 CHANNEL 225
BLOCK 3 OFFSET 50 BIT 6 CHANNEL 226
BLOCK 3 OFFSET 50 BIT 7 CHANNEL 227
BLOCK 3 OFFSET 10 BIT 0 CHANNEL 2500
END
END
-konec-souboru-
poznamka: dale uvedeny soubor DMF je vytvoren z ukazky .PAR
UVOD
UKAZKA DEFINICE MAPOVACIHO SOUBORU .DMF:
----------------------------------------
begin
1 - 2 integer in
3 longint in
4 integer in
5 real in
100 shortreal in
101 integer in
102 integer in
103 integer out
104 shortcard out
105 shortcard in
107 - 122 boolean in
150 - 157 boolean in
200 - 206 shortcard in
210 - 217 boolean in
220 - 227 boolean out
230 - 237 boolean in
300 shortreal in
301 shortreal out
302 shortreal in
400 - 407 boolean in
666 real in
1005 - 1011 shortcard in
1012 - 1018 shortcard out
1019 boolean out
1020 boolean out
1500 cardinal out
1501 boolean out
1502 cardinal in
1503 boolean out
2500 boolean out
end.
-konec-souboru-
UVOD
pripravovano:
-------------
1. sekce BLOCK nebude omezena definici LEN = 246 max. Rozdeleni na vice bloku pri preteceni
max. delky zpravy bude provedeno automaticky
2. prstynek bude rozdelen na casovani zvlast nastavitelne pro kazdou stanici:
[STATION]
AUTO_BLOCK_TIME
..
..
END