Âåðñèþ 0.5.0 ñèñòåìû OpenSCADA ìîæíî ñ óâåðåííîñòüþ íàçâàòü ïåðåëîìíîé. Äåëî â òîì, ÷òî äàííàÿ âåðñèÿ ñîäåðæèò ÿäðî SCADA ñèñòåìû â êîòîðîì ðåàëèçîâàíû âñå çàïðîåêòèðîâàíûå áàçîâûå ôóíêöè. Êðîìå ýòîãî, ñèñòåìà ïðàêòè÷åñêè âïëîòíóþ ïðèáëèçèëàñü ê ðåàëèçàöèè âñåõ çàïðîåêòèðîâàííûõ áàçîâûõ ôóíêöèé SCADA ñèñòåìû. Òàê, â äèñòðèáóòèâ ñèñòåìû áûëà âêëþ÷åíà ñðåäà ïðåäñòàâëåíèÿ Vision Çàé÷óêà Åâãåíèÿ. Ðàçðàáîòêà êîòîðîé, îäíàêî åù¸ íå çàâåðøåíà. Òàêæå, ñèñòåìà äâàæäû áûëà èñïîëüçîâàíà äëÿ ðåøåíèÿ ïðàêòè÷åñêèõ çàäà÷. Ïåðâîé çàäà÷åé ñòàëà - ïîñòðîåíèå äèíàìè÷åñêîé ìîäåëè òåõíîëîãè÷åñêîãî ïðîöåññà ãàçî-ëèôòíîé êîìïðåññîðíîé ñòàíöèè (ÃËÊÑ). Âòîðàÿ çàäà÷à ïðåäñòàâëÿëà ñîáîé âûñîêî÷àñòîòíûé ñáîð è àðõèâèðîâàíèå 6 êàíàëîâ äàò÷èêîâ äàâëåíèé è 2 êàíàëà ïåðåïàäà òîé-æå êîìïðåññîðíîé ñòàíöèè íà îñíîâå îäíîïëàòíîãî êîìïüþòåðà (PC/104) ñ ÓÑÎ "Athena" ôèðìû Diamond Systems.
Äàííûé äîêóìåíò ÿâëÿåòñÿ îáðàáîòêîé(êîìïèëÿöèåé) äîêóìåíòà <ChangeLog> ñèñòåìû OpenSCADA âåðñèè 0.5.0 ïðèçâàííûé âêðàòöå è äîõîä÷èâî îñâåòèòü íîâûå âîçìîæíîñòè ñèñòåìû OpenSCADA. Äåòàëüíî îçíàêîìèòüñÿ ñ èçìåíåíèÿìè â ñèñòåìå OpenSCADA ìîæíî â ôàéëå ChangeLog èç äèñòðèáóòèâà ñèñòåìû èëè çäåñü: http://diyaorg.dp.ua/oscadawiki/wakka.php?wakka=Works/ChangeLog
Êëþ÷åâûìè îñîáåííîñòÿìè äàííîé âåðñèè ÿâëÿþòñÿ:
Íîâûå è çíà÷èòåëüíî îáíîâëåííûå ìîäóëè:
Ñ öåëüþ îáåñïå÷åíèÿ àðõèâèðîâàíèÿ çíà÷åíèé â ñèñòåìå OpenSCADA, áûëà ðåêîíñòðóèðîâàíà ïîäñèñòåìà "Àðõèâû".  ðåçóëüòàòå áûëà îáåñïå÷åíà ïîääåðæêà àðõèâèðîâàíèÿ êàê ñîîáùåíèé òàê è çíà÷åíèé.
Àðõèâèðîâàíèå çíà÷åíèé ñòðîèòñÿ èç àðõèâîâ è àðõèâàòîðîâ. Àðõèâ - íåçàâèñèìûé ýëåìåíò àáñòðàêòíîãî õðàíèëèùà ñîñòîÿùåãî èç áóôåðà çíà÷åíèé è ôèçè÷åñêèõ ýëåìåíòîâ àðõèâà ðàñïðåäåë¸ííûõ ìåæäó îòâåòñâåííûìè àðõèâàòîðàìè. Àðõèâàòîð - ìîäóëüíûé ìåõàíèçì àðõèâèðîâàíèÿ â ôèçè÷åñêîå õðàíèëèùå.
Àðõèâ ìîæåò ðàáîòàòü â òð¸õ ðåæèìàõ:
Îòäåëüíî âçÿòûé àðõèâàòîð ìîæåò èìåòü ðàçëè÷íóþ ïåðèîäè÷íîñòü ãëóáèíó è ôèçè÷åñêóþ îñíîâó õðàíèëèùà, îáåñïå÷èâàÿ òåì ñàìûì ãèáêîñòü ïðè âûáîðå ìåõàíèçìà àðõèâèðîâàíèÿ.
 ðåçóëüòàòå, àðõèâ ìîæåò àðõèâèðîâàòüñÿ ìíîãèìè àðõèâàòîðàìè, ïðåäîñòàâëÿÿ ïðè ýòîì ïðîñòîé ìåõàíèçì äîñòóïà êàê ê äàííûì â öåëîì, òàê è äàííûì îòäåëüíî âçÿòîãî àðõèâàòîðà.
 ìîäóëü àðõèâèðîâàíèÿ íà ôàéëîâóþ ñèñòåìó "BaseArh" áûëà äîáàâëåíà ïîëíàÿ ïîääåðæêà ìåõàíèçìà àðõèâèðîâàíèÿ çíà÷åíèé â ôàéëû. Êðîìå ýòîãî îáåñïå÷åí ðàçóìíûé ïîäõîä â àðõèâèðîâàíèè, ïîçâîëèâøèé çíà÷èòåëüíî ñîêðàòèòü ðàçìåðû àðõèâîâ. Ïîäõîä çàêëþ÷àåòñÿ â äâîéíîé óïàêîâêå àðõèâîâ. Ïåðâàÿ óïàêîâêà ðåàëèçóåò áûñòðûé ïîñëåäîâàòåëüíûé ìåõàíèçì çàêëþ÷àþùèéñÿ â ñâîðà÷èâàíèè ñìåæíûõ òî÷åê ñ îäèíàêîâûì çíà÷åíèéì â îäíî çíà÷åíèå. Âòîðàÿ óïàêîâêà ïîäðàçóìåâàåò äîæàòèå ôàéëà àðõèâà ñòàíäàòíûì àðõèâàòîðîì gzip.
Êðîìå ýòîãî, â ìîäóëå BaseArh ðåàëèçîâàí ìåõàíèçì óïàêîâêè äàííûõ ÷åòûð¸õ ñòàíäàðòíûõ òèïîâ ñèñòåìû OpenSCADA: ëîãè÷åñêîå, öåëîå, âåùåñòâåííîå è ñòðîêîâîå.
Òàêæå, â àðõèâàòîð ñîîáùåíèé ìîäóëÿ BaseArh äîáàâëåíà ïîääåðæêà ôîðìàòà àðõèâà ïëîñêîãî òåêñòà è óïàêîâêè ôàéëîâ àðõèâîâ àðõèâàòîðîì gzip.
Ïîäñèñòåìà "Êîíòðîëëåðû" ïîëó÷èëà áîëåå àäåêâàòíîå ñòàòóñó íàçâàíèÿ "DAQ", ò.å Data acquisition - ñáîð äàííûõ.
Âî âñå çàäà÷è ïåðèîäè÷åñêîãî îïðîñà äîáàâëåíà ïîääåðæêà ðåæèìà æåñòêîãî ðåàëüíîãî âðåìåíè íà îñíîâå POSIX ôóíêöèè clock_nanosleep(). Ðåæèì æåñòêîãî ðåàëüíîãî âðåìåíè ïîääåðæèâàåòñÿ òîëüêî ïðè çàïóñêå ñèñòåìû ñ ïðèâèëåãèÿìè "root".  ïðîöåññå èñïûòàíèé óäàëîñü äîñòè÷ü óâåðåííîé ðåàêöèè íå ïðåâûøàþùåé 2ìñ íà ÎÑ ALTLinux 3.0.
Äëÿ ïðåäîñòàâëåíèÿ âîçìîæíîñòè ïîëüçîâàòåëþ ãèáêî ôîðìèðîâàòü ïàðàìåòðû íåîáõîäèìîé åìó ñòðóêòóðû äîáàâëÿÿ ïðè ýòîì ïîñëåîáðàáîòêó ïàðàìåòðîâ ôèçè÷åñêîãî óðîâíÿ è áûëà ðàçðàáîòàíà è ðåàëèçîâàíà ïîäñèñòåìà ïàðàìåòðîâ ëîãè÷åñêîãî óðîâíÿ.
Ïîäñèñòåìà ñîäåðæèò ïðàìåòðû è øàáëîíû ïàðàìåòðîâ ëîãè÷åñêîãî óðîâíÿ. Íà îñíîâå øàáëîíà ìîæíî ëåãêî ñîçäàâàòü ïàðàìåòðû ïðåäîïðåäåë¸ííîé øàáëîíîì ñòðóêòóðû è ñ ïðåäîïðåäåë¸ííîé îáðàáîòêîé.  öåëîì, ïàðàìåòð ëîãè÷åñêîãî óðîâíÿ ìîæåò ïîëíîñòüþ îòðàæàòü ïàðàìåòð ôèçè÷åñêîãî óðîâíÿ èëè ñòðîèòüñÿ íà îñíîâå øàáëîíà ñîáèðàÿ â îäèí ïàðàìåòð äàííûå ñ íåñêîëüêèõ ôèçè÷åñêèõ. Øàáëîí, â ñâîþ î÷åðåäü, ôîðìèðóåòñÿ íà îñíîâå ôóíêöèè èç îáúåêòíîé ìîäåëè ñèñòåìû OpenSCADA. À çíà÷èò, òàêîé ôóíêöèåé ìîæåò áûòü è ñîçäàíàÿ ïîëüçîâàòåëåì ôóíêöèÿ ðåàëèçàöèè íóæíûõ àëãîðèòìîâ.
Ïîñêîëüêó ïàðàìåòð êîíòðîëëåðà, ïðàêòè÷åñêè, âûñòóïàåò â ðîëè øëþçà ìåæäó ôèçè÷åñêîé ñðåäîé è SCADA ñèñòåìîé òî è óâåäîìëÿòü ïðî ñîñòîÿíèå ôèçè÷åñêîé ñðåäû âûíóæäåí èìåííî îí. Óíèôèöèðîâàííûé ìåõàíèçì óâåäîìëåíèÿ ñîñòîèò èç äâóõ ÷àñòåé.
Ïåðâàÿ ýòî óâåäîìëåíèå äîñòóïíîñòè àòðèáóòà ïàðàìåòðà. Âîçìîæíà ñèòóàöèÿ, êîãäà ÷àñòü àòðèáóòîâ ïàðàìåòðà äîñòóïíà, à ÷àñòü íåäîñòóïíà. Ïðè ýòîì â ïåðâóþ î÷åðåäü íàñ èíòåðåñóåò èìåííî ñàìî ñîñòîÿíèå äîñòóïíîñòè. Äëÿ èíäèêàöèè î íåäîñòóïíîñòè àòðèáóòà áûëî ââåäåíî ïîíÿòèå "Îøèáêà çíà÷åíèÿ (EVAL)" êîòîðîå ïðèñâàèâàåòñÿ àòðèáóòó. Äëÿ êàæäîãî òèïà çíà÷åíèÿ áûëî çàðåçåðâèðîâàíî ñîáñòâåííîå îøèáî÷íîå çíà÷åíèå: EVAL_BOOL(2), EVAL_INT(-2147483647), EVAL_REAL(-3.3E308), EVAL_STR(<EVAL>). Òàêæå, â ìåõàíèçì ïðèâåäåíèÿ áûëà äîáàâëåíà ïîääåðæêà îøèáî÷íûõ çíà÷åíèé. Õîòÿ äàííûé ìåõàíèçì è èçûìàåò èç îáðàùåíèÿ êðàéíèå çíà÷åíèÿ, îí âñ¸æå ïðåäïî÷òèòåëüíåå ïîñêîëüêó èäåíòèôèêàöèÿ äîñòóïíîñòè ñòàíîâèòñÿ ïðåäåëüíî ïðîñòîé ÷òî íåñîìíåííî âàæíî äëÿ ñðåäû ïðîãðàììèðîâàíèÿ è äðóãèõ ïîäñèñòåì.
Âòîðàÿ ÷àñòü ýòî ïðåäîñòàâëåíèå èíôîðìàöèè îá îøèáêå â äîñòóïíîì âèäå. Äëÿ ýòîé öåëè êàæäûé ïàðàìåòð íàäåë¸í àòðèáóòîì "err" ñòðîêîâîãî òèïà. Ïðèíÿò ñëåäóþùèé ìåõàíèçì ôîðìèðîâàíèÿ ýòîãî ñîîáùåíèÿ:
Òàêîé ìåõàíèçì óâåäîìëåíèÿ ïîçâîëÿåò ñîâìåñòèòü ñðàçó òðè ñïîñîáà óâåäîìëåíèÿ:
Ñ öåëüþ îáìåíà âû÷èñëèòåëüíûìè äàííûìè ìåæäó ñèñòåìîé OpenSCADA è âû÷èñëèòåëüíûìè ìîäóëÿìè áûëà äîáàâëåíà ïîääåðæêà ïàðàìåòðîâ â ìîäóëè âû÷èñëèòåëåé JavaLikeCalc è BlockCalc.
Ïàðàìåòðû âûïîëíÿþò îòðàæåíèå ñâîèõ àòðèáóòîâ íà äàííûå âû÷èñëèòåëåé.  ñëó÷àå ñ JavaLikeCalc âûïîëíÿåòñÿ îòðàæåíèå ïàðàìåòðîâ âû÷èñëèòåëüíîé ôóíêöèè êîíòðîëëåðà íà àòðèáóò ïàðàìåòðà êîíòðîëëåðà.  BlockCalc âûïîëíÿåòñÿ îòðàæåíèå ïàðàìåòðîâ áëîêîâ áëî÷íîé ñõåìû êîíòðîëëåðà íà àòðèáóòû ïàðàìåòðà ýòîãî-æå êîíòðîëëåðà. Ñóòü îòðàæåíèÿ çàêëþ÷àåòñÿ â ïåðåíàïðàâëåíèè çàïðîñà ê çíà÷åíèþ íà âíóòðåííþþ ñòðóêòóðó.
Ýòîò ìåõàíèçì ïîçâîëÿåò ñîçäàâàòü ïàðàìåòðû ñ çàêîíîìåðíîñòüþ èçìåíåíèÿ çíà÷åíèé â àòðèáóòàõ çàëîæåíûõ ïîëüçîâàòåëåì.
Ðåàëèçîâàí ïîëíîöåííûé îäíîïîòî÷íûé äîñòóï ê äðàéâåðó ôèðìû Diamond System ñ ïîääåðæêîé ñáîðà äàííûõ ïî ïðåðûâàíèþ. Ïðàêòè÷åñêè ýòî ïåðâûé ïðèìåð ïîêàäðîâîãî ñáîðà è àðõèâèðîâàíèÿ äàííûõ ðåàëèçîâàííûé â ñèñòåìå OpenSCADA. Ìåòîä ïîçâîëÿåò äîñòè÷ü ÷àñòîòû îïðîñà â 100êÃö äëÿ ïëàòû Athena ôèðìû Diamond systems.
 ïåðâóþ î÷åðåäü áûë äîáàâëåí ìåõàíèçì äîñòóïà ê íåñêîëüêèì çàïèñÿì äëÿ ôóíêöèè ñêàíèðîâàíèÿ òàáëèöû è óäàëåíèÿ íåñêîëüêèõ çàïèñåé îäíèì çàïðîñîì. Äàííûé ìåõàíèçì îñíîâàí íà êîíêðåòèçàöè ÷àñòè êëþ÷åâûõ ïîëåé ñ îáîáùåíèåì äðóãîé ÷àñòè ïîëåé. Òàê, äëÿ îáîáùåíèÿ ïî îòäåëüíîìó êëþ÷åâîìó ïîëþ íóæíî çíà÷åíèå ýòîãî ïîëÿ, ïðè çàïðîñå, èíèöèèðîâàòü ïóñòîé ñòðîêîé.
Ñ öåëüþ ðàñøèðåíèÿ API ïîäñèñòåìû "ÁÄ" áûëà äîáàâëåíà ôóíêöèÿ äîñòóïà ê ÁÄ ïîñðåäñòâîì SQL-çàïðîâ. Åñòåñòâåííî, ýòà ôóíêöèÿ ðàáîòàåò òîëüêî äëÿ ÁÄ ïîääåðæèâàþùèõ SQL-çàïðîñû.
Îäíàêî, íàèáîëåå âàæíûì èçìåíåíèåì ñòàëî ñîçäàíèå ìåõàíèçìà ïðåäâàðèòåëüíîé ðåãèñòðàöèè(îòêðûòèÿ) íóæíûõ ÁÄ è ïîñëåäóþùåé ðàáîòû ñ íèìè. Ýòîò ìåõàíèçì ïîçâîëèë ñêðûòü îñîáåííîñòè íàñòðîéêè ÁÄ (ìîãóò ñîäåðæàòü è ïàðîëè) çà å¸ èäåíòèôèêàòîðîì. Òàê-æå, ìåõàíèçì ðåãèñòðàöè ÁÄ ïîçâîëèë ðàñêðûòü èäåþ îäíîâðåìåííîãî èñïîëüçîâàíèÿ ðàçëè÷íûõ ÁÄ äëÿ ñóììàðíîé çàãðóçêè ñèñòåìû. Íàïðèìåð, ìîæíî âûäåëÿòü êîíôèãóðàöèè îòäåëüíûõ êîíòðîëëåðîâ, ñîõðàíÿòü èõ â ñîáñòâåííîé ÁÄ è ðàñïðîñòðàíÿòü íåçàâèñèìî. Ýòîò ïðèìåð âû ìîæåòå óâèäåòü â äåìîíñòðàöèîííîì ïàêåòå ñèñòåìû OpenSCADA äàííîé âåðñèè.
Ñ öåëüþ óíèôèêàöè àäðåññàöèè äèíàìè÷åñêèõ óçëîâ äëÿ íèçêîóðîâíåãî äîñòóïà è äîñòóïà ÷åðåç èíòåðôåéñ óïðàâëåíèÿ áûë ðåêîíñòðóèðîâàí èíòåðôåéñ óïðàâëåíèÿ ñèñòåìîé.  ðåçóëüòàòå ðåêîíñòðóêöè ïîÿâèëàñü âîçìîæíîñòü ïðîçðà÷íîãî äîñòóïà ïî åäèíîìó ïîëíîìó ïóòè ê ëþáîìó óçëó ñèñòåìû êàê íà íèçêîì óðîâíå òàê è ÷åðåç èíòåðôåéñ óïðàâëåíèÿ. Êîäèðîâàíèå ýëåìåíòîâ ïóòè áûëî óíèôèöèðîâàíî, ÷òî ïîçâîëèëî èñïîëüçîâàòü â ïóòè ñïåöèàëüíûå ñèìâîëû.
Òàêæå, áûë ïåðåñìîòðåí ìåõàíèçì ôîðìèðîâàíèÿ èíôîðìàöèîííîé ñòðàíèöû ñ öåëüþ ïîâûñèòü ïðîèçâîäèòåëüíîñòü è ñäåëàòü ýòîò ïðîöåññ áîëåå íàä¸æíûì.
Äëÿ áîëåå íàä¸æíîãî è áåçîïàñíîãî ïðèâåäåíèÿ òèïîâ ïðè àäðåñàöèè, áûëî âíåäðåíî äèíàìè÷åñêîå ïðèâåäåíèå òèïîâ.
Âàæíûì ïðèîáðèòåíèåì, òàêæå, ñòàëà ïîääåðæêà èçîáðàæåíèé ÿçûêîì èíòåðôåéñà óïðàâëåíèÿ è âêëþ÷åíèå áèáëèîòåêè ôîðìèðîâàíèÿ èçîáðàæåíèÿ GD â ñèñòåìó. Íà îñíîâå ýòèõ âîçìîæíîñòåé áûëè äîáàâëåíû:
Ðàíåå ñóùåñòâóþùàÿ ïîäñèñòåìà ôóíêöèè ïðåîáðàçîâàíà â îáúåêòíóþ ìîäåëü ñ ôóíêöèÿìè ïîëüçîâàòåëåé â ðîëè ìåòîäîâ îáúåêòîâ. Òåïåðü, ëþáîé îáúåêò ìîæåò ïðåäîñòàâëÿòü ïîëüçîâàòåëüñêèå ôóíêöèè äëÿ ïðîãðàììèðîâàíèÿ íà óðîâíå ñèñòåìû OpenSCADA.
Äàííûé ðåëèç ïîñòàâëÿåòñÿ ñ ÷åòûðüìÿ áèáëèîòåêàìè ôóíêöèé äëÿ îáúåêòíîé ìîäåëè ñèñòåìû OpenSCADA. Òðè èç íèõ âûïîëíåíû â äèíàìè÷åñêèõ áèáëèîòåêàõ, à îäíà ïîñòðîåíà íà îñíîâå Java-ïîäîáíîãî ÿçûêà ìîäóëÿ JavaLikeCalc. Ýòèìè áèáëèîòåêàìè ÿâëÿþòñÿ:
Èñïîëüçóÿ ýòè áèáëèîòåêè è âû÷èñëèòåëè â ìîäóëÿõ JavaLikeCalc è BlockCalc ïîëüçîâàòåëü ìîæåò ñòðîèòü ñâîè âû÷èñëèòåëüíûå àëãîðèòìû èëè ñîçäàâàòü íîâûå áèáëèîòåêè è ôóíêöèè.
 äàííûé ðåëèç âêëþ÷åíà ïåðâàÿ ðåàëèçàöèÿ ñðåäû âèçóàëèçàöèè è óïðàâëåíèÿ íà îñíîâå áèáëèîòåêè QT - "Vision". Ñðåäà âñ¸ åù¸ íàõîäèòñÿ â ðàçðàáîòêå è íå ãîòîâà ê ïðàêòè÷åñêîìó èñïîëüçîâàíèþ.  òîæå âðåìÿ, óæå ñåé÷àñ ìîæíî ñîçäàâàòü êàäðû âèçóàëèçàöèè, íàïîëíÿÿ èõ áàçîâûìè êîìïîíåíòàìè, ñ ïîñëåäóþùèì èõ èñïîëíåíèåì.
Ñ öåëüþ ïîâûøåíèÿ óïðàâëÿåìîñòè ïðîöåññîì ñáîðêè ñèñòåìû OpenSCADA, ñèñòåìà ñáîðêè áûëà äîïîëíåíà óñëîâèÿìè ïîçâîëÿþùèìè âûáîðî÷íî îòêëþ÷àòü ñáîðêó ìîäóëåé.
Íà îñíîâå ýòîãî áûëî äîáàâëåíî óñëîâèå äëÿ èñêëþ÷åíèÿ èç êîìïèëÿöèè ìîäóëÿ DiamonBoards è óñëîâèå âûáîðà ñèñòåìíîé äèðåêòîðèè 64-ðàçðÿäíûõ áèáëèîòåê íà ïëàòôîðìå x86_64.
Äëÿ ðåàëèçàöèè â ñëåäóþùåé âåðñèè ìîæíî ñôîðìóëèðîâàòü ñëåäóþùèå âàæíûå çàäà÷è:
 ïðîöåññå òåñòèðîâàíèÿ áûëà ïîäòâåðæäåíà îøèáêà îò 19.12.2005. Îøèáêà ïðîÿâëÿåòñÿ â ñÿçêå NPTL+UI/QTCfg â ìîìåíò îñòàíîâà ñèñòåìû OpenSCADA. Äðóãèõ ïðîáëåì ýòà îøèáêà íåâûçûâàåò. Íà ìîìåíò äàííîãî ðåëèçà ëîêàëèçîâàòü ïðîáëåìó íåóäàëîñü.