Ââåäåíèå
Ðåëèç îòêðûòîé SCADA(Supervisory control and data acquisition) ñèñòåìû âåðñèè 0.7.0 ÿâëÿåòñÿ ïåðâûì ñòàáèëüíûì ïðîìûøëåííûì ðåëèçîì, ÷òî ñâÿçàíî ñ çàâåðøåíèåì ñòàäèè áåòà-òåñòèðîâàíèÿ, íà÷àòîé ñ âåðñèè 0.6.4.
Îñíîâíîé öåëüþ äàííîãî ðåëèçà ÿâëÿåòñÿ ïðåäîñòàâëåíèå ñîîáùåñòâó ïîëüçîâàòåëåé è ðàçðàáîò÷èêîâ ñâîáîäíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ (ÏÎ) ïëàòôîðìû äëÿ ïîñòðîåíèÿ ðåøåíèé êîìïëåêñíûõ ñèñòåì àâòîìàòèçàöèè è äðóãèõ ñìåæíûõ ðåøåíèé, à òàêæå ïðåäîñòàâëåíèÿ êîììåð÷åñêèõ óñëóã íà îñíîâå ïðîåêòà OpenSCADA.
Äàííûé ðåëèç ÿâëÿåòñÿ ïåðâûì ñòàáèëüíûì ðåëèçîì, äëÿ êîòîðîãî ïðåäîñòàâëÿåòñÿ òåõíè÷åñêàÿ ïîääåðæêà îò ðàçðàáîò÷èêîâ è äëÿ êîòîðîãî ïëàíèðóåòñÿ âûïóñê èñïðàâëåíèé â òå÷åíèe ïðîäîëæèòåëüíîãî âðåìåíè.
Äàííûé äîêóìåíò ÿâëÿåòñÿ îáðàáîòêîé(êîìïèëÿöèåé) äîêóìåíòà "ChangeLog" ñèñòåìû OpenSCADA âåðñèè 0.7.0, êîòîðûé ïðèçâàí âêðàòöå è íàãëÿäíî îñâåòèòü íîâûå âîçìîæíîñòè ñèñòåìû OpenSCADA. Äåòàëüíî îçíàêîìèòüñÿ ñ èçìåíåíèÿìè â ñèñòåìå OpenSCADA ìîæíî â ôàéëå "ChangeLog" èç äèñòðèáóòèâà ñèñòåìû èëè çäåñü: http://wiki.oscada.org/Works/ChangeLog.
Êëþ÷åâûìè îñîáåííîñòÿìè äàííîé âåðñèè ÿâëÿþòñÿ:
- Ðåàëèçàöèÿ ïëàíîâûõ çàäà÷.
- Îïòèìèçàöèÿ, ïîâûøåíèå ñòàáèëüíîñòè, óñòîé÷èâîñòè è ïðîèçâîäèòåëüíîñòè ñèñòåìû.
- Óñîâåðøåíñòâîâàíèå è ñòàáèëèçàöèÿ ÑÂÓ.
- Ôîðìèðîâàíèå è ñòàáèëèçàöèÿ API ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ.
- Îáùåñèñòåìíûå ðàñøèðåíèÿ.
- Çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ îòäåëüíûõ ìîäóëåé.
- Ôîðìèðîâàíèå äîêóìåíòàöèè è ïåðåâîäû äîêóìåíòàöèè è èíòåðôåéñà.
- Óíèôèêàöèÿ äåìîíñòðàöèîííîé ÁÄ.
Íîâûå è îáíîâëåííûå ìîäóëè:
- Archive.FSArch - 1.3.1 -> 1.4.1, èñïðàâëåíèÿ è óëó÷øåíèÿ äëÿ ïîâûøåíèÿ ïðîèçâîäèòåëüíîñòè
- Archive.DBArch - 0.9.0 -> 0.9.2, èñïðàâëåíèÿ è íåêîòîðûå óëó÷øåíèÿ
- DB.DBF - 2.0.1 -> 2.0.2, èñïðàâëåíèÿ
- DB.MySQL - 1.6.1 -> 1.6.2, íåêîòîðûå óëó÷øåíèÿ
- DB.SQLite - 1.6.1 -> 1.6.2, óëó÷øåíèÿ
- DB.FireBird - 0.9.1 -> 0.9.5, çíà÷èòåëüíûå óëó÷øåíèÿ
- DB.PostgreSQL - 0.9.0, íîâûé ìîäóëü
- DAQ.DiamondBoards - 1.2.0 -> 1.2.1, àäàïòàöèÿ ê èçìåíåíèþ API
- DAQ.System - 1.7.0 -> 1.7.2, î÷èñòêà êîäà è àäàïòàöèÿ ê èçìåíåíèþ API
- DAQ.BlockCalc - 1.2.1 -> 1.4.0, óëó÷øåíèÿ è èñïðàâëåíèÿ
- DAQ.JavaLikeCalc - 1.5.0 -> 1.8.0, çíà÷èòåëüíûå óëó÷øåíèÿ, èñïðàâëåíèÿ è îïòèìèçàöèÿ
- DAQ.LogicLev - 1.0.1 -> 1.1.2, óëó÷øåíèÿ è èñïðàâëåíèÿ
- DAQ.SNMP - 0.4.0 -> 0.4.1, àäàïòàöèÿ ê èçìåíåíèþ API
- DAQ.Siemens - 1.2.1 -> 1.2.3, èñïðàâëåíèÿ è àäàïòàöèÿ ê èçìåíåíèþ API
- DAQ.ModBus - 1.0.1 -> 1.1.1, èñïðàâëåíèÿ è óëó÷øåíèÿ
- DAQ.DCON - 0.3.0 -> 0.3.3, èñïðàâëåíèÿ è óëó÷øåíèÿ
- DAQ.ICP_DAS - 0.5.0 -> 0.7.2, çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ
- DAQ.DAQGate - 0.8.0 -> 0.9.1, çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ
- DAQ.SoundCard - 0.6.0 -> 0.6.1, àäàïòàöèÿ ê èçìåíåíèþ API
- DAQ.OPC_UA - 0.6.0, íîâûé ìîäóëü
- Transport.Sockets - 1.4.0 -> 1.4.5, óëó÷øåíèÿ è èñïðàâëåíèÿ
- Transport.SSL - 0.8.2 -> 0.9.5, óëó÷øåíèÿ è èñïðàâëåíèÿ
- Transport.Serial - 0.5.0 -> 0.7.1, çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ
- Protocol.HTTP - 1.4.1 -> 1.5.0, çíà÷èòåëüíûå óëó÷øåíèÿ
- Protocol.SelfSystem - 0.9.1 -> 0.9.3, èñïðàâëåíèÿ è àäàïòàöèÿ ê èçìåíåíèþ API
- Protocol.UserProtocol - 0.6.0, íîâûé ìîäóëü
- Protocol.ModBus - 0.5.0 -> 0.6.1, èñïðàâëåíèÿ è óëó÷øåíèÿ
- Protocol.OPC_UA - 0.6.0, íîâûé ìîäóëü
- Special.FLibComplex1 - 1.0.4 -> 1.0.6, èñïðàâëåíèÿ è óëó÷øåíèÿ
- Special.FLibMath - 0.5.1 -> 0.5.2, àäàïòàöèÿ ê èçìåíåíèþ API
- Special.FLibSYS - 0.9.0 -> 0.9.2, èñïðàâëåíèÿ è óëó÷øåíèÿ
- Special.SystemTests - 1.3.7 -> 1.5.0, ïåðåðàáîòêà è óíèôèêàöèÿ òåñòîâ
- UI.QTStarter - 1.5.3 -> 1.6.0, óëó÷øåíèÿ
- UI.QTCfg - 1.8.1 -> 1.9.0, çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ
- UI.WebCfg - 1.5.3 -> 1.5.4, èñïðàâëåíèÿ è àäàïòàöèÿ ê èçìåíåíèþ API
- UI.WebCfgD - 0.6.2 -> 0.6.5, èñïðàâëåíèÿ
- UI.VCAEngine - 0.9.0 -> 1.0.0, çíà÷èòåëüíûå óëó÷øåíèÿ, èñïðàâëåíèÿ è îïòèìèçàöèÿ
- UI.Vision - 0.9.0 -> 1.0.0, çíà÷èòåëüíûå óëó÷øåíèÿ, èñïðàâëåíèÿ è îïòèìèçàöèÿ
- UI.WebVision - 0.7.0 -> 0.9.0, çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ
- UI.WebUser - 0.6.0, íîâûé ìîäóëü
1 Ðåàëèçàöèÿ ïëàíîâûõ çàäà÷
 ñîîòâåòñòâèè ñ ïëàíîì ðåëèçà áûëè âûïîëíåíû ñëåäóþùèå çàäà÷è:
- Ðåàëèçàöèÿ ïðèìèòèâîâ "Ñâÿçü" è "Ôóíêöèÿ" ÑÂÓ. - Ââèäó íåïðèíöèïèàëüíîñòè äëÿ ïðîìûøëåííîãî ðåëèçà è íåâîñòðåáîâàííîñòè íà äàííûé ìîìåíò ýòà çàäà÷à áûëà âûíåñåíà çà ïðåäåëû ïåðâîãî ïðîìûøëåííîãî ðåëèçà.
- Ñòàáèëèçàöèÿ è âûïóñê ïðîìûøëåííîé âåòêè OpenSCADA. - Ïðîäåëàíà áîëüøàÿ ðàáîòà ïî ñòàáèëèçàöèè è îïòèìèçàöèè ïðîìûøëåííîãî ðåëèçà, î ÷¸ì ïîäðîáíåå â ñëåäóþùåì ðàçäåëå.
- Ðåàëèçàöèÿ ìîäóëÿ ÁÄ ÎÄÁÑ, PostgresSQL è òðàíñïîðòíîãî ìîäóëÿ ÁÄ. - Ìàêñèìîì Ëûñåíêî áûëà âûïîëíåíà ðåàëèçàöèÿ ìîäóëÿ ÁÄ "PostgresSQL". Ðåàëèçàöèÿ ìîäóëÿ ÁÄ "ODBC" áûëà ïðèçíàíà íåöåëåñîîáðàçíîé, ïîñêîëüêó òåõíîëîãèÿ "ODBC" ôàêòè÷åñêè ÿâëÿåòñÿ èíòåðôåéñîì SQL-çàïðîñîâ, êîòîðûé íå ó÷èòûâàåò îñîáåííîñòåé SQL-äèàëåêòîâ ðåàëüíûõ ÁÄ, à çíà÷èò íå ìîæåò ïðÿìî, áåç îãëÿäêè íà òèï ÁÄ, èñïîëüçîâàòüñÿ â OpenSCADA ïðè ðåøåíèè å¸ îñíîâíûõ çàäà÷. Ïåðñïåêòèâà èñïîëüçîâàíèÿ "ODBC" îñòà¸òñÿ äëÿ ðåàëèçàöèè äîñòóïà ê ÁÄ, ó êîòîðûõ íåò "ðîäíîãî" API ïðÿìîãî äîñòóïà ê ÁÄ, íî åñòü äðàéâåð ODBC, èëè äëÿ ïðåäîñòàâëåíèÿ ïðîñòîãî èíòåðôåéñà SQL-çàïðîñîâ â OpenSCADA. Ðåàëèçàöèÿ òðàíñïîðòíîãî ìîäóëÿ ÁÄ áûëà âûíåñåíà çà ïðåäåëû ïåðâîãî ïðîìûøëåííîãî ðåëèçà.
- Ðåàëèçàöèÿ íîâîãî ìåõàíèçìà/ìîäóëÿ òåñòîâ ñèñòåìû OpenSCADA. - Äëÿ âûïîëíåíèÿ âíóòðèñèñòåìíûõ òåñòîâ OpenSCADA ìåõàíèçì ìîäóëÿ òåñòèðîâàíèÿ áûë ðåàëèçîâàí â âèäå ôóíêöèé ïîëüçîâàòåëüñêîãî API, ÷òî ñ îäíîé ñòîðîíû ñîõðàíèëî âîçìîæíîñòü àâòîíîìíîãî âûçîâà ñòàòè÷íûõ òåñòîâ è ñ äðóãîé ñòîðîíû ïðåäîñòàâèëî âîçìîæíîñòü âûçîâà òåñòîâ ïî îäíîìó, âðó÷íóþ, à òàêæå èç ïîëüçîâàòåëüñêèõ ñêðèïòîâ â ëþáîì ïîðÿäêå è â íóæíîì êîëè÷åñòâå îòäåëüíûõ çàäà÷.
2 Îïòèìèçàöèÿ, ïîâûøåíèå ñòàáèëüíîñòè, óñòîé÷èâîñòè è ïðîèçâîäèòåëüíîñòè ñèñòåìû.
 ïðîöåññå ðàáîò íàä äàííîé âåðñèåé, à òàêæå å¸ ïðàêòè÷åñêîé àäàïòàöèè, áûëî îáíàðóæåíî è èñïðàâëåíî â îáùåé ñëîæíîñòè îêîëî 200 îøèáîê.
Êðîìå èñïðàâëåíèÿ ìíîæåñòâà îøèáîê áûëà ïðîäåëàíà ðàáîòà ïî îïòèìèçàöèè ðàçëè÷íûõ êîìïîíåíòîâ OpenSCADA. Îñîáåííî çàìåòíîé îïòèìèçàöèè ïî-ïðåæíåìó ïîäâåðãëàñü ñðåäà âèçóàëèçàöèè è óïðàâëåíèÿ (ÑÂÓ) è å¸ âèçóàëèçàòîðû.
Ïåðå÷èñëèì íàèáîëåå ñóùåñòâåííûå îøèáêè, èñïðàâëåíèå êîòîðûõ çíà÷èòåëüíî îòðàçèëîñü íà ïîâûøåíèè ñòàáèëüíîñòè:
- Îáùåñèñòåìíûå:
- Èñïðàâëåíà íåêîððåêòíàÿ óñòàíîâêà ïîëèòèêè ðåàëüíîãî âðåìåíè äëÿ ïîòîêîâ. Íå áûë óñòàíîâëåí ôëàã ïîòîêà PTHREAD_EXPLICIT_SCHED.
- Èñïðàâëåí êîíòðîëü çà äâîéíûì çàõâàòîì ðåñóðñà â îäíîì ïîòîêå è çàõâàò ðåñóðñà ïî òàéìàóòó.
- Ìåõàíèçì ïðåäîòâðàùåíèÿ ìíîãîêðàòíîãî çàïóñêà èñïðàâëåí íà ïðåäìåò ïðîâåðêè PID çàáëîêèðîâàííîãî ïðîöåññà ïî ïðè÷èíå óäàëåíèÿ ñèñòåìîé lock-ôàéëîâ èç äèðåêòîðèè /tmp.
- Îòêëþ÷åíà óïàêîâêà äàííûõ ñòðóêòóðû êëàññîâ ñ ïîìîùüþ #pragma pack(push,1) ïî ïðè÷èíå ïîÿâëåíèÿ íåÿâíîé îøèáêè ñ çàâèñàíèåì îäíîãî èç ïîòîêîâ è áëîêèðîâàíèÿ îñòàëüíûõ â ïðîøèâêå OpenSCADA äëÿ ÏËÊ LP8x81.
- Êîä èíèöèàëèçàöèè è îáíîâëåíèÿ ìîäóëåé îáíîâëåí äëÿ èñêëþ÷åíèÿ äâîéíîé èíèöèàëèçàöèè ðàçäåëÿåìûõ áèáëèîòåê.
- Ôóíêöèÿ ñîçäàíèÿ çàäà÷è èñïðàâëåíà äëÿ ïðåäîòâðàùåíèÿ ïàäåíèÿ ïðè ñîçäàíèè àâòîìàòè÷åñêè çàêðûâàåìûõ çàäà÷ ïðè áûñòðîì çàêðûòèè.
- Èñïðàâëåíî çàâèñàíèå ôóíêöèè cron() â ñëó÷àå óêàçàíèÿ ïóñòîãî ðàñïèñàíèÿ.
- Òðàíñïîðòû:
- Serial, DAQ.DCON, DAQ.ModBus: Òðàíñïîðò ïîñëåäîâàòåëüíîãî èíòåðôåéñà îïòèìèçèðîâàí, ñäåëàí òèïîâûì è èñïðàâëåí íà ïðåäìåò íåñêîëüêèõ îøèáîê. Êëèåíòû òðàíñïîðòà àäàïòèðîâàíû äëÿ èñïîëüçîâàíèÿ íîâîãî ìåõàíèçìà.
- Sockets, SSL: Èñïðàâëåíà âîçìîæíîñòü íåïîëíîé çàïèñè ôóíêöèåé write(). Ïðè çàïèñè â ñîêåò ýòà ôóíêöèÿ ïèøåò òîëüêî ÷àñòü ðàçìåðîì â ñâîé áóôåð ( Äëÿ ïîëíîé çàïèñè áîëüøèõ ñîîáùåíèé äîáàâëåí ïîâòîð çàïèñè.
- Transport.SSL: Îêîí÷àòåëüíî èñïðàâëåíî îæèäàíèå äàííûõ îòâåòà ñåðâåðà ïóò¸ì äîæèäàíèÿ îáðàáîòêè äàííûõ â ôóíêöèè BIO_read().
- Transport.Sockets: Èñïðàâëåíà îáðàáîòêà íóëåâîãî ðåçóëüòàòà îæèäàíèÿ õâîñòà ñîîáùåíèé äëÿ èñêëþ÷åíèÿ çàâèñàíèÿ íà çàïðîñàõ â DAQ.System.HDDTemp.
- Transport.Serial: Èñïðàâëåíî èñïîëüçîâàíèå ôëàãà "CSTOPB" äëÿ óêàçàíèÿ êîëè÷åñòâà ñòîï-áèòîâ.
- Ñáîð äàííûõ:
- ModBus: Èñïðàâëåíà ïîòåðÿ ðåñóðñà âî âðåìÿ ñáîðà äàííûõ. Ïî ýòîé ïðè÷èíå èñêëþ÷åíà âîçìîæíîñòü ïðèñâîåíèÿ ñòðîêè ïðÿìî ê îáúåêòó ðåñóðñíîé ñòðîêè.
- JavaLikeCalc: Èñïðàâëåíî èñïîëüçîâàíèå ôóíêöèé äëÿ ïàðàìåòðîâ êîíòðîëëåðîâ DAQ èç IO ôóíêöèé äëÿ ïåðâîãî èñïîëüçîâàíèÿ.
- DAQ, BlockCalc, JavaLikeCalc, LogicLev, Siemens: Èñïðàâëåíî ïîëó÷åíèå îøèáî÷íûõ äàííûõ ïî ñõåìå ðåçåðâèðîâàíèÿ â íåðåçåðâèðîâàííûõ çàäà÷àõ è ïðè îòñóòñòâèè ðåçåðâíûõ ñòàíöèé.
- Protocol.HTTP, UI.WebCfg, UI.WebCfgD, UI.WebUser, UI.Vision: Çíà÷åíèå HTTP-ïàðàìåòðà "Content-Type" èñïðàâëåíî äëÿ ýëåìåíòà "Charset".
- UI.VCAEngine: Èñïðàâëåíî ïàäåíèå äâèæêà âèçóàëèçàöèè ïðè èçìåíåíèè ìóòèðîâàííûõ àòðèáóòîâ, êîòîðûå ìíîãîêðàòíî óíàñëåäîâàíû.
Îïòèìèçàöèÿ è ïîâûøåíèå ïðîèçâîäèòåëüíîñòè:
- SYS.XML: Ôóíêöèÿ ïðåîáðàçîâàíèÿ äåðåâà XML â ñòðîêó îïòèìèçèðîâàíà ïî âðåìåíè.
- SYS.Archive: Äîáàâëåí ìåõàíèçì àäàïòèâíîé ãåíåðàöèè çàïðîñîâ ê àðõèâàì ðàçëè÷íîãî êà÷åñòâà â ñëó÷àå îáùåãî çàïðîñà. Ïðåäîòâðàùàåò ïðîäîëæèòåëüíóþ îáðàáîòêó â ñëó÷àå çàïðîñà áîëüøèõ èíòåðâàëîâ âðåìåíè è íàëè÷èÿ ìåíåå êà÷åñòâåííûõ àðõèâîâ.
- DAQ, DAQ.DAQGate: Âûïîëíåíà îïòèìèçàöèÿ çàïðîñîâ ìåæäó ðåçåðâíûìè ñòàíöèÿìè ïî ðàçìåðó çàïðîñîâ è ïî âðåìåíè. Çàïðàøèâàþòñÿ òîëüêî àðõèâíûå àòðèáóòû ïàðàìåòðîâ DAQ è àòðèáóòû, çàïëàíèðîâàííûå ê çàïðîñó.
- Archive.FSArch: Äîáàâëåíî ñîçäàíèå èíôîðìàöèîííûõ ôàéëîâ óïàêîâàííûõ àðõèâîâ áåç õðàíåíèÿ ýòèõ äàííûõ â ÁÄ. Ýòà ôóíêöèÿ ïîçâîëÿåò îáåñïå÷èòü áûñòðîå ïîäêëþ÷åíèå áîëüøèõ àðõèâîâ ê äðóãèì ñòàíöèÿì.
- UI.Vision:  ïðèìèòèâå "ElFigure" äëÿ îòðèñîâêè âìåñòî QImage èñïîëüçîâàí QPixmap, ÷òî çíà÷èòåëüíî ïîâûñèëî ïðîèçâîäèòåëüíîñòü.
- UI.Vision: Äëÿ ïîñòðîåíèÿ èçîáðàæåíèÿ ïðèìèòèâà "Diagram" èñïîëüçîâàí QImage âìåñòî QPicture, ÷òî çíà÷èòåëüíî ïîâûñèëî ïðîèçâîäèòåëüíîñòü.
- TFunction, DAQ.JavaLikeCalc: Äîáàâëåí âëîæåííûé êîíòåêñò ôóíêöèé ñ öåëüþ ïîâûøåíèÿ ïðîèçâîäèòåëüíîñòè âíåøíèõ âûçîâîâ.
Îïòèìèçàöèè èñïîëüçîâàíèÿ ïàìÿòè:
- SYS: Ñèñòåìà ïåðåêëþ÷åíà íà èñïîëüçîâàíèå òðàäèöèîííîãî "map" âìåñòî "hash_map" âî âñåõ îáúåêòàõ ñ öåëüþ óìåíüøåíèÿ ïîòðåáëåíèÿ ïàìÿòè.
- UI.VCAEngine: Îáúåêò àòðèáóòà "Attr" îòîðâàí îò îáúåêòà "TCntrNode" ñ öåëüþ óìåíüøåíèÿ ïîòðåáëåíèÿ ïàìÿòè äî 25%.
3 Óñîâåðøåíñòâîâàíèå è ñòàáèëèçàöèÿ ÑÂÓ.
Çàìåòíûå èçìåíåíèÿ áûëè âûïîëíåíû â ðàìêàõ ñðåäû âèçóàëèçàöèè è óïðàâëåíèÿ (ÑÂÓ), à èìåííî â ìîäóëÿõ äâèæêà ÑÂÓ UI.VCAEngine, âèçóàëèçàòîðîâ UI.Vision è UI.WebVision. Âíåñ¸ííûå èçìåíåíèÿ áûëè íàïðàâëåííû íà ñòàáèëèçàöèþ, îïòèìèçàöèþ ïîòðåáëåíèÿ ïàìÿòè è óëó÷øåíèå ïîëüçîâàòåëüñêèõ ñâîéñòâ ÑÂÓ.
Óëó÷øåíèÿ ÑÂÓ:
- Äîáàâëåíà ïîëíàÿ ïîääåðæêà âåðòèêàëüíîãî ìàñøòàáèðîâàíèÿ äèàãðàì.
- Äîáàâëåíà ïîääåðæêà àëüôà-êàíàëà â àòðèáóòû öâåòà âñåõ ïðèìèòèâîâ.
- UI.VCAEngine:
- Âêëþ÷åíî è ñäåëàíî áåçîïàñíûì íàñëåäîâàíèå îïèñàíèÿ ìóòèðóþùèõ àòðèáóòîâ.
- Äîáàâëåíû íîâûå ôóíêöèè ïîëüçîâàòåëüñêîãî API äëÿ ñåàíñîâ wdgAdd(), wdgDel(), link(), linkSet(). Äîáàâëåíèå ýòèõ ôóíêöèé ïîçâîëèëî ðåàëèçîâàòü êîíöåïöèþ ïîëíîñòüþ äèíàìè÷åñêîãî ôîðìèðîâàíèÿ èíòåðôåéñà ïîëüçîâàòåëÿ.
- Ñâîéñòâà ïðàâ äîñòóïà ê âèäæåòó ðåàëèçîâàíû àòðèáóòàìè "owner" è "perm" äëÿ ïîâûøåíèÿ ãèáêîñòè óïðàâëåíèÿ.
- Äîáàâëåí ìåõàíèçì àâòîìàòè÷åñêîãî ñîçäàíèÿ è çàïóñêà ñåàíñà ïðè çàãðóçêå.
- UI.Vision:
-  èíñïåêòîð àòðèáóòîâ äîáàâëåíà âîçìîæíîñòü ãðóïïîâîé óñòàíîâêè îäíîèì¸ííûõ àòðèáóòîâ ðàçíûõ âèäæåòîâ. Óñòàíîâêà ïðîèçâîäèòñÿ â ãðóïïîâîì êîíòåéíåðå ñâîéñòâ èíñïåêòîðà àòðèáóòîâ, êîòîðûé ïîÿâëÿåòñÿ ïðè âûäåëåíèè îäíîâðåìåííî íåñêîëüêèõ âèäæåòîâ.
-  ïðèìèòèâå "ElFigure" äëÿ îòðèñîâêè âìåñòî QImage èñïîëüçîâàí QPixmap, ÷òî çíà÷èòåëüíî ïîâûñèëî ïðîèçâîäèòåëüíîñòü.
- Äëÿ ïîñòðîåíèÿ èçîáðàæåíèÿ ïðèìèòèâà "Diagram" èñïîëüçîâàí QImage âìåñòî QPicture, ÷òî çíà÷èòåëüíî ïîâûñèëî ïðîèçâîäèòåëüíîñòü.
- Äîáàâëåíà ïîääåðæêà ñâîéñòâ ïîëüçîâàòåëüñêîãî èíòåðôåéñà. Äîáàâëåíî óïðàâëåíèå è ñîõðàíåíèå ðàçìåðà èêîíîê ïàíåëåé èíñòðóìåíòîâ.
- Äîáàâëåíà âîçìîæíîñòü êîïèðîâàíèÿ çíà÷åíèé àòðèáóòîâ è ñâÿçåé ïîñðåäñòâîì êîíòåêñòíîãî ìåíþ èíñïåêòîðîâ àòðèáóòîâ è ñâÿçåé.
- Äîáàâëåíà ôóíêöèÿ ïîèñêà ïî ýëåìåíòó "TextEdit".
- UI.WebVision:
- Äîáàâëåíà ïîääåðæêà ïîâîðîòà ïðèìèòèâà "Text".
- Äîáàâëåíà ãåíåðàöèÿ îñíîâíûõ ñîáûòèé ìûøè. Äëÿ îáðàáîòêè íåêîòîðûõ ñîáûòèé äîáàâëåí ñòåê ôóíêöèé îáðàáîò÷èêîâ.
- Äëÿ ïîëüçîâàòåëÿ-îòïðàâèòåëÿ àäàïòèðîâàí äîñòóï ê åãî ñåàíñó è óïðàâëåíèå.
4 Ôîðìèðîâàíèå è ñòàáèëèçàöèÿ API ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ.
 çíà÷èòåëüíîé ñòåïåíè áûëî ïðîèçâåäåíî ôîðìèðîâàíèå íîâîãî îáúåêòíîãî API ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ, êîòîðîå ïðåäóñìàòðèâàåò èíòåãðàöèþ ïîëüçîâàòåëüñêèõ ôóíêöèé â äåðåâî îáúåêòîâ ñèñòåìû OpenSCADA. Êðîìå ýòîãî, áûë âíåñåí ðÿä èçìåíåíèé â ñóùåñòâóþùèå áèáëèîòåêè ôóíêöèé ïîëüçîâàòåëüñêîãî API.
 ÷àñòíîñòè áûëè îñóùåñòâëåíû ñëåäóþùèå èçìåíåíèÿ:
- SYS:
- SYS, Special.FLibSYS: Îáúåêò ïîëüçîâàòåëüñêîãî API XMLNodeObj ïåðåìåù¸í â ÿäðî OpenSCADA (ôàéëû tvariant.h, tvariant.cpp).
- Ïîëüçîâàòåëüñêîå ñèñòåìíîå API OpenSCADA îñíîâàííîå íà îáúåêòå TCntrNodeObj ðàñøèðåíî äëÿ êîíòðîëÿ ïðàâ äîñòóïà ïîëüçîâàòåëÿ.
- Îáúåêò TAreaObj ïåðåèìåíîâàí â TArrayObj.
- Ñâîéñòâà îáúåêòîâ, âûçîâû ôóíêöèé è îáðàáîòêà èñêëþ÷åíèé ïîëüçîâàòåëüñêîãî API óíèôèöèðîâàíî.
- SYS.TVarObj: Äîáàâëåíà ôóíêöèÿ propList() äëÿ âîçìîæíîñòè ñêàíèðîâàíèÿ àòðèáóòîâ.
- DAQ.JavaLikeCalc:
- Ôóíêöèè ïîëüçîâàòåëüñêîãî API äîáàâëåíû: insert(), replace(), toReal(), toInt(), parse(), parsePath() è path2sep() â îáúåêò çíà÷åíèÿ ñòðîêîâîãî òèïà.
- Äîáàâëåíà ôóíêöèÿ isEVal() ê áàçîâûì òèïàì, äëÿ îáíàðóæåíèÿ EVAL-çíà÷åíèé.
- Special.FLibComplex1: Ôóíêöèÿ ÏÈÄ ðàñøèðåíà íîâûìè ïàðàìåòðàìè: Kd, Tzd è followSp. Óäàë¸í ïàðàìåòð Tf.
- Îáúåêòíîå API ïîëüçîâàòåëüñêîãî ïðîãðàììèðîâàíèÿ:
- SYS: Ôóíêöèè ïîëüçîâàòåëüñêîãî API: system(), message(), XMLNode(), cntrReq(), time(), localtime(), strftime(), strptime(), cron(), messDebug(), messInfo(), messNote(), messWarning(), messErr(), messCrit(), messAlert(), messEmerg() è strFromCharCode() äîáàâëåíû â êîðíåâîé îáúåêò ÿäðà OpenSCADA.
- DB: Ôóíêöèÿ ïîëüçîâàòåëüñêîãî API SQLReq() äîáàâëåíà â îáúåêò ÁÄ.
- Transport: Ôóíêöèÿ ïîëüçîâàòåëüñêîãî API messIO() äîáàâëåíà äëÿ îáúåêòà èñõîäÿùåãî òðàíñïîðòà.
- UI.VCAEngine:
- Ôóíêöèè ïîëüçîâàòåëüñêîãî API: user(), alrmSndPlay() è alrmQuittance() äîáàâëåíû â îáúåêò ñåàíñà ïðîåêòà.
- Â îáúåêò "Widget" äîáàâëåíû ôóíêöèè ïîëüçîâàòåëüñêîãî API: ownerSess(), ownerPage(), ownerWdg(), attrPresent(), attr(), attrSet(), wdgAdd(), wdgDel(), link() è linkSet().
- Äîáàâëåí ñïåöèàëüíûé àòðèáóò "this" âî âñå ñêðèïòû ÑÂÓ äëÿ äîñòóïà ê îáúåêòó âèäæåòà è ïîñëåäóþùåãî âûçîâà åãî ôóíêöèé ïîëüçîâàòåëüñêîãî API.
- Archives: Ôóíêöèÿ ïîëüçîâàòåëüñêîãî API messGet() äîáàâëåíà äëÿ îáúåêòà ïîäñèñòåìû "Àðõèâû".
- DAQ.Value: Äîáàâëåíû ôóíêöèè ïîëüçîâàòåëüñêîãî API get() è set() äëÿ àòðèáóòîâ.
5 Îáùåñèñòåìíûå ðàñøèðåíèÿ.
 îáùåñèñòåìíîå API ñèñòåìû OpenSCADA áûëè âíåñåíû çíà÷èòåëüíûå èçìåíåíèÿ è ðàñøèðåíèÿ ñ öåëüþ ïîâûøåíèÿ ôóíêöèîíàëüíîñòè è îáùåé ñòàáèëèçàöèè:
- SYS:
- Äîáàâëåí ìåõàíèçì ïðåäîòâðàùåíèÿ ïîâòîðíîãî çàïóñêà â ñêðèïòû: demo-start è user-start.
- Äîáàâëåíû ãëîáàëüíûå ôóíêöèè äëÿ ñîçäàíèÿ (ðåãèñòðàöèè) taskCreate() è çàêðûòèÿ taskDestroy() ïîòîêîâ. Âñå êîìïîíåíòû OpenSCADA èñïîëüçóþò íîâîå API.
- Äîáàâëåíû ôàéëû debian/* äëÿ ïîääåðæêè ïîñòðîåíèÿ Debian ïàêåòîâ.
- Äîáàâëåíà ôóíêöèÿ strParse() äëÿ ðàñøèðåíèÿ ôóíêöèè strSepParse() íà ïðåäìåò ïîääåðæêè ìíîãîñèìâîëüíûõ ðàçäåëèòåëåé è îáúåäèíåíèÿ îäíîñèìâîëüíûõ.
- Äîáàâëåíà èíôðàñòðóêòóðà ñ÷¸ò÷èêîâ îòëàäêè.
- Äîáàâëåíà âîçìîæíîñòü íàçíà÷åíèÿ ïðîöåññîðîâ äëÿ ïîòîêîâ OpenSCADA íà ìíîãî-ïðîöåññîðíûõ ñèñòåìàõ è ìíîãî-ÿäåðíûõ ïðîöåññîðàõ.
- Äîáàâëåí ìåíåäæåð çàäà÷. Äîáàâëåíî ïîëå èäåíòèôèêàòîðà ïðîöåññà ïîòîêà â ìåíåäæåð çàäà÷.
- Äëÿ ðåàëèçàöèè ñïåöèôè÷åñêèõ ôóíêöèé äîáàâëåíà îá¸ðòêà íàä çàäà÷àìè OpenSCADA. Äîáàâëåíà îáðàáîòêà èñêëþ÷åíèé "TError" äëÿ çàäà÷ âíóòðè îá¸ðòêè.
- Êîä ÿäðà ñèñòåìû OpenSCADA ïîìåù¸í â îáëàñòü èì¸í "OSCADA". Âåðñèÿ áèáëèîòåêè ÿäðà OpenSCADA ïîâûøåíà äî 1:0:0.
- Óíèôèöèðîâàíû ïðàâà äîñòóïà êî âñåì ýëåìåíòàì èíòåðôåéñà óïðàâëåíèÿ.
- Äîáàâëåíà ïðîâåðêà íà âåðñèþ áîëåå 2.0 óòèëèòû ñáîðêè libtool. Âêëþ÷åíà ñáîðêà òîëüêî ðàçäåëÿåìûõ áèáëèîòåê äëÿ ìîäóëåé.
- Èäåíòèôèêàòîð ìîäóëÿ ïîìåù¸í â êëàññ êîíñòðóêòîðà äëÿ óïðîùåíèÿ èíèöèàëèçàöèè ïåðåâîäà òåêñòîâûõ ñîîáùåíèé ìîäóëåé.
- Äëÿ âñåõ ïåðåâîäîâ èñïîëüçîâàíî ïàðàìåòðû óòèëèòû xgettext "-C --no-location --no-wrap -k_". Èñïîëüçîâàíî äëÿ î÷èñòêè îò ìóñîðà ôàéëîâ ïåðåâîäîâ.
- Âåðñèè API âñåõ ìîäóëüíûõ ïîäñèñòåì óñòàíîâëåíî â 5.
- SYS.Function, DAQ.BlockCalc, DAQ.LogicLev, UI.VCAEngine: Äîáàâëåí ìåõàíèçì êîíòðîëÿ çà èçìåíåíèÿìè ïàðàìåòðîâ êîíòðîëëåðîâ ïîäñèñòåìû "Ñáîð äàííûõ".
- DB:
- Äîáàâëåíî àâòîìàòè÷åñêîå îòêðûòèå äîñòóïíûõ òàáëèö ïî çàïðîñó ê íèì.
- Äîáàâëåíî óïðàâëåíèå òðàíçàêöèÿìè â ôóíêöèþ sqlReq(), à òàêæå äîáàâëåíà ôóíêöèÿ transCloseCheck().
- TFunction, DAQ.JavaLikeCalc: Äîáàâëåí âëîæåííûé êîíòåêñò ôóíêöèé ñ öåëüþ ïîâûøåíèÿ ïðîèçâîäèòåëüíîñòè âíåøíèõ âûçîâîâ.
- DAQ: Êîä îøèáêè äîáàâëåí â ñòàòóñ êîíòðîëëåðà, ÷òî ïîçâîëÿåò èäåíòèôèöèðîâàòü ñîñòîÿíèå è îòîáðàæàòü åãî.
- Protocol, Transport, DAQ.ModBus, Protocol.UserProtocol: Äîáàâëåíà ôóíêöèÿ itemListIn() äëÿ âûáîðà ýëåìåíòîâ ïðîòîêîëà. Äîáàâëåí âûáîð ýëåìåíòîâ ïðîòîêîëà ïîñðåäñòâîì ôóíêöèè TProtocol::itemListIn().
6 Çíà÷èòåëüíûå óëó÷øåíèÿ è èñïðàâëåíèÿ îòäåëüíûõ ìîäóëåé.
 ïðîöåññå ðàáîòû íàä äàííûì ïðîìûøëåííûì ðåëèçîì çíà÷èòåëüíûõ èçìåíåíèé, óëó÷øåíèé è ñòàáèëèçàöèè ïðåòåðïåëè îòäåëüíûå ìîäóëè OpenSCADA:
- DB.MySQL:
- Äîáàâëåíà ïîääåðæêà íåîãðàíè÷åííûõ çíà÷åíèé òèïîâ äàííûõ "Âåùåñòâåííîå" è "Öåëîå".
- Äîáàâëåíî ïðåîáðàçîâàíèå çíà÷åíèÿ EVAL äëÿ âåùåñòâåííîãî òèïà.
- DB.SQLite: Óëó÷øåí ìåõàíèçì òðàíçàêöèé äëÿ ïîääåðæêè âíóòðèïîëüçîâàòåëüñêèõ SQL-çàïðîñîâ è çàêðûòèÿ ñòàðûõ òðàíçàêöèé.
- DB.FireBird: Äîáàâëåíà ïîääåðæêà ìíîãîÿçûêîâîñòè òåêñòîâûõ ïåðåìåííûõ. Óíèôèöèðîâàíà ïîääåðæêà òðàíçàêöèé.
- DAQ:
- DAQGate: Äîáàâëåíà ïîääåðæêà âîçìîæíîñòè çàïðîñà îòäåëüíûõ àòðèáóòîâ. Èñïîëüçîâàíî äëÿ çàïðîñà àðõèâèðóåìûõ è ÷àñòî çàïðàøèâàåìûõ àòðèáóòîâ. Âñå îñòàëüíûå àòðèáóòû çàïðàøèâàþòñÿ ñ ïåðèîäîì ñèíõðîíèçàöèè ïóò¸ì ïîëíîãî çàïðîñà. Èñïîëüçóåòñÿ äëÿ óìåíüøåíèÿ íàãðóçêè è âðåìåíè ïðè îáìåíå DAQGate ñ óäàë¸ííîé OpenSCADA ñòàíöèåé.
- ICP_DAS: Äîáàâëåí ñòàòóñ DIP-ïåðåêëþ÷àòåëÿ äëÿ ÏËÊ LP-8781. Ôóíêöèè îòïðàâêè ñîîáùåíèé ïî ïîñëåäîâàòåëüíîìó èíòåðôåéñó ïåðåìåùåíû â îáùóþ ôóíêöèþ serReq() è âñå çàïðîñû èñïîëüçóþò å¸.
- ModBus: Äîáàâëåíû ñóôôèêñû "i2,i4,f,b0" ê ðåãèñòðàì (R è RI) äëÿ ãèáêîãî äîñòóïà ïîñðåäñòâîì ðàçëè÷íûõ òèïîâ äàííûõ.
- JavaLikeCalc:
- Äîáàâëåíà ïîääåðæêà îáçîðíîãî öèêëà äëÿ ñêàíèðîâàíèÿ ñâîéñòâ îáúåêòà "for( <i> in <obj> ) <code>;".
- Ñâîéñòâà îáúåêòîâ, âûçîâû ôóíêöèé è îáðàáîòêà èñêëþ÷åíèé ïîëüçîâàòåëüñêîãî API óíèôèöèðîâàíî.
- Transport:
- Serial:
- Äîáàâëåíà âîçìîæíîñòü âûáîðà òèïà óïðàâëåíèÿ ïîòîêîì. Ïîääåðæèâàåòñÿ àïïàðàòíîå (CRTSCTS) è ïðîãðàììíîå (IXON IXOFF) óïðàâëåíèå ïîòîêîì.
- Äîáàâëåíà ïîääåðæêà ðåæèìà ìîäåìà äëÿ âñåõ âõîäíûõ è âûõîäíûõ òðàíñïîðòîâ.
- SSL:
- Äîáàâëåíà ïîääåðæêà KeepAlive ëèìèòîâ. Äîáàâëåíà ïîääåðæêà ïåðåïîäêëþ÷åíèÿ ïîñëå ïîòåðè ñîåäèíåíèÿ è äëÿ ïðåäîòâðàùåíèÿ ïîòåðè ñîîáùåíèé.
- Äîáàâëåíî ïîëó÷åíèå àäðåñà îòïðàâèòåëÿ.
- SSL, Sockets: Â èñõîäÿùèé òðàíñïîðò äîáàâëåíû òàéìèíãè äëÿ îòäåëüíîãî óïðàâëåíèÿ âðåìåíåì ñîåäèíåíèÿ è âðåìåíåì îæèäàíèÿ ïîñëåäóþùèõ îòâåòîâ.
- Protocol.HTTP:
- Äîáàâëåíà ôóíêöèÿ èñõîäÿùåãî ïðîòîêîëà.
- Äîáàâëåíà ïîääåðæêà àâòîìàòè÷åñêîãî âõîäà.
- Archive.FSArch: Äîáàâëåíî ñîçäàíèå èíôîðìàöèîííûõ ôàéëîâ óïàêîâàííûõ àðõèâîâ áåç õðàíåíèÿ ýòèõ äàííûõ â ÁÄ. Ýòà ôóíêöèÿ ïîçâîëÿåò îáåñïå÷èòü áûñòðîå ïîäêëþ÷åíèå áîëüøèõ àðõèâîâ ê äðóãèì ñòàíöèÿì.
- UI.QTCfg:
- Äîáàâëåíà ïîäñòðîéêà ñòðîê äëÿ òàáëèö, ïîñëå äîáàâëåíèÿ íîâûõ ñòðîê. Äîáàâëåíà ïîääåðæêà êîïèðîâàíèÿ ñîäåðæèìîãî òàáëèöû â áóôåð îáìåíà.
- Äîáàâëåíà ôóíêöèÿ ïîèñêà ïî ýëåìåíòó "TextEdit".
- Äîáàâëåíà âîçìîæíîñòü êîïèðîâàíèÿ ñïèñêà âûáðàííûõ óçëîâ.
7 Ôîðìèðîâàíèå äîêóìåíòàöèè è ïåðåâîäû äîêóìåíòàöèè è èíòåðôåéñà.
Ïîñêîëüêó äàííûé ðåëèç ïîçèöèîíèðóåòñÿ êàê ïðîìûøëåííûé ðåëèç ñ ïðîäîëæèòåëüíûì ïåðèîäîì ïîääåðæêè, òî ê åãî âûõîäó áûëî çàêîí÷åíî íàïèñàíèå íà Ðóññêîì ÿçûêå, à òàêæå ïåðåâîä íà Àíãëèéñêèé ÿçûê âñåé îñíîâíîé äîêóìåíòàöèè. Êðîìå òîãî, çàâåðø¸í ïåðåâîä èíòåðôåéñà ïðîãðàììû íà Àíãëèéñêèé, Ðóññêèé, Óêðàèíñêèé è Íåìåöêèé ÿçûêè:
- Äîáàâëåí ïåðåâîä README íà Óêðàèíñêèé.
- Äîáàâëåí ïåðåâîä äîêóìåíòà DAQ è îáîáùàþùåãî äîêóìåíòà íà Àíãëèéñêèé.
- Äîáàâëåí äîêóìåíò "Áûñòðûé ñòàðò".
- Âûïîëíåí ïåðåâîä äîêóìåíòà "Áûñòðûé ñòàðò" íà Àíãëèéñêèé ÿçûê.
- Îáùèé äîêóìåíò "OpenSCADA" íà Àíãëèéñêîì îáíîâëåí äëÿ âêëþ÷åíèÿ ÷àñòåé "Áûñòðûé ñòàðò" è DAQ.OPC_UA.
- Îáíîâëåí ïåðåâîä èíòåðôåéñà ÿäðà ñèñòåìû íà Ðóññêèé, Óêðàèíñêèé è Íåìåöêèé ÿçûêè.
- Äëÿ âñåõ ïåðåâîäîâ èñïîëüçîâàíî ïàðàìåòðû óòèëèòû xgettext "-C --no-location --no-wrap -k_". Èñïîëüçîâàíî äëÿ î÷èñòêè îò ìóñîðà ôàéëîâ ïåðåâîäîâ.
8 Óíèôèêàöèÿ äåìîíñòðàöèîííîé ÁÄ.
 ïðîöåññå ïîäãîòîâêè ïðîìûøëåííîãî ðåëèçà çíà÷èòåëüíîå âíèìàíèå áûëî óäåëåíî óëó÷øåíèþ äåìîíñòðàöèîííîé ÁÄ êàê ÿðêîé äåìîíñòðàöèè ôóíêöèé ñèñòåìû OpenSCADA:
- Çíà÷èòåëüíîå îáíîâëåíèå äëÿ ïîääåðæêè íîâûõ âîçìîæíîñòåé è âêëþ÷åíèÿ íîâûõ óëó÷øåíèé èç ñèñòåìû àâòîìàòèçàöèè øàðîâûõ ìåëüíèö.
- Äîáàâëåíà ïîääåðæêà ïîëüçîâàòåëüñêîãî âûçîâà äåìîíñòðàöèîííîé ÁÄ â ïîëíîöåííîì ðåæèìå íà çàïèñü.
- Äîáàâëåíî ìàñøòàáèðîâàíèå ñóùåñòâóþùèõ ýëåìåíòîâ â ñëó÷àå îòñóòñòâèÿ ñòðîê è êîëîíîê äëÿ îáçîðíîãî êàäðà è ñâîäíîé òàáëèöû.
- Îáíîâëåíî äëÿ âêëþ÷åíèÿ íîâûõ ìîäåëåé àïïàðàòîâ òåõíîëîãè÷åñêèõ ïðîöåññîâ è àäàïòàöèè âñåõ îñòàëüíûõ ìîäåëåé.
- Îáíîâëåíî äëÿ:
- Äîáàâëåíèÿ îáúåêòîâ ñèãíàëèçàöèè êîìïðåññîðîâ: KM201, KM301, KM202 è KM302.
- Ïîääåðæêè ðó÷íîãî ââîäà ïåðåìåííûõ ñ ïàíåëè óïðàâëåíèÿ.
- Îáíîâëåíèÿ ïåðåâîäà.
- Èñïðàâëåíèÿ íåñêîëüêèõ îøèáîê.
- Ñêðèïò ãëàâíîé ñòðàíèöû ïðîåêòà ïåðåïèñàí äëÿ èñïîëüçîâàíèÿ íîâûõ ôóíêöèé ïîëüçîâàòåëüñêîãî API.
- Èñïîëüçîâàí íîâûé ìåõàíèçì äîñòóïà ê ýëåìåíòàì ïîëüçîâàòåëüñêîãî èíòåðôåéñà. Ïðåäîñòàâëåí ðåàëüíûé äîñòóï íà ÷òåíèå äëÿ ïðîñòîãî ïîëüçîâàòåëÿ ("user").
9 Ðåøåíèÿ, ïîñòðîåííûå íà îñíîâå OpenSCADA
Íà îñíîâå ïðîåêòà OpenSCADA ïîñòðîåí ôàêòè÷åñêè âåñü ñïåêòð ðåøåíèé àâòîìàòèçàöèè, êîòîðûå ÿðêî äåìîíñòðèðóþò âîçìîæíîñòè, à òàêæå ÿâëÿþòñÿ ñèãíàëîì ãîòîâíîñòè ñèñòåìû äëÿ øèðîêîãî ïðîìûøëåííîãî ïðèìåíåíèÿ.
 öåëîì, íà îñíîâå OpenSCADA àâòîðàìè ïðîåêòà ðåøàëèñü çàäà÷è: ïîëíîãî äèíàìè÷åñêîãî ìîäåëèðîâàíèÿ òåõíîëîãè÷åñêèõ ïðîöåññîâ (ÒÏ), óïðàâëåíèå ÒÏ íà óðîâíå ïðîãðàììèðóåìîãî ëîãè÷åñêîãî êîíòðîëëåðà (ÏËÊ) è ôîðìèðîâàíèå ÷åëîâåêî-ìàøèííîãî èíòåðôåéñà ÒÏ.
Ìîäåëèðîâàíèå ÒÏ ïðåäñòàâëåíî ðåøåíèÿìè: «Áèáëèîòåêà ìîäåëåé àïïàðàòîâ òåõíîëîãè÷åñêèõ ïðîöåññîâ», «Äèíàìè÷åñêàÿ ìîäåëü ðåàëüíîãî âðåìåíè Àíàñòàñèåâñêîé ÃËÊÑ» è «Äèíàìè÷åñêàÿ ìîäåëü ïàðîâîãî êîòëà ¹9 ÄÌÊ». Ïðè÷¸ì ðåøåíèå «Äèíàìè÷åñêàÿ ìîäåëü ðåàëüíîãî âðåìåíè Àíàñòàñèåâñêîé ÃËÊÑ» áûëî ïîëîæåíî â îñíîâó äåìîíñòðàöèîííîé ÁÄ ïðîåêòà è ðàñïðîñòðàíÿåòñÿ ñî âñåìè äèñòðèáóòèâàìè OpenSCADA.
Ñôåðà óïðàâëåíèÿ ÒÏ íà óðîâíå ïðîãðàììèðóåìîãî ëîãè÷åñêîãî êîíòðîëëåðà (ÏËÊ) ïðåäñòàâëåíà ðåøåíèÿìè: «OpenSCADA â ïðîãðàììèðóåìîì ëîãè÷åñêîì êîíòðîëëåðå (ÏËÊ)» è «Ñðåäà èñïîëíåíèÿ ÏËÊ LP-8x81 ôèðìû ICP DAS íà îñíîâå OpenSCADA».
Ñôåðà ôîðìèðîâàíèå ÷åëîâåêî-ìàøèííîãî èíòåðôåéñà ÒÏ ïðåäñòàâëåíà ðåøåíèÿìè: «Áèáëèîòåêè ãðàôè÷åñêèõ ýëåìåíòîâ ïîëüçîâàòåëüñêèõ èíòåðôåéñîâ» è «ÀÑÓ ÒÏ øàðîâûõ ìåëüíèö ØÁÌ 287\410 êîòëîàãðåãàòà ÁÊÇ 160–100 ÏÒ».
Íóæíî òàêæå îòìåòèòü íàëè÷èå ðÿäà ðåøåíèé, íå âîøåäøèõ â âûøåïðèâåäåííûé ïåðå÷åíü, è âûïîëíåííûõ ðàçðàáîò÷èêàìè ñèñòåìû äëÿ òðåòüèõ ëèö èëè íåïîñðåäñòâåííî å¸ ïîëüçîâàòåëÿìè.
Çàêëþ÷åíèå
Ñèñòåìà OpenSCADA ãîòîâà äëÿ ïðàêòè÷åñêîãî èñïîëüçîâàíèÿ â ñëîæíûõ ïðîìûøëåííûõ óñëîâèÿõ è âûïîëíåíèÿ øèðîêîãî ñïåêòðà çàäà÷ àâòîìàòè÷åñêîãî óïðàâëåíèÿ òåõíîëîãè÷åñêèìè ïðîöåññàìè.
Ñ öåëüþ ïðåäîñòàâëåíèÿ êà÷åñòâåííîãî ñåðâèñà íà îñíîâå ðåøåíèé OpenSCADA, à òàêæå ðàçâèòèÿ â íàïðàâëåíèè ïîääåðæêè ñïåöèàëèçèðîâàííîãî îáîðóäîâàíèÿ, ïðîòîêîëîâ è èíòåðôåéñîâ; ðàçðàáîò÷èêàìè ïëàíèðóåòñÿ è àêòèâíî âåä¸òñÿ ðàáîòà ïî ôîðìèðîâàíèþ ïîëèòèêè ïðåäîñòàâëåíèÿ óñëóã íà êîììåð÷åñêîé îñíîâå.  ÷èñëî êîììåð÷åñêèõ óñëóã áóäåò âõîäèòü: òåõíè÷åñêàÿ ïîääåðæêà, êîíñóëüòàöèè è öåëåâàÿ ðàçðàáîòêà ðàñøèðåíèé, èíòåãðàöèÿ è âíåäðåíèå ðåøåíèé, à òàêæå ðàçðàáîòêà ñïåöèàëèçèðîâàííûõ ðåøåíèé è ïðîäóêòîâ íà îñíîâå OpenSCADA.
Âåðñèÿ 0.7.0 ïðåäîñòàâëÿåò ðåøåíèÿ OpenSCADA òîëüêî äëÿ ïëàòôîðìû Linux x86 è x86_64. Äëÿ îñóùåñòâëåíèÿ ïîääåðæêè äðóãèõ àïïàðàòíûõ è ïðîãðàììíûõ ïëàòôîðì, çàïëàíèðîâàííûõ ïðîåêòîì, ðàáîòà áóäåò ïðîäîëæåíà. Òàê, ê âåðñèè 0.8.0 ïëàíèðóåòñÿ ðàñøèðèòü ïîääåðæêó àïïàðàòíûõ ïëàòôîðì ìèíèìóì íà ïëàòôîðìó ÀÐÌ, êàê ïðåäñòàâèòåëÿ RISC àðõèòåêòóð.
 ïîÿâëåíèè ïåðâîé ïðîìûøëåííîé âåðñèè ñèñòåìû OpenSCADA àêòèâíîå ó÷àñòèå ïðèíÿëè:
- Ñàâî÷åíêî Ðîìàí: Îñíîâíîé îáú¸ì ðàáîò ïî ïðîåêòèðîâàíèþ, ðàçðàáîòêå, äîêóìåíòèðîâàíèþ è òåñòèðîâàíèþ.
- Ëûñåíêî Ìàêñèì: Ðàçðàáîòêà ïðèìèòèâà "Ýëåìåíòàðíàÿ ôèãóðà" ñðåäû âèçóàëèçàöèè è óïðàâëåíèÿ (ÑÂÓ), ñîçäàíèå ìîäóëÿ ïîääåðæêè ÁÄ PostgreSQL è ïåðåâîä áîëüøåé ÷àñòè äîêóìåíòàöèè íà Àíãëèéñêèé ÿçûê.
- ßøèíà Êñåíèÿ: Ðàçðàáîòêà ïðèìèòèâà "Ýëåìåíòàðíàÿ ôèãóðà" ÑÂÓ.
- Ïîïêîâà Èðèíà: Ïåðåâîä èíòåðôåéñà ñèñòåìû OpenSCADA è å¸ ìîäóëåé íà Íåìåöêèé ÿçûê.
- Àëìàç Êàðèìîâ: Ðàçðàáîòêà ìîäóëÿ ïîääåðæêè ïðîòîêîëà DCON è àêòèâíîå òåñòèðîâàíèå.
- Ïîïêîâ Àëåêñåé?: Àêòèâíîå òåñòèðîâàíèå è ó÷àñòèå.
- Ìíîãèå äðóãèå ïîëüçîâàòåëè ñèñòåìû OpenSCADA, ïîñðåäñòâîì âñåñòîðîííåãî òåñòèðîâàíèÿ.
Ññûëêè
Ïðîòîêîë òåñòèðîâàíèÿ ïðîìûøëåííîãî ðåëèçà: http://wiki.oscada.org/Works/Tests/release070