Modbus network linking a controller with distributed field devices

Modbus: Өнеркәсіптік өрістік шиналардың түпнұсқалық протоколы

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, ti...

Fieldbus — өнеркәсіптік желілерде далалық құрылғыларды өнеркәсіптік контроллерлерге қосу үшін қолданылатын байланыс протоколы. Fieldbus контроллерлер мен құрылғылар арасында қажет сымдар санын азайтады, өйткені бірнеше құрылғы бір жұп сымға қосыла алады.

Кең таралған fieldbus технологияларына Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet және басқа да көптеген технологиялар жатады.

1979 жылы Modicon OSI моделінің қолданбалы деңгейін пайдаланып, өзінің PLC құрылғыларына арналған жаңа протокол ұсынды. Бұл протокол Modbus деп аталды және автоматтандыру тарихындағы алғашқы кеңінен қолданылған fieldbus болды.

 

Fieldbus арқылы далалық құрылғыларға қосылған PLC

1-сурет. Далалық құрылғыларға қосылған PLC 

 

Modbus-қа кіріспе

Modbus далалық құрылғыларды өнеркәсіптік контроллерлерге қосу үшін жасалды. Ол ойлап табылған кезде құрылғылардың көпшілігі құрылғы күйін байланыс құралы ретінде көрсету үшін кернеу немесе ток мәндерін пайдаланатын. Modbus жоғары/төмен күйдегі сенсорлар мен атқарушы механизмдердің күйін көрсететін дискретті биттерді, сондай-ақ аналогтық процесс мәндеріне сәйкес келетін бүтін мәндер сақталатын регистрлерді тиімді өңдей алады.

Fieldbus технологияларына баяу көшу Modbus-тың ең қарапайым протоколдардың біріне айналуына әкелді, әрі жылдар бойы оның жаңа нұсқалары қосылды.

Бастапқыда Modbus тізбекті байланыс желісі, яғни RS-232/RS-485 арқылы іске асырылды. Бұл нұсқалар әлі де Modbus RTU және ASCII атауларымен кеңінен қолданылады. Кейін протокол TCP/IP және Ethernet арқылы пайдалануға бейімделді. Бұл әдетте Modbus TCP деп аталады және қазіргі заманғы қондырғыларда Modbus-тың ең көп қолданылатын іске асырылуы болып табылады.

 

Байланыс моделі

Modbus байланыс үшін негізгі/бағыныңқы модельді (Modbus TCP-де клиент/сервер моделін) пайдаланады. Modbus негізгі құрылғысы Modbus бағыныңқы құрылғысына сұрау жібереді, ал бағыныңқы құрылғы әрекеттерді орындап, негізгі құрылғыға жауап береді. Бұл сценарийде негізгі құрылғы көбінесе PLC болады, ал далалық құрылғылар бағыныңқы құрылғылар ретінде әрекет етеді. 

Modbus-тағы хабарлама кадры қолданбалы деректер бірлігінен (ADU) және протокол деректер бірлігінен (PDU) тұрады. ADU қолданылатын Modbus түріне байланысты өзгереді, ал PDU байланыс әдісіне тәуелсіз.

PDU әдетте функция коды мен кейбір деректерден тұрады. Ол ADU құрамында мекенжай және қателерді тексеру кодымен инкапсуляцияланады. Modbus TCP ADU құрамында MBAP (Modbus қолданбалы протоколы) тақырыптамасын пайдаланады.

 

2-сурет. Modbus ASCII/RTU (жоғарыда) және Modbus TCP (төменде) үшін Modbus ADU және PDU. Сурет Modbus.org материалдары негізінде бейімделген

 

PDU негізгі байланыс деңгейінен тәуелсіз болуы үшін ол бастапқы сериялық спецификацияның өлшем шектеулеріне сай болуы керек. RS-485 арқылы жіберілетін ADU өлшемі 256 байт болды. Сондықтан ADU-дан 1 мекенжай байты мен қателерді тексеруге арналған 2 байтты алып тастауымыз керек, яғни PDU жалпы көлемі 253 байтпен шектеледі. ADU-дағы мекенжай Modbus желісіндегі slave құрылғысының идентификаторы екенін ескеріңіз.

PDU-дың деректер бөлігінде функция коды үшін арнайы өрістермен қатар жіберілетін нақты деректер де болады. Бұл өрістер мақалада кейінірек егжей-тегжейлі қарастырылады.

 

Деректерді көрсету

Классикалық Modbus-та екі жіберу режимі бар: ASCII және RTU.

ASCII режимінде деректер 0-9 және A-F ASCII таңбалары түрінде жіберіледі, ал RTU режимінде деректер 8 биттік екілік түрде көрсетіледі. Деректер мен мекенжайлар big-endian тәртібімен кодталады, сондықтан ең маңызды байт бірінші болып жіберіледі.

Modbus деректері төрт негізгі түрге бөлінеді:

  • Дискретті кірістер
  • Катушкалар (шығыстар)
  • Кіріс регистрлері
  • Ұстау регистрлері

Дискретті кірістер деректердің бір битін білдіреді және тек оқуға арналған. Катушкалар да бір битті білдіреді, бірақ оларды оқуға да, жазуға да болады. Кіріс регистрлері 16 биттік тек оқуға арналған деректерді білдіреді, ал ұстау регистрлері — 16 биттік оқуға және жазуға болатын деректер.

 

3-сурет. Modbus протоколының спецификациясынан алынған

 

Әрбір түр үшін құрылғы жадында ең көбі 2^16 (65536) деректер элементі орналасуы мүмкін. Әртүрлі деректер түрлерінің әрқайсысына қатынасу үшін арнайы функция кодтары бар, әрі әр түрдің көбіне жеке бөлінген жад блогы болады.

Деректер элементіне жүгіну үшін мастер 0-ден 65535-ке дейінгі ауқымды пайдаланады. 1-деректер элементі 0x0000 мекенжайында орналасады. 2-деректер элементі 0x0001 мекенжайында болады. 65536-деректер элементі 0xFFFF мекенжайында орналасады. Құрылғыларда барлық 65536 деректер элементінің болуы міндетті емес екенін ескеріңіз; іс жүзінде Modbus пайдаланатын қашықтағы енгізу/шығару терминалдарының көпшілігінде бұл ең жоғары шектен әлдеқайда аз элемент болады.

 

Modbus транзакциялары

Modbus-та деректердің қалай көрсетілетінін түсінгеннен кейін, транзакцияларды егжей-тегжейлі қарастыра аламыз. Бұл PDU тұрғысынан қарастырылады, өйткені PDU байланыс деңгейіне тәуелсіз.

Modbus транзакцияларында он алтылық таңбалар нұсқаулары пайдаланылады, мұнда бір 8 биттік байт 0x00 пішімінде болады, ал әр таңба үшін 0-ден F-ке дейінгі ауқым қолданылады. Демек, 16 биттік регистр екі байтқа тең және 0x0000 пішімінде көрсетіледі. 

Modbus спецификациясы PDU-дың үш түрін анықтайды:

  • Modbus сұрауы
  • Modbus жауабы
  • Modbus ерекшелік жауабы

Master құрылғысы функция кодын пайдаланып сұрауды бастайды, ал slave құрылғысы сол сұрауға жауап ретінде жауап жібереді. Сәтті жауап master құрылғысы жіберген функция кодын қайталайды. Ерекшелік жауабы сол функция кодымен жауап береді, бірақ бір нәрсенің дұрыс болмағанын көрсету үшін msb (ең маңызды бит) жоғары күйге орнатылады. 

Modbus спецификациясы бірнеше функция кодын анықтайды. 0x01 функция коды — Coil-дарды оқу функциясы.

4-суретте coil-дарды оқу сұрауы мен жауабының ықтимал үлгісі көрсетілген. Modbus master құрылғысы 0x01 функция кодымен (Coil-дарды оқу) бірінші деректер элементінен (0x0000 мекенжайы) бастап, бір ғана coil-ды оқуға арналған сұрау жібереді. Coil-дарды оқу функциясы бір уақытта 2000-ға (0x7D0) дейін coil-ды оқуға мүмкіндік береді. 

 

4-сурет. Coil-дарды оқу транзакциясы

 

Егер операция сәтті орындалса, slave құрылғысы сол функция кодымен және өзі жауап беретін coil санының мәнімен жауап береді. Coil күйі n байтты құрайды, мұнда әрбір бит тиісті coil-дың ҚОСУЛЫ (1) немесе ӨШІРУЛІ (0) екенін көрсетеді.

Бұл жағдайда 0x0000 мекенжайындағы coil ҚОСУЛЫ тұр. Егер сұрау сәтті орындалмаса, ерекшелік жауабында msb мәні жоғары күйге орнатылған функция коды (0x81) және ақаудың себебін түсіндіретін ерекшелік коды болады. 0x02 ерекшелік коды жарамсыз деректер мекенжайы пайдаланылғанын, яғни осы slave құрылғысының жадында 0x0000 мекенжайында coil жоқ екенін білдіреді. 

Келесі мысалда бір регистрді жазу транзакциясы (0x06 функция коды) көрсетілген. Мұнда master құрылғысы 0x00FF мекенжайына 0xA0A0 деректерін жазуды сұрайды. Slave құрылғысының жауабы — сұраудың жай ғана қайталануы.

Мұндағы ерекшелік жауабының мысалында msb мәні жоғары күйге орнатылған функция коды және 0x04 ерекшелік коды көрсетілген. Бұл код slave құрылғысы сұрауды орындау кезінде қалпына келмейтін қате орын алғанын білдіреді. 

 

5-сурет. Бір регистрді жазу транзакциясы 

 

Барлық Modbus функция кодтары жоғарыда көрсетілген екі мысалға ұқсас үлгі бойынша жұмыс істейді.

6-суретте ерекшелік жауаптарына арналған кең таралған функция кодтары мен ерекшелік кодтарының тізімі көрсетілген. Қосымша ақпарат алу үшін Modbus спецификациясын қараңыз. 

 

6-сурет. Функция кодтары және ерекшелік кодтары

 

Қорытынды

Modbus PLC контроллерлеріне енгізу/шығару банктері, терминалдық құрылғылар және басқа контроллерлерді қоса алғанда, қашықтағы құрылғылардың барлық түрлерімен байланысуға мүмкіндік береді. Бұл дискретті және бүтін сандық ақпаратты оқу мен жазудың стандартты әдісіне сүйеніп, цифрлық деректерді тасымалдауға қатысты дерлік барлық жағдайды қамтиды.

Modbus бүгінгі таңда өнеркәсіптегі стандарт болып саналады және қазіргі басқару жүйелерінің көпшілігінен бұрын пайда болғанына қарамастан, осы уақытқа дейін лицензиялық төлемсіз қолданылатын ең кең таралған өнеркәсіптік протокол болып отыр. Ол бүкіл әлемдегі зауыттар мен өндіріс орындарында кеңінен қолданылады және ұзақ уақыттан бері пайдаланылып келе жатқанына қарамастан, әлі талай жыл бойы өзектілігін сақтайтыны сөзсіз.

 

2019 жылы жарияланған түпнұсқа мақала

Modbus: Өнеркәсіптік өрістік шиналардың түпнұсқалық протоколы

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, timing, diagnostics, and the design limits...

Fieldbus — өнеркәсіптік желілерде далалық құрылғыларды өнеркәсіптік контроллерлерге қосу үшін қолданылатын байланыс протоколы. Fieldbus контроллерлер мен құрылғылар арасында қажет сымдар санын азайтады, өйткені бірнеше құрылғы бір жұп сымға қосыла алады.

Кең таралған fieldbus технологияларына Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet және басқа да көптеген технологиялар жатады.

1979 жылы Modicon OSI моделінің қолданбалы деңгейін пайдаланып, өзінің PLC құрылғыларына арналған жаңа протокол ұсынды. Бұл протокол Modbus деп аталды және автоматтандыру тарихындағы алғашқы кеңінен қолданылған fieldbus болды.

 

Fieldbus арқылы далалық құрылғыларға қосылған PLC

1-сурет. Далалық құрылғыларға қосылған PLC 

 

Modbus-қа кіріспе

Modbus далалық құрылғыларды өнеркәсіптік контроллерлерге қосу үшін жасалды. Ол ойлап табылған кезде құрылғылардың көпшілігі құрылғы күйін байланыс құралы ретінде көрсету үшін кернеу немесе ток мәндерін пайдаланатын. Modbus жоғары/төмен күйдегі сенсорлар мен атқарушы механизмдердің күйін көрсететін дискретті биттерді, сондай-ақ аналогтық процесс мәндеріне сәйкес келетін бүтін мәндер сақталатын регистрлерді тиімді өңдей алады.

Fieldbus технологияларына баяу көшу Modbus-тың ең қарапайым протоколдардың біріне айналуына әкелді, әрі жылдар бойы оның жаңа нұсқалары қосылды.

Бастапқыда Modbus тізбекті байланыс желісі, яғни RS-232/RS-485 арқылы іске асырылды. Бұл нұсқалар әлі де Modbus RTU және ASCII атауларымен кеңінен қолданылады. Кейін протокол TCP/IP және Ethernet арқылы пайдалануға бейімделді. Бұл әдетте Modbus TCP деп аталады және қазіргі заманғы қондырғыларда Modbus-тың ең көп қолданылатын іске асырылуы болып табылады.

 

Байланыс моделі

Modbus байланыс үшін негізгі/бағыныңқы модельді (Modbus TCP-де клиент/сервер моделін) пайдаланады. Modbus негізгі құрылғысы Modbus бағыныңқы құрылғысына сұрау жібереді, ал бағыныңқы құрылғы әрекеттерді орындап, негізгі құрылғыға жауап береді. Бұл сценарийде негізгі құрылғы көбінесе PLC болады, ал далалық құрылғылар бағыныңқы құрылғылар ретінде әрекет етеді. 

Modbus-тағы хабарлама кадры қолданбалы деректер бірлігінен (ADU) және протокол деректер бірлігінен (PDU) тұрады. ADU қолданылатын Modbus түріне байланысты өзгереді, ал PDU байланыс әдісіне тәуелсіз.

PDU әдетте функция коды мен кейбір деректерден тұрады. Ол ADU құрамында мекенжай және қателерді тексеру кодымен инкапсуляцияланады. Modbus TCP ADU құрамында MBAP (Modbus қолданбалы протоколы) тақырыптамасын пайдаланады.

 

2-сурет. Modbus ASCII/RTU (жоғарыда) және Modbus TCP (төменде) үшін Modbus ADU және PDU. Сурет Modbus.org материалдары негізінде бейімделген

 

PDU негізгі байланыс деңгейінен тәуелсіз болуы үшін ол бастапқы сериялық спецификацияның өлшем шектеулеріне сай болуы керек. RS-485 арқылы жіберілетін ADU өлшемі 256 байт болды. Сондықтан ADU-дан 1 мекенжай байты мен қателерді тексеруге арналған 2 байтты алып тастауымыз керек, яғни PDU жалпы көлемі 253 байтпен шектеледі. ADU-дағы мекенжай Modbus желісіндегі slave құрылғысының идентификаторы екенін ескеріңіз.

PDU-дың деректер бөлігінде функция коды үшін арнайы өрістермен қатар жіберілетін нақты деректер де болады. Бұл өрістер мақалада кейінірек егжей-тегжейлі қарастырылады.

 

Деректерді көрсету

Классикалық Modbus-та екі жіберу режимі бар: ASCII және RTU.

ASCII режимінде деректер 0-9 және A-F ASCII таңбалары түрінде жіберіледі, ал RTU режимінде деректер 8 биттік екілік түрде көрсетіледі. Деректер мен мекенжайлар big-endian тәртібімен кодталады, сондықтан ең маңызды байт бірінші болып жіберіледі.

Modbus деректері төрт негізгі түрге бөлінеді:

  • Дискретті кірістер
  • Катушкалар (шығыстар)
  • Кіріс регистрлері
  • Ұстау регистрлері

Дискретті кірістер деректердің бір битін білдіреді және тек оқуға арналған. Катушкалар да бір битті білдіреді, бірақ оларды оқуға да, жазуға да болады. Кіріс регистрлері 16 биттік тек оқуға арналған деректерді білдіреді, ал ұстау регистрлері — 16 биттік оқуға және жазуға болатын деректер.

 

3-сурет. Modbus протоколының спецификациясынан алынған

 

Әрбір түр үшін құрылғы жадында ең көбі 2^16 (65536) деректер элементі орналасуы мүмкін. Әртүрлі деректер түрлерінің әрқайсысына қатынасу үшін арнайы функция кодтары бар, әрі әр түрдің көбіне жеке бөлінген жад блогы болады.

Деректер элементіне жүгіну үшін мастер 0-ден 65535-ке дейінгі ауқымды пайдаланады. 1-деректер элементі 0x0000 мекенжайында орналасады. 2-деректер элементі 0x0001 мекенжайында болады. 65536-деректер элементі 0xFFFF мекенжайында орналасады. Құрылғыларда барлық 65536 деректер элементінің болуы міндетті емес екенін ескеріңіз; іс жүзінде Modbus пайдаланатын қашықтағы енгізу/шығару терминалдарының көпшілігінде бұл ең жоғары шектен әлдеқайда аз элемент болады.

 

Modbus транзакциялары

Modbus-та деректердің қалай көрсетілетінін түсінгеннен кейін, транзакцияларды егжей-тегжейлі қарастыра аламыз. Бұл PDU тұрғысынан қарастырылады, өйткені PDU байланыс деңгейіне тәуелсіз.

Modbus транзакцияларында он алтылық таңбалар нұсқаулары пайдаланылады, мұнда бір 8 биттік байт 0x00 пішімінде болады, ал әр таңба үшін 0-ден F-ке дейінгі ауқым қолданылады. Демек, 16 биттік регистр екі байтқа тең және 0x0000 пішімінде көрсетіледі. 

Modbus спецификациясы PDU-дың үш түрін анықтайды:

  • Modbus сұрауы
  • Modbus жауабы
  • Modbus ерекшелік жауабы

Master құрылғысы функция кодын пайдаланып сұрауды бастайды, ал slave құрылғысы сол сұрауға жауап ретінде жауап жібереді. Сәтті жауап master құрылғысы жіберген функция кодын қайталайды. Ерекшелік жауабы сол функция кодымен жауап береді, бірақ бір нәрсенің дұрыс болмағанын көрсету үшін msb (ең маңызды бит) жоғары күйге орнатылады. 

Modbus спецификациясы бірнеше функция кодын анықтайды. 0x01 функция коды — Coil-дарды оқу функциясы.

4-суретте coil-дарды оқу сұрауы мен жауабының ықтимал үлгісі көрсетілген. Modbus master құрылғысы 0x01 функция кодымен (Coil-дарды оқу) бірінші деректер элементінен (0x0000 мекенжайы) бастап, бір ғана coil-ды оқуға арналған сұрау жібереді. Coil-дарды оқу функциясы бір уақытта 2000-ға (0x7D0) дейін coil-ды оқуға мүмкіндік береді. 

 

4-сурет. Coil-дарды оқу транзакциясы

 

Егер операция сәтті орындалса, slave құрылғысы сол функция кодымен және өзі жауап беретін coil санының мәнімен жауап береді. Coil күйі n байтты құрайды, мұнда әрбір бит тиісті coil-дың ҚОСУЛЫ (1) немесе ӨШІРУЛІ (0) екенін көрсетеді.

Бұл жағдайда 0x0000 мекенжайындағы coil ҚОСУЛЫ тұр. Егер сұрау сәтті орындалмаса, ерекшелік жауабында msb мәні жоғары күйге орнатылған функция коды (0x81) және ақаудың себебін түсіндіретін ерекшелік коды болады. 0x02 ерекшелік коды жарамсыз деректер мекенжайы пайдаланылғанын, яғни осы slave құрылғысының жадында 0x0000 мекенжайында coil жоқ екенін білдіреді. 

Келесі мысалда бір регистрді жазу транзакциясы (0x06 функция коды) көрсетілген. Мұнда master құрылғысы 0x00FF мекенжайына 0xA0A0 деректерін жазуды сұрайды. Slave құрылғысының жауабы — сұраудың жай ғана қайталануы.

Мұндағы ерекшелік жауабының мысалында msb мәні жоғары күйге орнатылған функция коды және 0x04 ерекшелік коды көрсетілген. Бұл код slave құрылғысы сұрауды орындау кезінде қалпына келмейтін қате орын алғанын білдіреді. 

 

5-сурет. Бір регистрді жазу транзакциясы 

 

Барлық Modbus функция кодтары жоғарыда көрсетілген екі мысалға ұқсас үлгі бойынша жұмыс істейді.

6-суретте ерекшелік жауаптарына арналған кең таралған функция кодтары мен ерекшелік кодтарының тізімі көрсетілген. Қосымша ақпарат алу үшін Modbus спецификациясын қараңыз. 

 

6-сурет. Функция кодтары және ерекшелік кодтары

 

Қорытынды

Modbus PLC контроллерлеріне енгізу/шығару банктері, терминалдық құрылғылар және басқа контроллерлерді қоса алғанда, қашықтағы құрылғылардың барлық түрлерімен байланысуға мүмкіндік береді. Бұл дискретті және бүтін сандық ақпаратты оқу мен жазудың стандартты әдісіне сүйеніп, цифрлық деректерді тасымалдауға қатысты дерлік барлық жағдайды қамтиды.

Modbus бүгінгі таңда өнеркәсіптегі стандарт болып саналады және қазіргі басқару жүйелерінің көпшілігінен бұрын пайда болғанына қарамастан, осы уақытқа дейін лицензиялық төлемсіз қолданылатын ең кең таралған өнеркәсіптік протокол болып отыр. Ол бүкіл әлемдегі зауыттар мен өндіріс орындарында кеңінен қолданылады және ұзақ уақыттан бері пайдаланылып келе жатқанына қарамастан, әлі талай жыл бойы өзектілігін сақтайтыны сөзсіз.

 

2019 жылы жарияланған түпнұсқа мақала

Leave a comment

Please note, comments need to be approved before they are published.