Ôîðìèðîâàíèå
Íàëè÷èå ñîáñòâåííîãî âåêòîðíîãî ãðàôè÷åñêîãî ðåäàêòîðà ÿâëÿåòñÿ íåîòúåìëåìîé ÷àñòüþ óâàæàþùåé ñåáÿ SCADA ñèñòåìû. Îïûò ïîêàçûâàåò, ÷òî íàèáîëåå èíôîðìàòèâíîé ôîðìîé ïðåäñòàâëåíèÿ òåõíîëîãè÷åñêèõ ïðîöåññîâ ÿâëÿþòñÿ ìíåìîñõåìû - ñîâîêóïíîñòü ñèãíàëüíûõ óñòðîéñòâ è ñèãíàëüíûõ èçîáðàæåíèé îáîðóäîâàíèÿ è âíóòðåííèõ ñâÿçåé êîíòðîëèðóåìîãî îáúåêòà, âûïîëíÿåìûå íà ïåðñîíàëüíîì êîìïüþòåðå. Äëÿ èõ ñîçäàíèÿ ìîæíî èñïîëüçîâàòü ëþáîé èç ñóùåñòâóþùèõ ãðàôè÷åñêèõ ðåäàêòîðîâ. Îäíàêî, ïîëó÷åííûå òàêèì îáðàçîì ìíåìîñõåìû ÿâëÿþòñÿ ñòàòè÷åñêèìè è íå îòðàæàþò äèíàìèêó èçìåíåíèÿ õàðàêòåðèñòèê ïðîöåññà, à ñëåäîâàòåëüíî, îíè íåàäåêâàòíû è íåóäîáíû äëÿ âîñïðèÿòèÿ. Òàêèì îáðàçîì, îäíîé èç çàäà÷, ñòîÿùèõ ïåðåä ðàçðàáîò÷èêàìè SCADA ñèñòåì, ÿâëÿåòñÿ ñîçäàíèå ãðàôè÷åñêîãî ðåäàêòîðà äëÿ èçîáðàæåíèÿ îáúåêòîâ, õàðàêòåðèñòèêè êîòîðûõ ìîãóò áûòü äèíàìè÷åñêè èçìåíåíû.
Îñíîâîé îïèñûâàåìîãî ðåäàêòîðà ÿâëÿþòñÿ òðè ãðàôè÷åñêèõ ïðèìèòèâà: ëèíèÿ, äóãà, êðèâàÿ Áåçüå. Ê äèíàìè÷åñêè èçìåíÿþùèìñÿ õàðàêòåðèñòèêàì ýòèõ ïðèìèòèâîâ îòíîñÿòñÿ:
Ïðèìåðû ïðèìèòèâîâ ðàçëè÷íîãî öâåòà, òîëùèíû, ñòèëåé ñ áîðäþðàìè è áåç áîðäþðîâ ïðèâåäåíû íà ðèñ. 2.
Ïðåäóñìîòðåíà âîçìîæíîñòü ñâÿçè ðàçëè÷íûõ ãðàôè÷åñêèõ ïðèìèòèâîâ äëÿ ñîçäàíèÿ ñëîæíûõ ãðàôè÷åñêèõ îáúåêòîâ. Åñëè ñâÿçàííûå ïðèìèòèâû îáðàçóþò çàìêíóòûé êîíòóð, òî îí ìîæåò áûòü çàëèò öâåòîì è/èëè èçîáðàæåíèåì (ðèñ. 3).
Ãðàôè÷åñêèé ðåäàêòîð ïîçâîëÿåò ìàñøòàáèðîâàòü è ïîâîðà÷èâàòü ôèãóðû (ïðèìèòèâû è ñëîæíûå ãðàôè÷åñêèå îáúåêòû) (ðèñ. 4).
Ê âîçìîæíîñòÿì ðåäàêòîðà òàêæå îòíîñÿòñÿ âûäåëåíèå, ïåðåìåùåíèå, êîïèðîâàíèå è óäàëåíèå ôèãóð.
Äëÿ òîãî, ÷òîáû ïðèñòóïèòü ê ðàáîòå ñ ãðàôè÷åñêèì ðåäàêòîðîì ïîñëå çàïóñêà ïðîåêòà OpenSCADA íåîáõîäèìî âûçâàòü «Ðàáî÷èé ïîëüçîâàòåëüñêèé èíòåðôåéñ». Âî âêëàäêå «Âèäæåò» ñîäåðæèòñÿ ïåðå÷åíü ñóùåñòâóþùèõ ãðàôè÷åñêèõ áèáëèîòåê è ïðèíàäëåæàùèõ èì ýëåìåíòîâ.
Ïðåäïîëîæèì, ÷òî íàì íåîáõîäèìî äîáàâèòü ãðàôè÷åñêèé ýëåìåíò â îäíó èç ñóùåñòâóþùèõ áèáëèîòåê. Äëÿ ýòîãî âûäåëèì èìÿ áèáëèîòåêè è íàæìåì êíîïêó () íà ïàíåëè èíñòðóìåíòîâ.  ïîÿâèâøååñÿ îêíî ââåäåì èäåíòèôèêàòîð è èìÿ íîâîãî ãðàôè÷åñêîãî ýëåìåíòà. Ïîñëå ÷åãî ïåðåéäåì ê ýòîìó ýëåìåíòó è íàæìåì êíîïêó (
). Cïðàâà ïîÿâèòñÿ ïîëå äëÿ ðèñîâàíèÿ. Ñ ïîìîùüþ äâîéíîãî ùåë÷êà ìûøüþ ïî ýòîìó ïîëþ ëèáî ïðè ïîìîùè êîíòåêñòíîãî ìåíþ âîéäåì â ðåæèì ðåäàêòèðîâàíèÿ — ðåæèì ðàáîòû ãðàôè÷åñêîãî ðåäàêòîðà, ïîçâîëÿþùèé îñóùåñòâëÿòü âñå ïðåäóñìîòðåííûå ìàíèïóëÿöèè ñ ôèãóðàìè.  òîò ìîìåíò, êîãäà âíîâü ñîçäàííûé íàìè ãðàôè÷åñêèé ýëåìåíò íàõîäèòñÿ â ôîêóñå, âêëàäêà «Àòðèáóòû» ïðèîáðåòåò âèä, ïðåäñòàâëåííûé íà ðèñ. 5.
Ñ ïîìîùüþ ìûøè èëè ïîëÿ «Ãåîìåòðèÿ» âêëàäêè «Àòðèáóòû» çàäàäèì ðàçìåðû ïîëÿ äëÿ ðèñîâàíèÿ è ìàñøòàáíûå êîýôôèöèåíòû.
Âîñïîëüçîâàâøèñü ïîëåì «Ëèíèÿ» âêëàäêè «Àòðèáóòû», çàäàäèì øèðèíó, öâåò, ñòèëü ëèíèé, êîòîðûìè áóäåì ðèñîâàòü. Ñ ïîìîùüþ ïîëÿ «Ãðàíèöà» çàäàäèì øèðèíó è öâåò áîðäþðà. Ïîëå «Çàïîëíåíèå» ïîçâîëÿåò çàäàòü öâåò è èçîáðàæåíèå çàëèâêè. «Ñïèñîê ýëåìåíòîâ» ñîäåðæèò ïåðå÷åíü ïðèìèòèâîâ, èñïîëüçóåìûõ ïðè ñîçäàíèè ãðàôè÷åñêîãî îáúåêòà. Ýëåìåíòû âñåõ ïîëåé âêëàäêè «Àòðèáóòû» ìîãóò äèíàìè÷åñêè èçìåíÿòüñÿ â ñêðèïòàõ (ïðîãðàììàõ) ïîëüçîâàòåëÿ.
Ãðàôè÷åñêèå ïðèìèòèâû ìîãóò áûòü íàðèñîâàíû ñ ïîìîùüþ ìûøêè èëè çàäàíû ñ ïîìîùüþ ñïèñêà ãðàôè÷åñêèõ ïðèìèòèâîâ.  ïåðâîì ñëó÷àå êîîðäèíàòû êîíòðîëüíûõ òî÷åê ñîçäàâàåìîãî ïðèìèòèâà âû÷èñëÿþòñÿ àâòîìàòè÷åñêè, øèðèíà, öâåò, ñòèëü ëèíèè, øèðèíà è öâåò áîðäþðà óñòàíàâëèâàþòñÿ ïî óìîë÷àíèþ èç âêëàäêè «Àòðèáóòû». Âî âòîðîì ñëó÷àå ïðèìèòèâ íåîáõîäèìî îïèñàòü â «Ñïèñêå ýëåìåíòîâ» ñëåäóþùèì îáðàçîì:
line:(x1|y1):(x2|y2):width:color:border_width:border_color:style (1)
arc:(x1|y1):(x2|y2):(x3|y3):(x4|y4):(x5|y5):width:color:border_width:border_color:style (2)
bezier:(x1|y1):(x2|y2):(x3|y3):(x4|y4):width:color:border_width:border_color:style, (3)
ãäå (x1|y1) - êîîðäèíàòû ïåðâîé êîíòðîëüíîé òî÷êè ïðèìèòèâà;
(x2|y2) - êîîðäèíàòû âòîðîé êîíòðîëüíîé òî÷êè ïðèìèòèâà;
(x3|y3) - êîîðäèíàòû òðåòüåé êîíòðîëüíîé òî÷êè ïðèìèòèâà;
(x4|y4) - êîîðäèíàòû ÷åòâåðòîé êîíòðîëüíîé òî÷êè ïðèìèòèâà;
(x5|y5) - êîîðäèíàòû ïÿòîé êîíòðîëüíîé òî÷êè ïðèìèòèâà;
width - øèðèíà ëèíèè, êîòîðîé áóäåò íàðèñîâàí ïðèìèòèâ;
color - öâåò ëèíèè, êîòîðîé áóäåò íàðèñîâàí ïðèìèòèâ;
border_width - øèðèíà áîðäþðà;
border_color - öâåò áîðäþðà;
stylå - ñòèëü ëèíèè.
Ïðè ýòîì ïðèîðèòåòíûìè ÿâëÿþòñÿ çíà÷åíèÿ øèðèíû, öâåòà, ñòèëÿ ëèíèè, øèðèíû è öâåòà áîðäþðà, çàäàííûå â «Ñïèñêå ýëåìåíòîâ». Åñëè íåîáõîäèìî èñïîëüçîâàòü êàêèå- ëèáî õàðàêòåðèñòèêè, óñòàíàâëèâàåìûå ïîëÿìè «Ëèíèÿ» èëè «Ãðàíèöà» âêëàäêè «Àòðèáóòû», òî ïðè îïèñàíèè ïðèìèòèâà èõ ñëåäóåò ïðîïóñòèòü. Íàïðèìåð, ìû õîòèì ñîçäàòü ëèíèþ ñ øèðèíîé 3 êðàñíîãî öâåòà ñïëîøíóþ è áåç áîðäþðà. Ïðè ýòîì â ïîëå «Ëèíèÿ» çàäàíû øèðèíà ëèíèè, ðàâíàÿ 3, ÷åðíûé öâåò ëèíèè, ñïëîøíîé ñòèëü ëèíèè; â ïîëå «Ãðàíèöà» çàäàíû øèðèíà áîðäþðà, ðàâíàÿ 5, öâåò áîðäþðà çåëåíûé. Òîãäà îïèñàíèå ïðèìèòèâà â «Ñïèñêå ýëåìåíòîâ» äîëæíî âûãëÿäåòü ñëåäóþùèì îáðàçîì:
line:(x1|y1):(x2|y2)::red:0:: (4)
Ôîðìû çàïèñè (1) ‑ (4) çàäàþò ñòàòè÷åñêèå õàðàêòåðèñòèêè ïðèìèòèâîâ, êîòîðûå íå ìîãóò áûòü èçìåíåíû ïðîãðàììíî. Äëÿ çàäàíèÿ äèíàìè÷åñêèõ õàðàêòåðèñòèê íåîáõîäèìî èñïîëüçîâàòü ôîðìó çàïèñè:
line:p1:p2:w1:c1:w2:c2:s1 (5)
Òîãäà â îêíî «Àòðèáóòû» äîáàâÿòñÿ ïîëÿ: Òî÷êà1 (p1), Òî÷êà2 (p2), Øèðèíà1 (w1), Øèðèíà2 (w2), Öâåò1 (c1), Öâåò2 (c2), Ñòèëü1 (s1) (ðèñ.6) Çíà÷åíèÿ ýòèõ ïîëåé ìîæíî èçìåíÿòü ïðîãðàììíî, ñ ïîìîùüþ îäíîãî èç ÿçûêîâ ïðîãðàììèðîâàíèÿ ïðîåêòà OpenSCADA. Î÷åâèäíî, ÷òî ïðè æåëàíèè äèíàìè÷åñêèìè ìîãóò áûòü îáúÿâëåíû íå âñå ñâîéñòâà ïðèìèòèâà, à îäíî èëè íåñêîëüêî, êðîìå òîãî îäíî äèíàìè÷åñêîå ñâîéñòâî ìîæåò áûòü èñïîëüçîâàíî ìíîãîêðàòíî.
Ðåäàêòèðîâàíèå êîîðäèíàò êîíòðîëüíûõ òî÷åê îñóùåñòâëÿåòñÿ ëèáî ñ ïîìîùüþ ìûøè, ëèáî ïóòåì èõ èçìåíåíèÿ â «Ñïèñêå ýëåìåíòîâ» äëÿ ñòàòè÷åñêèõ òî÷åê èëè ïðÿìî âî âêëàäêå «Àòðèáóòû», èìåÿ â íàëè÷èè äèíàìè÷åñêèå òî÷êè («Òî÷êà 1»). Ðåäàêòèðîâàíèå äðóãèõ õàðàêòåðèñòèê îñóùåñòâëÿåòñÿ ñ ïîìîùüþ èçìåíåíèÿ ñîäåðæèìîãî ïîëåé «Ëèíèÿ» , «Ãðàíèöà» âêëàäêè «Àòðèáóòû» èëè «Ñïèñêå ýëåìåíòîâ».
Ïðåäóñìîòðåíû âîçìîæíîñòè âûäåëåíèÿ (ùåë÷îê ëåâîé êíîïêîé ìûøè ïî ôèãóðå), ñîâìåñòíîãî âûäåëåíèÿ ïðèìèòèâîâ (ëåâàÿ êíîïêà ìûøè + íàæàòàÿ êëàâèøà «Ctrl» ïðè âûêëþ÷åííîé êíîïêå «Ïîäêëþ÷èòüñÿ»), ñîâìåñòíîãî âûäåëåíèÿ ðàìêîé, ðèñóåìîé ñ ïîìîùüþ íàæàòîé ëåâîé êíîïêè ìûøêè, èõ ïåðåìåùåíèÿ (êëàâèàòóðà/ìûøü), êîïèðîâàíèÿ è âñòàâêè («Ctrl»+«C», «Ctrl»+«V» èëè èç êîíòåêñòíîãî ìåíþ), óäàëåíèÿ («Del»).
Äëÿ ñâÿçè ïðèìèòèâîâ äðóã ñ äðóãîì íåîáõîäèìî:
Äëÿ çàëèâêè çàìêíóòîãî êîíòóðà íåîáõîäèìî äâà ðàçà êëèêíóòü ìûøêîé âíóòðè íåãî ëèáî çàäàòü çàëèâêó â «Ñïèñêå ýëåìåíòîâ» ñëåäóþùèì îáðàçîì:
fill:(x1:y1):(x2:y2):...:(xn:yn):color:image - (ñòàòèêà),
fill:p1:p2:p3:...:c1:i1 - (äèíàìèêà),
ãäå (x1:y1):(x2:y2):(x3:yn) - êîîðäèíàòû íà÷àëüíûõ/êîíå÷íûõ òî÷åê ïðèìèòèâîâ, îáðàçóþùèõ çàìêíóòûé êîíòóð,
color - öâåò çàëèâêè,
image - èçîáðàæåíèå çàëèâêè.
Ïðè ýòîì ïðèîðèòåòíûìè ÿâëÿþòñÿ çíà÷åíèÿ öâåòà è èçîáðàæåíèÿ çàëèâêè, çàäàííûå â «Ñïèñêå ýëåìåíòîâ». Åñëè íåîáõîäèìî èñïîëüçîâàòü õàðàêòåðèñòèêè, óñòàíàâëèâàåìûå ïîëåì «Çàïîëíåíèå» âêëàäêè «Àòðèáóòû», òî ïðè îïèñàíèè ïðèìèòèâà èõ ñëåäóåò ïðîïóñòèòü.
Äëÿ ìàñøòàáèðîâàíèå ôèãóð íåîáõîäèìî â ïîëå «Ãåîìåòðèÿ» çàäàòü çíà÷åíèÿ ìàñøòàáà ïî îñÿì «X» è «Y». Êðîìå òîãî, ñóùåñòâóåò âîçìîæíîñòü âèçóàëüíî óâåëè÷èòü/óìåíüøèòü èçîáðàæåíèå, íå ìåíÿÿ ìàñøòàá. Äëÿ ýòîãî íåîáõîäèìî âûéòè èç ðåæèìà ðåäàêòèðîâàíèÿ, ùåëêíóòü ïðàâîé êíîïêîé ìûøè ïî ñâîáîäíîìó ìåñòó ïîëÿ ðèñîâàíèÿ, â ïîÿâèâøåìñÿ êîíòåêñòíîì ìåíþ âûáðàòü ïóíêò «Óâåëè÷èòü (+10%)»/ «Óìåíüøèòü (-10%)» ëèáî ïîêðóòèòü êîëåñèêî ìûøêè, óäåðæèâàÿ ïðè ýòîì «Ctrl». Âûõîä èç ðåæèìà ðåäàêòèðîâàíèÿ îñóùåñòâëÿåòñÿ ëèáî ñ ïîìîùüþ íàæàòèÿ êëàâèøè «Esc», ëèáî ñ ïîìîùüþ êîíòåêñòíîãî ìåíþ âèäæåòà.
Ñóùåñòâóåò âîçìîæíîñòü ïîâîðà÷èâàòü ñîäåðæèìîå âèäæåòà. Äëÿ ïîâîðîòà ñîçäàííûõ îáúåêòîâ ñëåäóåò â îêíå «Àòðèáóòû» çàäàòü «Óãîë ïîâîðîòà» îò -360 äî 360.
Ãðàôè÷åñêèé ðåäàêòîð ïîääåðæèâàåò ïðîçðà÷íîñòü öâåòà, çàäàâàåìóþ ñëåäóþùèì îáðàçîì: color-t, ãäå color ‑ öâåò, à t ‑ ïðîçðà÷íîñòü îò 0 (ïîëíîñòüþ ïðîçðà÷íûé) äî 255 (íåïðîçðà÷íûé).
Ïðåäóñìîòðåíî êîíòåêñòíîå ìåíþ, âûçûâàåìîå ùåë÷êîì ïðàâîé êíîïêè ìûøêè â îáëàñòè ðåäàêòèðóåìîãî âèäæåòà.  çàâèñèìîñòè îò òîãî, êàêîé îáúåêò íàõîäèòñÿ ïîä óêàçàòåëåì ìûøêè, êîíòåêñòíîå ìåíþ ìîæåò ïðèíèìàòü íåñêîëüêî ðàçëè÷íûé âèä. Íèæå, íà ðèñóíêå 6 ïðèâåäåíû ïðèìåðû êîíòåêñòíîãî ìåíþ.
Êîíòåêñòíîå ìåíþ âêëþ÷àåò ñëåäóþùèå ñåêöèè (ñâåðõó âíèç):
Äèàëîã, âàðèàíòû êîòîðîãî ïðåäñòàâëåíû íà ðèñóíêàõ 7, 8, 9, ðåàëèçîâàí äëÿ èíòåðàêòèâíîãî è óäîáíîãî óïðàâëåíèÿ ñâîéñòâàìè ôèãóð(û).
Êàê âèäíî èç ðèñóíêîâ âûøå, äèàëîã ìîæåò èìåòü òðè ðàçëè÷íûõ ôîðìû â çàâèñèìîñòè îò îáúåêòà, äëÿ êîòîðîãî âûçûâàåòñÿ.
Åñëè äèàëîã âûçâàí äëÿ îäèíî÷íîé ôèãóðû (ëèíèÿ, äóãà èëè êðèâàÿ Áåçüå), òî â íåì ñóùåñòâóåò âîçìîæíîñòü ðåäàêòèðîâàòü êîîðäèíàòû òî÷åê ôèãóðû (ðèñ. 7). Åñëè òî÷êà ñîåäèíåíà ñ òî÷êîé äðóãîé ôèãóðû èëè ôèãóð, è âêëþ÷åí ðåæèì «ïðèâÿçîê» ( «Ïîäêëþ÷èòüñÿ» ), òî ââåäåííûå êîîðäèíàòû áóäóò ïðèìåíåíû êî âñåì ôèãóðàì, à çàëèâêè, â êîòîðûõ ó÷àñòâóåò ôèãóðà, áóäóò ñîîòâåòñòâåííî ïåðåðèñîâàíû.
Åñëè æå äèàëîã âûçâàí äëÿ ãðóïïû âûáðàííûõ ôèãóð (ðèñ. 8), òî ñâîéñòâà (àòðèáóòû), óêàçàííûå â äèàëîãå, áóäóò ïðèìåíåíû êî âñåì ôèãóðàì, ïåðå÷èñëåííûì â çàãëàâèè äèàëîãà. Ïðè âûçîâå äèàëîãà â ïîëÿõ ñâîéñòâ áóäóò îòîáðàæàòüñÿ äàííûå òîé ôèãóðû èç ãðóïïû âûáðàííûõ, îòíîñèòåëüíî êîòîðîé áûëî âûçâàíî êîíòåêñòíîå ìåíþ. Ñóùåñòâóåò âîçìîæíîñòü âêëþ÷àòü/èñêëþ÷àòü îòäåëüíûå ñâîéñòâà äèàëîãà. Äëÿ ýòîãî ïðåäóñìîòðåíà êíîïêà ().  ñëó÷àå èñêëþ÷åíèÿ îòäåëüíûõ ñâîéñòâ îíè íå áóäóò îáðàáàòûâàòüñÿ ïðè ïîäòâåðæäåíèè äèàëîãà (êíîïêà «Ïðèíÿòü»). Ïðè ïîäòâåðæäåíèè äèàëîãà âñå óêàçàííûå äàííûå äëÿ âêëþ÷åííûõ ñâîéñòâ áóäóò ïðèìåíåíû äëÿ âñåé ãðóïïû ôèãóð.
Äèàëîã äëÿ ñâîéñòâ çàëèâêè (ðèñ. 9) ïîçâîëÿåò óïðàâëÿòü ñâîéñòâàìè îòäåëüíîé çàëèâêè.
Ïðè âûáîðå ôëàæêà ñïðàâà îò ñâîéñòâà îíî (ñâîéñòâî) ïîñëå ïîäòâåðæäåíèÿ äèàëîãà óñòàíàâëèâàåòñÿ â çíà÷åíèå ïî óìîë÷àíèþ, êîòîðîå óêàçàíî âî âêëàäêå «Àòðèáóòû». Êíîïêè «Äèí/Ñòàò» äåëàþò ñîîòâåòñòâóþùèå ñâîéñòâà äèíàìè÷åñêèìè ëèáî ñòàòè÷åñêèìè.