Ìîäóëü: | Serial |
²ì'ÿ: | Ïîñë³äîâíèé ³íòåðôåéñ |
Òèï: | Òðàíñïîðò |
Äæåðåëî: | tr_Serial.so |
Âåðñ³ÿ: | 1.6.0 |
Àâòîð: | Ðîìàí Ñàâî÷åíêî, Ìàêñèì Êî÷åòêîâ |
Îïèñ: | Íàäຠïîñë³äîâíèé ³íòåðôåéñ. Âèêîðèñòîâóºòüñÿ äëÿ îáì³íó äàíèìè ÷åðåç ïîñë³äîâí³ ³íòåðôåéñè òèïó RS232, RS485, GSM òà ³íø³. |
˳öåíç³ÿ: | GPL |
Ìîäóëü òðàíñïîðòó Serial íàäຠâ ñèñòåìó ï³äòðèìêó òðàíñïîðò³â, îñíîâàíèõ íà ïîñë³äîâíèõ ³íòåðôåéñàõ òèïó RS232, RS485, GSM òà ³íøå. ϳäòðèìóþòüñÿ âõ³äí³ òà âèõ³äí³ òðàíñïîðòè. Äîäàòè íîâ³ âõ³äí³ òà âèõ³äí³ ³íòåðôåéñè ìîæíà çà ïîñåðåäíèöòâîì êîíô³ãóðàö³¿ òðàíñïîðòíî¿ ï³äñèñòåìè ó áóäü ÿêîìó êîíô³ãóðàòîð³ ñèñòåìè OpenSCADA.
Ó ðåæèì³ ìîäåìó ìîäóëåì ï³äòðèìóºòüñÿ çì³øàíèé ðåæèì ðîáîòè. Çì³øàíèé ðåæèì ìຠíà óâàç³ íàÿâí³ñòü âõ³äíîãî òðàíñïîðòó, ÿêèé î÷³êóº çîâí³øí³õ ï³äêëþ÷åíü, à òàêîæ âèõ³äíîãî òðàíñïîðòó íà òîìó-æ ïðèñòðî¿. Òîáòî âõ³äíèé òðàíñïîðò áóäå ³ãíîðóâàòè âñ³ çàïèòè ïðè íàÿâíîñò³ âñòàíîâëåíîãî âèõ³äíèì òðàíñïîðòîì ï³äêëþ÷åííÿ, â òîé-æå ÷àñ âèõ³äíèé òðàíñïîðò íå áóäå çä³éñíþâàòè ñïðîá âñòàíîâëåííÿ ï³äêëþ÷åííÿ ïðè íàÿâíîñò³ ï³äêëþ÷åííÿ äî âõ³äíîãî òðàíñïîðòó àáî ï³äêëþ÷åííÿ ³íøîãî âèõ³äíîãî òðàíñïîðòó, íàïðèêëàä, ç ³íøèì íîìåðîì òåëåôîíó.
Ó çâè÷àéíîìó ðåæèì³ ïîñë³äîâíîãî ³íòåðôåéñó íå äîïóñêàºòüñÿ áàãàòîðàçîâå âèêîðèñòàííÿ îäíîãî é òîãî-æ ïîðòó ó âõ³äíèõ òà âèõ³äíèõ òðàíñïîðòàõ. Ãëîáàëüíîãî áëîêóâàííÿ ïîñë³äîâíîãî ïðèñòðîþ íå çä³éñíþºòüñÿ ó çâ'ÿçêó ³ç íåîäíîçíà÷í³ñòþ öüîãî ïðîöåñó íà ñèñòåìíîìó ð³âí³, à áàãàòîðàçîâå âèêîðèñòàííÿ ìîæå ïðèâåñòè äî íåïåðåäáà÷óâàíèõ ïðîáëåì. Ïðè ïîòðåá³ ó îðãàí³çàö³¿ ëîêàëüíîãî ïîñë³äîâíîãî êàíàëó ç ïàðîþ ïîâ'ÿçàíèõ ïîðò³â ðåêîìåíäóºòüñÿ âèêîðèñòîâóâàòè êîìàíäó "$ socat -d -d pty,raw,echo=0,perm=0666 pty,raw,echo=0,perm=0666".
Ñêîíô³ãóðîâàíèé òà çàïóùåíèé âõ³äíèé òðàíñïîðò â³äêðèâຠïîðò ïîñë³äîâíîãî ³íòåðôåéñó äëÿ î÷³êóâàííÿ çàïèò³â ê볺íò³â. Êîæíèé âõ³äíèé ³íòåðôåéñ îáîâ'ÿçêîâî ïîâ'ÿçóºòüñÿ ç îäíèì ³ç äîñòóïíèõ òðàíñïîðòíèõ ïðîòîêîë³â, äî ÿêîãî ïåðåäàþòüñÿ âõ³äí³ ïîâ³äîìëåííÿ.
ijàëîã êîíô³ãóðàö³¿ âõ³äíîãî ïîñë³äîâíîãî ³íòåðôåéñó çîáðàæåíî íà ðèñ.1.
Çà äîïîìîãîþ öüîãî ä³àëîãó ìîæíà âñòàíîâèòè:
Òðàíñïîðò ï³äòðèìóº ìîæëèâ³ñòü ðîáîòè ó ðåæèì³ ìîäåìó. Öåé ðåæèì âêëþ÷àºòüñÿ ï'ÿòèì ïàðàìåòðîì àäðåñè òà ïåðåäáà÷ຠî÷³êóâàííÿ äçâ³íêà â³ä â³ääàëåíîãî ìîäåìó (çàïèò "RING"), â³äïîâ³ä³ íà äçâ³íîê (êîìàíäà "ATA") òà íàñòóïíî¿ ïåðåäà÷³ çàïèò³â â³ä â³ääàëåíî¿ ñòàíö³¿ ïðîòîêîëó òðàíñïîðòó. ³äêëþ÷åííÿ ñåàíñó çâ'ÿçêó çä³éñíþºòüñÿ ³í³ö³àòîðîì ç'ºäíàííÿ òà ïðèçâîäèòü äî ïåðåï³äêëþ÷åííÿ ìîäåìó ïðèéìà÷à íà î÷³êóâàííÿ íîâèõ äçâ³íê³â.
Äëÿ íàëàøòóâàííÿ ìîäåìó âõ³äíîãî òðàíñïîðòó ïåðåäáà÷åíî ñïåö³àëüíó âêëàäêó "Ìîäåì" (ðèñ.2).
Çà äîïîìîãîþ öüîãî ä³àëîãó ìîæíà âñòàíîâèòè íàñòóïí³ âëàñòèâîñò³ ðîáîòè ç ìîäåìîì:
Ïåðåêëàä
Ñêîíôèãóðèðîâàííûé è çàïóùåííûé èñõîäÿùèé òðàíñïîðò îòêðûâàåò ïîðò ïîñëåäîâàòåëüíîãî èíòåðôåéñà äëÿ îòïðàâêè çàïðîñîâ ÷åðåç íåãî.
Ãëàâíàÿ âêëàäêà ñòðàíèöû êîíôèãóðàöèè èñõîäÿùåãî ïîñëåäîâàòåëüíîãî èíòåðôåéñà èçîáðàæ¸íà íà ðèñ.3.
Ñ ïîìîùüþ ýòîãî äèàëîãà ìîæíî óñòàíîâèòü:
Òðàíñïîðò ïîääåðæèâàåò âîçìîæíîñòü ðàáîòû â ðåæèìå ìîäåìà. Äàííûé ðåæèì âêëþ÷àåòñÿ íàëè÷èåì ïÿòîãî ïàðàìåòðà àäðåñà è ïîäðàçóìåâàåò îñóùåñòâëåíèå çâîíêà ïî òåëåôîíó, óêàçàííîìó ïÿòûì ïàðàìåòðîì, â ìîìåíò çàïóñêà òðàíñïîðòà. Ïîñëå óñòàíîâêè ñâÿçè ñ óäàë¸ííûì ìîäåìîì âñå çàïðîñû ïåðåäà÷è íàïðàâëÿþòñÿ ñòàíöèè çà óäàë¸ííûì ìîäåìîì. Îòêëþ÷åíèå ñåàíñà ñâÿçè, ñ îñòàíîâêîé òðàíñïîðòà, îñóùåñòâëÿåòñÿ ïî òàéìàóòó àêòèâíîñòè.
Òðàíñïîðò ìîæåò ðàáîòàòü ñ àïïàðàòíîé øèíîé I2Ñ åñëè â êà÷åñòâå óñòðîéñòâà âûáðàòü "/dev/i2c-{N}" è øèíà ïîçâîëèò óñòàíîâèòü àäðåñ ïîä÷èí¸ííîãî óñòðîéñòâà êîìàíäîé I2C_SLAVE, èç ïåðâîãî áàéòà çàïðîñà. Ñêîðîñòü è ôîðìàò íå èãðàþò ðîëè â äàííîì ðåæèìå. Èç òàéìàóòîâ òóò ôàêòè÷åñêè ðàáîòàåò òîëüêî âðåìÿ ñèìâîëà è â îñíîâíîì äëÿ ðàñ÷¸òà îæèäàíèÿ ïîâòîðà çàïðîñà.
Äëÿ íàñòðîéêè ìîäåìà èñõîäÿùåãî òðàíñïîðòà ïðåäóñìîòðåíà ñïåöèàëüíàÿ âêëàäêà "Ìîäåì" (ðèñ.4).
Ñ ïîìîùüþ ýòîãî äèàëîãà ìîæíî óñòàíîâèòü ñëåäóþùèå ñâîéñòâà ðàáîòû ñ ìîäåìîì:
Îáúåêò "Èñõîäÿùèé òðàíñïîðò" (SYS.Transport.Serial.out_{OutTransport})
Êîììóíèêàöèè ÷åðåç ïîñëåäîâàòåëüíûå èíòåðôåéñû èìåþò ðÿä îñîáåííîñòåé. Íàèáîëåå âàæíîé îñîáåííîñòüþ ÿâëÿåòñÿ êðèòåðèé îêîí÷àíèÿ ñîîáùåíèÿ è âðåìÿ îæèäàíèÿ ýòîãî êðèòåðèÿ.  îäíèõ ïðîòîêîëàõ òàêèì êðèòåðèåì ÿâëÿåòñÿ ïðèçíàê îêîí÷àíèÿ èëè óêàçàííûé ðàçìåð ñîîáùåíèÿ.  äðóãèõ ïðîòîêîëàõ òàêèì êðèòåðèåì ÿâëÿåòñÿ îòñóòñòâèå äàííûõ âî âõîäÿùåì ïîòîêå â òå÷åíèå óêàçàííîãî âðåìåíè, âðåìÿ ñèìâîëà.  îáîèõ ñëó÷àÿõ âðåìÿ îæèäàíèÿ êðèòåðèÿ èëè ñèìâîëà ÿâëÿåòñÿ êëþ÷åâûì è ñèëüíî ñêàçûâàåòñÿ íà îáùåì âðåìåíè îáìåíà. Ñëåäîâàòåëüíî, ÷åì ìåíüøå ýòî âðåìÿ òåì ëó÷øå. Òóò è âîçíèêàåò ïðîáëåìà ëàòåíòíîñòè îáîðóäîâàíèÿ è åãî äðàéâåðîâ.
Ïðîâåðèòü ëàòåíòíîñòü êàíàëà îáìåíà è òåì ñàìûì îïòèìàëüíî íàñòðîèòü âðåìÿ äîæèäàíèÿ, ñèìâîëà ìîæíî ñ ïîìîùüþ èíòåðôåéñà âêëàäêè "Çàïðîñ" èñõîäÿùåãî òðàíñïîðòà. Äëÿ ýòîãî íåîáõîäèìî óêàçàòü îáðàçöîâûé çàïðîñ ñîîòâåòñòâóþùåãî ïðîòîêîëà, óêàçàòü "Îæèäàòü òàéìàóò", îòîñëàòü çàïðîñ è ïðîêîíòðîëèðîâàòü åãî öåëîñòíîñòü. Äëÿ ïîëó÷åíèÿ áîëåå ðåïðåçåíòàòèâíîãî ðåçóëüòàòà íåîáõîäèìî çàïðîñ ïîâòîðèòü íåñêîëüêî ðàç. Åñëè íàáëþäàåòñÿ ïîëó÷åíèå íåïîëíûõ îòâåòîâ, òî âðåìÿ ñèìâîëà íåîáõîäèìî óâåëè÷èòü, èíà÷å ìîæíî óìåíüøèòü.
Íà âñòðîåííîì îáîðóäîâàíèè ïîñëåäîâàòåëüíûõ èíòåðôåéñîâ RS232/422/485 ìîæíî äîáèòüñÿ íèçêîãî óðîâíÿ ëàòåíòíîñòè, âïëîòü äî åäèíèö ìèëëèñåêóíä. Îäíàêî, íà âûñîêî-íàãðóæåííûõ ñèñòåìàõ ñ ìíîæåñòâîì çàäà÷ â ïðèîðèòåòå ðåàëüíîãî âðåìåíè ëàòåíòíîñòü ìîæåò ñòàòü íåäåòåðìèíèðîâàííîé â ñâÿçè ñ èñïîëíåíèåì ïîòîêà îáñëóæèâàíèÿ ñîáûòèé ÿäðà Linux â íèçêîì ïðèîðèòåòå. Äëÿ ðåøåíèÿ ýòîé ïðîáëåìû íåîáõîäèìî óñòàíîâèòü âûñîêèé ïðèîðèòåò ýòèì ïîòîêàì, ÷òî ìîæíî ñäåëàòü ñ ïîìîùüþ ñêðèïòà, ïîìåñòèâ åãî, íàïðèìåð, â "/etc/rc.local":
Ýòîò ñêðèïò íå èìååò ñìûñëà äëÿ ÿäåð Linux ðåàëüíîãî âðåìåíè, ñ ïàò÷åì PREEMPT_RT, ïîñêîëüêó âñå ïîòîêè ïðåðûâàíèé è ñîáûòèé òàì óæå çàïóñêàþòñÿ â ïðèîðèòåòå ðåàëüíîãî âðåìåíè.
Íà âíåøíåì îáîðóäîâàíèè ïîñëåäîâàòåëüíûõ èíòåðôåéñîâ, íàïðèìåð, â ïåðåõîäíèêàõ USB->RS232/422/485, ìîæåò âîçíèêíóòü ïðîáëåìà âûñîêîé ëàòåíòíîñòè, ñâÿçàííàÿ ñ îñîáåííîñòüþ àïïàðàòíîé ðåàëèçàöèè èëè åãî äðàéâåðà. Ðåøàòü ýòó ïðîáëåìó íóæíî ïóò¸ì èçó÷åíèÿ íàñòðîåê ýòîãî îáîðóäîâàíèÿ èëè óñòàíîâêîé áîëüøîãî âðåìåíè îæèäàíèÿ, ñèìâîëà!
Ïîõîæèì îáðàçîì îïðåäåëÿåòñÿ è îïòèìàëüíîå âðåìÿ ïîäêëþ÷åíèÿ, à èìåííî: óñòàíîâèòü âðåìÿ ïîäêëþ÷åíèÿ â çíà÷åíèå ïî óìîë÷àíèþ äëÿ äàííîé ñêîðîñòè (ñòàâèòñÿ ïðè ñìåíå ñêîðîñòè â àäðåñå), ñíÿòü "Îæèäàòü òàéìàóò", îòîñëàòü çàïðîñ. Åñëè îòâåò ïðèø¸ë òî áåð¸ì èçìåðåííîå âðåìÿ îòêëèêà óñòðîéñòâà, óäâàèâàåì è óñòàíàâëèâàåì ïîëó÷åííîå çíà÷åíèå êàê âðåìÿ ïîäêëþ÷åíèÿ. Íåîáîñíîâàííîå ïðåâûøåíèå âðåìåíè ïîäêëþ÷åíèÿ ïðèâåä¸ò ê áîëüøèì îæèäàíèÿì â ñëó÷àå îòñóòñòâèÿ óñòðîéñòâà, à òàêæå ñðàáàòûâàíèÿ çàùèòíûõ òàéìàóòîâ âíóòðåííèõ ïðîöåäóð.
×àñòî äëÿ ëîêàëüíîé ïðîâåðêè, áåç ôèçè÷åñêîãî îáîðóäîâàíèÿ, íåîáõîäèìà ïàðà ïîðòîâ ïîäêëþ÷åííûõ â îäíó ñåòü. Ñîçäàíèå òàêèõ ïîðòîâ è âûïîëíåíèå ìíîæåñòâà äðóãèõ îïåðàöèé íàä ïîñëåäîâàòåëüíûì ïîòîêîì ïîçâîëÿåò âûïîëíÿòü óòèëèòà socat. Íàïðèìåð, äëÿ ñîçäàíèÿ äâóõ ñâÿçàííûõ ïîðòîâ íóæíî âûïîëíèòü êîìàíäó, êîòîðàÿ ñîçäàñò èõ è ñîîáùèò àäðåñà:
 íåêîòîðûõ ñëó÷àÿõ áûâàåò ïîëåçíûì ïðîáðîñèòü ïîðò ïîñëåäîâàòåëüíîãî èíòåðôåéñà óäàë¸ííîé ìàøèíû íà ëîêàëüíûé ïîðò, íàïðèìåð, äëÿ îïðîñà óñòðîéñòâ ïîäêëþ÷åííûõ ê ïîñëåäîâàòåëüíîìó èíòåðôåéñó óäàë¸ííîé ìàøèíû. Êîíå÷íî, åñëè óñòàíîâèòü íà óäàë¸ííóþ ìàøèíó OpenSCADA â êîíôèãóðàöèè PLC, òî ìîæíî áóäåò ñðàçó âûïîëíÿòü îáðàáîòêó ýòèõ äàííûõ, ïðåäâàðèòåëüíîå áóôåðèðîâàíèå-àðõèâèðîâàíèå è ò.ä., íî èíîãäà îáîðóäîâàíèå ìîæåò áûòü ñëîæíûì äëÿ çàïóñêà OpenSCADA, ãäå è ñïàñàåò âîçìîæíîñòü ïðîáðîñà ïîñëåäîâàòåëüíîãî ïîòîêà ÷åðåç ñåòü. Äëÿ ðåøåíèÿ ýòîé çàäà÷è ìîæíî âîñïîëüçîâàòüñÿ òîé-æå óòèëèòîé socat èëè remserial, ser2net, êàêóþ óäàñòñÿ ñîáðàòü è çàïóñòèòü íà óäàë¸ííîé ìàøèíå. Ïðèìåðû ïðîáðîñà ïîñëåäîâàòåëüíîãî ïîðòà:
 ñëó÷àå ñ "socat", à âîçìîæíî è äðóãèõ óòèëèò, ìîæíî íà êëèåíòñêîé ñòîðîíå îïóñòèòü çàïóñê äðàéâåðà EthernetTCP->Serial è ïîäêëþ÷àòüñÿ èç OpenSCADA ïðÿìî íà TCP-ïîðò óäàë¸ííîãî óñòðîéñòâà.
 ðàáîòå ÷åðåç äðàéâåð EthernetTCP->Serial åñòü îñîáåííîñòü, êîòîðàÿ ñâÿçàííà ñ íàëè÷èåì äâóõ òàéìàóòîâ ïîäêëþ÷åíèÿ, îäèí â äðàéâåðå, äðóãîé â Transport.Sockets. Âàæíî ÷òîáû çíà÷åíèå ýòîãî òàéìàóòà â Transport.Sockets áûë áîëüøå ÷åì â äðàéâåðå èíà÷å âîçìîæíî ñìåùåíèå è ïîëó÷åíèå íà çàïðîñ çàïîçäàëûé îòâåò îò ïðåäûäóùåãî çàïðîñà.
Ìíîãèå ïðîèçâîäèòåëè ïðîìûøëåííîãî êîììóíèêàöèîííîãî îáîðóäîâàíèÿ âûïóñêàþò ãîòîâûå êîíâåðòåðû èç Ethernet â RS-232/422/485, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ ñ OpenSCADA òàêèì-æå îáðàçîì. Êîììåíòàðèè è ïåðå÷åíü êîíâåðòåðîâ ñ êîòîðûìè ðàáîòà OpenSCADA ïðîâåðåíà: