Příklad
Ukázka aplikace v Control Webu, monitorující základní parametry stanice Promos PL2 s aplikací pro sušení dřeva.
Soubor DREVOPL2.PAR
{ do parametrickeho souboru lze psat poznamky ohranicene slozenymi
zavorkami. Tyto zavorky ale musi byt jako samostatne slovo, tj.
zleva i zprava s oddelovaci - mezera, tabulator, CR+LF }
[COM]
SYSTEM 2 { cislo COM portu }
BAUD 38400 { 2400,4800,9600,19200,38400,57600 Bd }
BITS 8 { pocet bitu }
PARITY EVEN { NONE=neni, EVEN=suda, ODD=licha, MARK=1, SPACE=0 }
STOPS 2 { 1 nebo 2 }
OPTIONS 0 { 0=RS232, 32=RS485 (RTS flow control) }
BUFFER_SIZE 1024 { delka vyrovnavaciho bafru pro rec/trans }
{ vhodne uvest minimalne 2 x max.delku zpravy, }
{ tj. 2 x 256 = 512 }
END
[GLOBAL]
ADDRESS 0 { sitova adresa ovladace - co nejnizsi }
TIMEOUT 3 { max.doba odpovedi na jednu vyzvu [sec] }
SILENCE_WAIT 10.0 { pauza mezi relacemi, cas klidu na lince [ms] }
{ z Profibusu: minimalne 3x delka znaku = 11 bitu / rychlost }
SLEEP_TIME 5.0 { Delka sleep-modu [sec] }
{ Pokud s nekterou stanici nevyjde relace }
{ SLEEP_COUNT - pokusu za sebou, nebude po dobu }
{ SLEEP_TIME s touto stanici probihat zadna relace, }
{ aby tato stanice zbytecne nebrzdila komunikaci }
{ s jinymi stanicemi. Po uplynuti teto doby }
{ nasleduje normalni komunikace, tj. pokud komm. }
{ nebyla obnovena, stanice opet spadle do sleep-modu }
{ a toto se opakuje tak dlouho, dokud nedojde k }
{ obnoveni spojeni. }
{ Pokud spadnou do sleep-modu vsechny stanice, }
{ bude po dobu jednoho SLEEP_TIME provedeno }
{ totalni zastaveni komunikace. }
SLEEP_COUNT 5.0 { kolikrat musi nevyjit relace, aby stanice spadla do sleep modu }
PREFIX NONE { prefixova zprava pred kazdym vysilanim }
SUFFIX NONE { tato zprava bude vyslana po odvysilani zpravy }
{ znak _ mezera }
{ ~ pauza 1 sec behem vysilani }
{ # kod 0Dh = CR }
INIT ATX3V1&R1&C1S0=0| { modemove prikazy }
CONNECT ATDP { | = CR, @ = LF, < = RTS OFF, > = RTS ON }
CONNECT_END |
DISCONNECT ~<~>~+++~~ATH0|
REINSTAL_TIMEOUT 30.0 { pokud nedostane zadnou zpravu do zadaneho casu [sec] }
{ provede inicializaci portu }
CONNECT_TIMEOUT 60.0
END
[STATION] { alespon jedna }
ADDRESS 1 { adresa stanice }
ADDRESS_CHANNEL 1000 { kanal pro zmenu kom.adresy (od verze 2.05) }
CONNECT NONE { pripoji se k CONNECT/Global + na konec CONNECT_END/Global }
{ obsahuje telefonni cislo pro volani modemem }
{ zatim nevyuzito, zadejte zde slovo NONE }
IDENT 1001 { identifikacni retezec }
VERSION_IMP 1002 { verze implementace }
VERSION_USER 1003 { verze uzivatelskeho SW }
VERSION_BUS 1004 { typ implementace Profibusu }
{ tyto promenne jsou vycteny pomoci zpravy typu ident a jsou }
{ rozlozeny do zadanych ctyr kanalu typu string }
CONTROL_WORD 1005
SET_CONTROL_WORD 1006
STATUS_WORD 1007
GET_STATUS_WORD 1008
COMM_TIME 1009 { cislo kanalu typu real, obsahuje cas [sec] od posledni vyhodnocene }
{ komunikacni zpravy }
DATETIME_INPUT 1010 { posledni precteny stav RTC ze stanice }
{ zadava se cislo kanalu pro ROK, automaticky budou obsazeny nasleduji- }
{ ci kanaly stejneho typu pro MESIC, DEN, DEN v TYDNU, HODINU, MINUTU }
{ a SEKUNDU v tomto poradi }
DATETIME_OUTPUT 1017 { zapis hodnoty TRUE do kanalu zpusobi vyslani zpravy typu GETTIDA }
{ prectene hodnoty budou aplikaci vraceny do kanalu DATETIME_INPUT }
DATETIME_SET 1024 { zapis hodnoty TRUE do kanalu zpusobi vyslani zpravy typu SETTIDA }
{ s parametry podle DATETIME_OUTPUT }
DATETIME_GET 1025 { zapis hodnoty TRUE do kanalu zpusobi vyslani zpravy typu GETTIDA }
{ prectene hodnoty budou aplikaci vraceny do kanalu DATETIME_INPUT }
TIME_BLOCK 1 OFFSET 0 LEN 32 { zacatek sProcData }
LONGINT INPUT 1101
LONGINT INPUT 1102
LONGINT INPUT 1103
LONGINT INPUT 1104
LONGINT INPUT 1105
LONGINT INPUT 1106
LONGINT INPUT 1107
LONGINT INPUT 1108
END
END
Soubor DREVOPL2.DMF
begin
1 - 2 integer in
3 longint in
4 integer in
5 real in
6 - 8 boolean out
1009 shortreal in
1101 - 1108 real in
end.
Soubor WOODTEST.CW
directories
end_directories;
settings
operation_mode = real_time;
end_settings;
const
end_const;
var
end_var;
driver
pb = 'profibus.dll', 'drevopl2.dmf', 'drevopl2.par';
end_driver;
channel
komunikace = shortreal, 1009, pb, input;
proms = array[ 1101..1108 ] of real, pb, input;
end_channel;
timer
end_timer;
instrument
window panel panel_1;
owner = background;
position = 62, 81, 212, 438;
end_panel;
label label_2;
owner = panel_1;
position = 36, 325;
font = 'Tahoma (Central European)', 8, bold;
text = 'comm time';
end_label;
meter meter_1;
timer = 0.1;
owner = panel_1;
position = 14, 343, 188, 85;
expression = komunikace;
mode = horizontal_bar;
content = med;
range_to = 10;
low_limit = 3;
high_limit = 7;
dec_places = 1;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 280, 129, 22;
expression = proms[ 1108 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 248, 129, 22;
expression = proms[ 1107 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 216, 129, 22;
expression = proms[ 1106 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 184, 129, 22;
expression = proms[ 1105 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 152, 129, 22;
expression = proms[ 1104 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 120, 129, 22;
expression = proms[ 1103 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 88, 129, 22;
expression = proms[ 1102 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
meter meter_3;
timer = 5;
owner = panel_1;
position = 42, 56, 129, 22;
expression = proms[ 1101 ] / 1000;
mode = text_display;
range_from = -99999999;
range_to = 99999999;
low_limit = 0;
high_limit = 99999999;
dec_places = 3;
font = 'Courier (Central European)', 12, bold;
colors
ink = black;
end_colors;
end_meter;
label label_2;
owner = panel_1;
position = 21, 18;
font = 'MS Sans Serif (Central European)', 8, bold;
text = 'Profibus tester, Wood Dryer';
end_label;
end_instrument;