6.3. MODBUSi seeria
Esimesed MODBUS-võrgud põhinesid asünkroonsetel jadasideliinidel ja neid kutsuti MODBUS RTU Ja MODBUS ASCII . Peal füüsiline tase nad kasutavad standardseid jadaliideseid koos märgiedastusrežiimiga (vt joonis 6.1).
Praegu nimetatakse neid võrke MODBUS-IDA-s MODBUS üle jadaliini ja neid on kirjeldatud vastavas standardis. See määrab reeglid ja soovitused kasutamiseks lingi ja füüsilisel tasandil.
Kuna MODBUS RTU/ASCII võrgul võib olla siini topoloogia, on siini juurdepääsumeetod määratletud ülem-/alluv-mudelina. MODBUS RTU ja MODBUS ASCII võrkudes on põhiprotsess alati klient ja alamprotsessid serverid. See tähendab, et ülem saadab päringuid ja orjad töötlevad neid. Selle päringu saab adresseerida kas üksikule sõlmele või kõigile siinis olevatele orjadele (edastus).
Peal lingi tasemel MODBUS RTU/ASCII kasutab sõlme ID-le orienteeritud adresseerimist.Igal Slave'il peab olema oma kordumatu aadress (1-247), ülem ei ole adresseeritav. Üksikute taotluste jaoks moodustab juht (koos kliendiprotsessiga) päringusõnumiga raami ja saadab selle määratud aadress. Ori (koos serveriga Protsess) võtab selle kaadri vastu ja töötleb sõnumit. Pärast selle töötlemist moodustab Slave vastusesõnumiga raami ja saadab selle tagasi juhile. Vastusteate kaader toimib ka kinnitusraamina, mida Master ootab Slave'ilt ajalõpu määratud aja jooksul.
Levitaotluste puhul kasutatakse aadressi 0. Saatetaotlused ei nõua kinnitust, seega ei oota ülem pärast levikaadri saatmist vastuse kaadrit.
6.3.1. Andmelingi kiht
Joonis 6.11 näitab üldine vorm raam MODBUS Serial. Pange tähele, et raamide ja tüübi erinevus kontrollsumma pole siin loetletud, kuna see sõltub ASCII või RTU edastusrežiimist. Seadme aadressi väljal näitab Master (päringu esitamisel) adressaadi aadressi ja Slave (vastamisel) selle aadressi. MODBUS PDU välju on kirjeldatud ülal.
Ajastusskeem joonisel 6.12 näitab kolme tüüpilised olukorrad Master-Slave mudeli töö MODBUS Serialis. Esimene olukord on tüüpiline vahetus unicast-režiimis, teine on leviedastusrežiimis, kolmas on Slave'i reaktsioon sideveale.
6.3.2.
MODBUS RTUSee režiim kasutab 11-bitises sümbolis 8 bitti andmeid, mis võimaldab edastada ühe baidi sümboli kohta. Märgivorming RTU režiimis: 1 algusbitt, 8 andmebitti (kõigepealt edastatakse madal bitt), 1 paarsusbitt + 1 stoppbitt bitti või pariteeti pole + 2 stopbitti.
MODBUS RTU kaadrivorming on näidatud joonisel 6.13. Kaadrite eristamine toimub märkidevaheliste pauside abil. Uus kaader ei tohiks siinile ilmuda varem kui 3,5 * Тс eelmisest, kus Тс on ühe märgi edastusaeg. Kui signaali puudumine liinil (vaikuse intervall) on suurem kui 1,5 * Tc, tuvastab vastuvõtja kaadri lõpu. Teisest küljest toob tõrke kaasa ka uue kaadri ilmumine varem kui 3,5 * Tc.
Aadressi ja funktsiooni koodi väljad RTU režiimis hõivavad igaüks ühe baidi, kuna iga bait edastatakse ühe märgina. Kontrollsummana kasutatakse kahte CRC16 algoritmi abil arvutatud baiti.
6.3.3. MODBUS ASCII
IN see režiim sõnumi iga bait edastatakse kahe ASCII-märgina nende kuueteistkümnendsüsteemist, st. baidi 03 16 väärtus edastatakse märkide "0" ja "3" ASCII koodina (0110000 0110011) Seega edastatakse andmebaidid, funktsioonikood ja kontrollvälja bait koodidena
märgid 0-9, A-F. Märgivorming ASCII-režiimis: 1 algusbitt, 7 andmebitti (kõigepealt edastatakse kõige vähem oluline bitt); 1 paarsusbitt + 1 stoppbitt või paarsuse puudumine + 2 stoppbitti.Raami formaat on näidatud joonisel 6.14. Nagu näete, kasutatakse kaadrite eristamiseks algusmärki ":" ja lõppjada "CR LF". Siinis olevad vastuvõtjad jälgivad pidevalt märki ":", mis näitab üheselt kaadri algust. Kui see on vastu võetud, püüavad vastuvõtjad aadressivälja jne. See on väga lihtne sünkroonimismeetod, mis võimaldab teil märkidevaheliste pauside suhtes (kuni 1 sekund) kriitiliselt suhtuda. Slave-aadress ja funktsioonikood sisaldavad kumbki kahte tähemärki, vastavalt ühe baidi väärtusele. Järgmisena tulevad n * 2 andmemärki, kus n on andmebaitide arv. ASCII-režiimis kasutatakse kontrollsumma arvutamiseks LRC-algoritmi. Lisaks tehakse kontrollsumma kaadri kõigi baitide kohta, välja arvatud tähemärkide algus- ja lõppjada.
ASCII-režiim seab riistvarale vähem nõudeid, kuna kasutab kaadrite eraldamiseks algus- ja järeljada, ning ei ole tundlik märkidevaheliste oluliste pauside suhtes. Kuid need eelised kajastuvad selle puudustes. RTU-režiim on kaadritevaheliste intervallide osas nõudlikum, kuid on palju produktiivsem
ASCII.Näide 6.4. MODBUS. Alampollimise aja arvutamine MODBUS-RTU-s.
Ülesanne . Koostage MODBUS RTU jaoks päringu- ja vastusesõnumite vormingute kaadrid ja arvutage 10 analoogse 16-bitise muutuja jaoks 4 alamseadme jaoks kogu pollimisaeg (joonis 6.15). Bitine andmeedastuskiirus - 19200 bps. Master Client Process (TSX Premium) ja Slave Server Processes (TSX Micro PLC) võtavad vastu sõnumeid tsükli alguses ja saadavad sõnumeid tsükli lõpus. Põhitsükli aeg = 10 ms, Slave - 5 s.
Täitke ülesanne.
TSX Micro sisemistele analoogmuutujatele pääseb juurde funktsiooni 03 või 04 kaudu, seega näeb kaadrivorming välja nagu Joonis 6.16.Arvestades, et ka teiste kaadrite struktuur on sarnane, pole mõtet nende formaati esitada.
Sarnaselt joonisele 6.12 koostame vahetuse ajadiagrammi (joonis 6.17).
Kliendirakenduse poolelt genereeritakse sidefunktsiooni abil päringusõnum, mille andmed saadetakse toimingutsükli lõpus sidepordi kaudu ja tsükli alguses võetakse pordist vastu. Selline kliendipoolne käitumine on kooskõlas paljude erinevate PLC-de rakendustega.
TSX-is on Micro MODBUS-server rakendatud operatsioonisüsteemi tasemel. Teostuse eripära seisneb selles, et süsteem võtab sidepordist vastu MODBUS-i päringuid tsükli alguses ja saadab vastuseteateid tsükli lõpus.
Tuleb märkida, et MODBUS-serveri juurutamist saab toetada sidemooduli tasemel ja andmevahetus seadme enda mäluga toimub sidepuhvrite kaudu. Sel juhul on MODBUS-serveri vastus palju kiirem ega sõltu programmitsüklist. Teist tüüpi süsteemide tehinguaegade arvutamiseks peate tutvuma nende rakendamise üksikasjadega.
Joonisel 6.17 on näha, et kaadri saabumine jõuab kuhugi tsükli sees. See tähendab, et nende töötlemine ja vastuse genereerimine võtab umbes 1,5 tsüklit. Tuleb mõista, et see on keskmine väärtus halvim hinnang parem on reserveerida 2 tsükliaega (st kui kaader saabus kohe pärast sidepordi pollimist). Seega on ühe PLC, näiteks PLC1 (TT1) tehinguaeg võrdne:
TT1=C5+T1.req+2*C1+T1.res+C5*2 (6.1)
TT1 arvutamisel võetakse arvesse 2 tsüklit, mille alamseade kulutab päringusõnumile vastuse genereerimiseks. Kui tehingut teostataks mitte perioodiliselt, nagu vastavalt ülesande seisukorrale, vaid sündmuse toimumisel, siis oleks tehingu käigus vaja kaasata ka teine Master-tsükkel. Kõigi alluvate küsitlusaega on lihtne kuvada:
Тall=C5*9+C1*2+C2*2+C3*2+C4*2+T1.req+T1.res+ T2.req+T2.res+ T3.req+T3.res+ T4.req+T4.res (6.2)
Arvestades, et alamtsüklid on samad ning kõigi alamseadmete päringu- ja vastusekaadritel on sama struktuur, üldine valem näeb välja selline:
TTall= C5*9 + C1*8 + (T1.req+T2.req)*4 (6,3)
Arvutame ajad T1.req ja T2.req.
Kaadri edastusaega (Tframe) saab ligikaudselt arvutada kaadris olevate sümbolite arvu (Nsymb) ja ühe sümboli (Tsymb) edastusaja järgi:Tframe=Nsymb*Tsymb (6.4)
Ühe märgi edastusaeg arvutatakse:
edastusaeg sümboli kohta = bittide arv sümboli kohta/bitikiirus;
Kaadri edastusaeg võrdub (jagamine joonis 6.16 ja joonis 6.17):
T1.req=8*(11/19200)=4,58 ms
T1.res=25*(11/19200)=14,33 ms
TTall=90+40+ (4,58+14,33)*4= 206 ms.
Seega 10 muutuja küsitlemiseks 4 Slave'ist kiirusega 19200 bps kulub ligikaudu 206 ms. Kui on vaja perioodilist hääletamist, on soovitatav broneerida kindel aeg, näiteks veel 100 ms.
Mõnel juhul langeb MODBUS Client funktsioonide rakendamine operatsioonisüsteemile ja juurdepääs neile PLC programmis toimub liidese sidefunktsioonide kaudu. Eelkõige on see tüüpiline enamiku Scneider Electricu PLC-de jaoks (Momentum, Quantum, TSX Micro, TSX Premium, M340). Paljudes teistes süsteemides – kliendi pool rakenduse tase peab olema PLC-programmis täielikult määratletud ja liides on ette nähtud ainult sidepordiga vahetamiseks. Sel juhul pakub süsteem teenuseid sõnumite saatmiseks ja vastuvõtmiseks (mille genereerib ja analüüsib kasutajaprogramm ise) ning kontrollsumma genereerimiseks ja kontrollimiseks.
Vaatame näidet.Näide 6.5.
MODBUS. MODBUS-kliendi juurutamine TSX Twidos.Ülesanne
. Kirjutage programmifragment Twido PLC-sse, et lugeda Slave'ist aadressiga 1 3 registrit (joonis 6.18).![](https://i2.wp.com/fb.asu.in.ua/_/rsrc/1304688073565/seti/modbus-rtu-ascii-rus/%D1%80%D0%B8%D1%81.6.18.jpg)
Lahendus . Twidos tuleb MODBUS-i kliendipool rakendada selle kaudu universaalne funktsioon EXCHx, mis saadab ja/või võtab vastu andmeid sidepordi numbri x kaudu. Funktsiooni parameetrid on sõnade tabel (%MW), mis sisaldavad funktsiooni juhtimisandmeid, saadetavaid andmeid ja vastuvõtmiseks vajalikku puhvrit. Kui vahetus toimub sidepordi 2 kaudu, on funktsioonikutsel järgmine vorming:
EXCH2 %MWy:n,
kus y on valitud tabeli esimese muutuja number, n on sõnade arv tabelis.
Tabeli vorming, st andmed, mida tuleb täita, ja vastuvõetav andmeala on igat tüüpi side puhul sama. Funktsioonide 03/04 (N sõna lugemine) MODBUS-RTU kaudu on see tabel tabelis 6.2 näidatud kujul.
Parameetritabel koosneb 3 osast – alamtabelitest. Funktsiooni juhttabel määrab funktsiooni enda parameetrid. Nii et 0. sõna kõrges baidis on märgitud, et see funktsioon töötab mõlemas suunas, st. Pärast andmete saatmist peate ootama vastust. Sama sõna madal bait näitab edastustabeli pikkust (antud juhul 6 baiti), et süsteem teaks, millised baitid on vaja edastada (2. sõnast 4. sõnani) ja kust algab vastuvõtupuhver. (alates 5. sõnast)
. Nihked edastamisel ja vastuvõtmisel on vajalikud puhvrites olevate andmete joondamiseks sõnadega.Ülekandetabelis on päring ise, st. raam ilma CRC koodita. Vastuvõtu tabel on puhver, mille süsteem täidab vastuse kaadriga, kui tulemus on positiivne. Seega on enne selle funktsiooni kasutamist vaja konstrueerida päringu- ja vastuseraam, välja arvatud CRC väli (joonis 6.19)
Tabel 6.2
Parameetrite tabel
Indeks tabelis |
Kõrge bait |
Madal bait |
|
Comm juhtlaud funktsiooni |
01 (funktsiooni tüüp saatmine+vastuvõtmine) |
06 (ülekandelaua pikkus) |
|
03 (vastuvõtu eelarvamus) |
00 (käiguvahetus) |
||
Ülekandelaud |
Orja aadress |
03 (funktsiooni number) |
|
algusregistri aadress |
|||
registrite arv |
|||
Vastuvõtu tabel (sõnum-vastus) |
Orjade aadressid |
03 (funktsiooni number) |
|
00 (bait nihke jaoks) |
baitide loendur |
||
esimene registreerimine |
|||
teine register |
|||
… |
... |
||
N+6 |
N-s register |
Nagu näete, sisaldab päring 6 baiti. See summa tuleb sisestada tabeli 0. sõna madalasse baiti. Vastus peaks olema 9 baiti. Kui vastusekaadri baidid on paigutatud sõnade jadasse (Schneider Electric PLC-s adresseeritakse mälu sõnadega), siis esimesena vastuvõetud registri kõrge bait (tingimuse järgi on see %MW100) asub puhvri 2. sõna madalal baidil ja vastuvõetud registri madal bait on sisse lülitatud
3. sõna kõrge bait puhvris. Seega on kõik aktsepteeritud sõnad nihutatud ja neid on raske lugeda. Selle probleemi lahendamiseks on funktsiooni parameetrite tabelis vastuvõtu nihke väli, mis määrab vastuvõtupuhvris oleva baidinumbri, mis nihutab kogu jada.Programmi fragment näeb välja selline nagu joonisel 6.20.
Ülemine LD-ahel on mõeldud funktsioonide juhtimistabeli ja ülekandetabeli täitmiseks.
Teises ahelas kutsutakse funktsiooni otse välja. Muutuja %MSG2.D tagastab Boole'i väärtuse "1", kui funktsiooni EXCH2 töödeldakse ja tulemus vastu võetakse. Selle kasutamine takistab võrgu üleujutamist liigse kaadrite arvuga, kuna eelmisele päringule ei vastata või aeg ei ole möödunud, uus taotlus ei saa saata.
Viimane ahel on mõeldud lugemistulemuse kirjutamiseks muutujatele %MW0:3 (tabel 3 sõnaga alates %MW0). Muutuja %MSG2.E võrdub 1-ga, kui funktsioonikutses on viga.
6.3.4.
MODBUS Seriali füüsilise kihi rakendamineErinevalt algsest spetsifikatsioonist, mis piirdus kaadri kirjeldusega, kirjeldab MODBUS-IDA standard ka reegleid võrgu rakendamiseks füüsilisel kihil. MODBUS over Serial Line põhineb kasutamisel jadaliideseid RS-485, RS-422 ja RS-232.
RS-485 jaoks on määratletud topoloogia – see siin on seadmete ühendamiseks kolm võimalust (joonis 6.21):
-
Otse magistraalkaabli külge, harusid pole;-
Läbi passiivse ühenduskarbi ja harukaabli (Derivation);-
Läbi aktiivkarbi ja konkreetse harukaabli.
Kaablite ja võrguelementide vahelistel liidestel on järgmised tähised (vt joonis 6.21): ITr - magistraalkaabli liides; IDv - liides seadme ja passiivkasti vahel; AUI - liides seadme ja aktiivse kasti vahel; LT - liinilõpetajad.
Bitikiirused on määratletud kui 9600 bps ja 19200 bps (vaikimisi). Muud kiirused on valikulised.Kasutatakse NRZ kodeerimismeetodit.
RS-485 kasutamisel määratleb standard reeglid seadmete ühendamiseks 2- ja 4-juhtmelise skeemi abil, samuti reeglid 2- ja 4-juhtmeliste liideste ühilduvuse kohta ühel real. Allpool käsitleme ainult 2-juhtmelist ühendust, mille toetamine on kohustuslik.
Sisuliselt on 2-juhtmeline ühendus tegelikult 3-juhtmeline ühendus, kuna lisaks liinidele A-( D0 ) ja B+( D1 ) kasutatakse ka ühine joon C( Levinud ), mis on kohustuslik (joonis 6.22).Seadmete koguarv on piiratud: 32 seadet ühel RS-485 segmendil ilma repiiteriteta (reiiterite kasutamine on lubatud). Kaabli maksimaalne pikkus sõltub kiirusest, kaabli tüübist, koormuste arvust ja võrgu konfiguratsioonist (2- või 4-juhtmeline). 9600 bitikiiruse ja AWG26 kaabli jaoks maksimaalne pikkus piiratud 1000 meetriga. Langetav kaabel peab olema lühem kui 20 m. Kui kasutatakse n-pordiga multiport-karpe, on iga kaabli pikkus piiratud 40/n m.
Ühine signaalijuhe (Common) tuleb ühendada ekraaniga ühes punktis siinil, tavaliselt peasõlme või selle harukarbi lähedal.
Laine peegelduse summutamiseks paigaldatakse liini otstesse D1 ja D0 vahel liinilõpmed (LT). Terminaatoreid on lubatud paigaldada ainult peakaablile.
Terminaatoritena saab kasutada järgmist:-
Takisti nimiväärtusega 150 oomi ja võimsusega 0,5 W;-
Seeriaühendusega kondensaator (1 nF, minimaalselt 10 V) ja 120 oomi takisti (0,25 W), kasutades liini polarisatsiooniMODBUS Serial standard määratleb reeglid kaitsva nihke (polarisatsiooni) rakendamiseks, mis näevad ette 5 V toiteallika ühendamise D1 ja D0 vahel läbi PullUp ja PullDown takistite, et säilitada liinil loogiline “1”, kui edastust pole.
Takisti väärtus valitakse sõltuvalt seadmete arvust vahemikus 450 oomi kuni 650 oomi (suure hulga 650 oomi). Kaitsenihet teostatakse ainult ühes punktis joonel, tavaliselt juhtpoolel. Rakendatud polarisatsiooniga seadmete maksimaalne arv väheneb 4 võrra võrreldes polarisatsioonita süsteemiga. Polariseerimine on valikuline. Loogikasignaali puudumisel võib side seadmetes siiski ebaõnnestuda. Kui see on nii, siis tuleb polarisatsioon rakendada iseseisvalt või kasutada olemasolevaid ahelaid, kui seadmed seda pakuvad.Standard määratleb ka mehaanilise liidese, st. pistikute tüübid, pistikud ja signaalide vastavus kontaktidel. Mehaanilise klemmina saate kasutada klemmiplokki, varjestatud RJ-45 (joonis 6.23) või varjestatud SUB-D9 pistikut (joonis 6.24).Tabelis 6.3 on näidatud kontaktide määramine 2-ga pistikutele juhtmega ühendus RS-485 kaudu ja tabelis 6.4 RS-232 kaudu
Tabel 6.3
Pistikukontaktide otstarve RS-485 kaudu ühendamisel
kontaktnumbrid |
saadavuse nõuded |
IDv ahel |
ITr kett |
nimi RS-485 |
kommentaar (vt jaotist 3) |
|
RJ45 |
SUB-D9 |
|||||
valikuline |
P.M.C. |
com režiimi juhtimine sadamasse |
||||
Tingimata |
D1 |
B/B" |
pinge V1, V1>V0 logi jaoks. "1" |
|||
Tingimata |
D0 |
A/A" |
pinge V0, V0>V1 logi jaoks. "0" |
|||
eelistatavalt |
Toide 5…24 VDC |
|||||
Tingimata |
Levinud |
Levinud |
C/C" |
Toide ja signaali maandus |
Tabel 6.4
Pistikukontaktide otstarve RS-232 kaudu ühendamisel
DCE (modem) |
vooluring |
DTE |
||||||
kontaktnumbrid |
saadavuse nõuded |
Nimi |
kommentaar (vt jaotist 3) |
allikas RS-232 |
saadavuse nõuded |
numbrid kontaktid |
||
RJ45 |
SUB-D9 |
RJ45 |
SUB-D9 |
|||||
Tingimata |
TxD |
Edastatud andmed |
<< DTE |
Tingimata |
||||
Tingimata |
RxD |
Vastuvõetud andmed |
DCE >> |
Tingimata |
||||
valikuline |
CTS |
Kustuta saatmiseks |
DCE >> |
valikuline |
||||
valikuline |
RTS |
Taotlus saata |
<< DTE |
valikuline |
||||
Tingimata |
Levinud |
Signaal Sage |
Tingimata |
2-juhtmelise ühenduse tüübi kaablitena määratleb standard topeltvarjestatud keerdpaari kategooriasse 4 (kuni 600 m) või 5 (kuni 1000 m), kus üks paar sisaldab tasakaalustatud signaale D0 ja D1 ning teine ühist. signaali maandus. Soovitatavad kaablivärvid: D1 kollane; D0 pruun; Harilik hall.
Näide 6.6.
MODBUS. MODBUS RTU võrguühenduse skeem.Ülesanne
. Joonistage võrguühenduste skeem MODBUS RTU siini 2-juhtmelise rakendamise jaoks järgmiste sõlmedega:-
PLC1: VIPA CPU 115SER 6BL32 (Master) sisseehitatud kaudu jadaport protsessori moodul;-
PLC2: TSX Twido TWDLMDA40DTK (Slave) sidemooduli TWD NOZ 485T kaudu-
PLC3: TSX Twido TWDLMDA40DTK (Slave) sidemooduli TWD NOZ 485T kauduLahendus
. Joonisel 6.25 on näidatud antud ülesande võrguühenduste skeem. Võrgurajatiste spetsifikatsioon on toodud tabelis 6.5.Nagu on näha jooniselt 6.25, on PLC1 ühendatud siiniga läbi passiivkarbi, õigemini läbi klemmiploki, mis on põhimõtteliselt samaväärne. Selle põhjuseks on asjaolu, et ühendused PLC-ga tehakse 9-kontaktilise SUB-D pistiku abil, mis eeldab oma kaabli väljatöötamist, mille ühendusskeem (ristmik) pistiku ja klemmiplokiga on näidatud. põhiskeemi all.
Seega tuleb KM2 kaabli juhtmed KK1 pistiku külge joota.
SER-i pesa tihvtide määramine ei kattu standardse pesaga. Tihvtid 8 ja 3 (vastavalt A (D0) ja B (D1)) lähevad ühte paari, seejärel ühendage XT1:1 ja XT1:2; 5 ja 6 (vastavalt M5V (-5 V) ja P5V (+5 V)) lähevad teise KM2 kaabli keerdpaari külge. Kaitsepinge (asümmeetria) rakendamiseks vastavalt standardile on vajalik 5 V toide. PealegiM5Von signaali maandus (tavaline).Kaabel KM2 ühendatakse XT1-ga vastavalt joonisel 6.25 näidatud skeemile. Kaabli varjestus ühendatakse signaalimaandusega vastavalt standardi nõuetele. Tuleb meeles pidada, et selles süsteemis olev VIPA PLC on juht, seetõttu tuleb selles kohas rakendada kaitsenihke ja varjestus-maaühendused. Kaitse eelpinge toodetakse kasutades 5V võimsust, mis võetakse SER-pordist ja kahest takistist.
Tabel 6.5.
Võrgurajatiste spetsifikatsioon
№ |
Määramine |
Nimi |
Viide |
Kolic |
Märge |
PLC1 |
PLC VIPA 100 |
VIPA CPU 115SER 6BL32 |
1 arvuti. |
VIPA |
|
PLC2, PLC3 |
Twido PLC |
TWDLMDA40DTK |
2 tk. |
Schneider Electric |
|
MK1, MK2 |
sidemoodul RS-485 liidese realiseerimiseks, kruviühendus |
TWD NOZ 485T |
2 tk. |
Schneider Electric |
|
KK1 |
9-kontaktiline SUB-D isane pistik |
1 arvuti. |
|||
XT1 |
4-kontaktiline klemmiplokk |
1 arvuti. |
|||
TL1, TL2 |
liini lõpetajad |
2 tk |
on toodetud pos. 7 ja 8 |
||
Takisti 120 oomi (0,25 W) |
2 tk. |
sisaldub punktis 6 |
|||
Kondensaator 1 nF (>10 V) |
2 tk. |
osana pos 6 |
|||
Ru, Rd |
Takisti 500 oomi (0,25 W) |
2 tk |
|||
KM1 |
AWG26 |
300 m |
|||
KM2 |
topeltvarjestatud kaabel keerdpaar 5. kategooria AWG26 |
2 m |
|||
KM3 |
topeltvarjestatud keerdpaarkaabel, kategooria 5 AWG26 |
300 m |
PLC2 ja PLC3 on siiniga ühendatud klemmiplokiga sidemooduli abil. See võimaldab teil luua ühenduse ilma harudeta. Kuid plokk ei paku varjestusele ühenduskohta, seega varjestatakse kaabel eraldi.
Realiseeritakse liinilõpetajad jadaühendus takistid ja kondensaatorid, sest siin on kallutatud.
Praegu kasutatakse MODBUS Seriali nii kontrolleri tasemel kui ka anduri tasemel (hajutatud välisseadmete jaoks). Selle kasutamine on problemaatiline, kui bussis on mitu seadet
SCADA/ HMI, mis sisse klient-server arhitektuur peavad olema Kliendid, sest MODBUS RTU/ASCII-s saab kliendiks olla ainult Master. Kuid isegi sellises olukorras on võimalik korraldada andmete edastamine kõikidesse abivajavatesse sõlmedesse, kui need seda režiimi toetavad.Ülaltoodu põhjal saate valida MODBUS Serial siini, kui:
-
kõik serveriseadmed toetavad Slave-režiimis MODBUS RTU / ASCII-d;-
vaja on ainult ühte kliendiseadet, mis peab algatama siinil vahetusi, toetades ülemseadmena MODBUS RTU/ASCII;-
andmete taastamise kiirus- rahuldab probleemi tingimusi;pole vaja
Noh, on aeg kaaluda, milline on protokoll Modbus TCP protokollist erinev Modbus RTU. Kuna erinevusi pole väga palju, ei tule artikkel väga pikk.
Niisiis, eelmises funktsioonide artiklis Modbus RTU saate teada, mis funktsioonid on ja nende kahendvormingus. Nüüd tasub öelda, mis see on Modbus TCP kuidas seda kasutatakse ja mille poolest see standardist erineb Modbus RTU.
ModbusRTUTCP kauduühend
Lihtsaim viis vahetada Modbus sõnumeid võrgu kaudu – lihtne edastada Modbus RTU paketid kaudu TCP pesa(ühend). Sel juhul on paketivorming sama, mis puhul Modbus RTU protokolli. Põhimõtteliselt võib see seda tüüpi protokolli lõppeda.
ModbusTCP
Vahetuseks Modbsu sõnumeid üle võrgu otsustas kasutada muudetud protokolli. Võtsime standardse Modbus RTU ja muutis seda veidi. Esiteks eemaldasime sellest viimased 2 baiti CRC16. Kuna iga TCP/IP pakett sisaldab oma kontrollsummat, otsustasime, et seda pole vaja uuesti kontrollida. Lisaks eemaldati esimene bait Orja ID. Põhimõtteliselt, nagu hiljem näha, seda ei eemaldatud, vaid lihtsalt nimetati ümber. Need on baidid, ilma Orja ID Ja CRC16 helistas PDU – protokolli andmeüksus.
Näiteks võtame taotluse Modbus RTU, mis loeb mitut HOIDMINE registreerib seadmest nr 17 (alluva ID = 17)
11 03 006B 0003 7687Nüüd eemaldame esimese ja viimase 2 baiti. Saame PDU!
03 006B 0003Sellega tundub kõik selge. Nüüd, et saada täispakett Modbus TCP peame lisama ees MBAP päis – Modbusi rakenduse päis. Need. peame lisama mõne päise. See päis sisaldab Tehingu ID, Protokolli ID, Pikkus Ja Üksuse ID.
Tehingu ID– 2 baiti, mille klient määrab iga päringu kordumatuks tuvastamiseks. Need. see on lihtsalt number vahemikus 0 kuni 65535, mis on iga päringu jaoks kordumatu.
Protokolli ID– 2 baiti, mis määravad protokolli versiooni. Praeguses rakenduses peaks alati olema 0x00 0x00
Pikkus– 2 baiti, mis määravad paketi pikkuse (välja arvatud baidid Protokolli ID, Tehingu ID Ja Pikkus)
Üksuse ID– selle käsuga küsitava seadme kordumatu aadress. Identselt Orja ID.
Väike kõrvalepõige adresseerimise kohta. See võib tunduda ebavajalik, kuna TCP ühendus saab määrata ainult kindlale IP-aadressile ja pordile. Need. meil on juba konkreetne serveri aadress, seega määramine Üksuse ID pole päris selge.
Kuid tegelikult on üsna tavaline, et mõni server lihtsalt marsruudab Modbus RTU päringud teistele seadmetele, mis on sellega ühendatud erinevaid kanaleid(LAN, jadaport, CAN-liides). Seetõttu saab klient kasutada Modbus TCP server lüüsina ( Värav), et suhelda selle taga olevate seadmetega.
Näide Modbus TCP serverist, mida kasutatakse lüüsina päringute ümbersuunamiseks Modbus RTU seadmetele
Siin on näide elust. On olemas teatud seade, mis põhineb Linuxil. See seade ulatub välja Modbus TCP server. Iga klient saab pordi 502 avaliku IP-aadressiga ühenduse luua ja algatada Modbus TCPühend. Sellele Linuxi seade andurid on ühendatud RS485 jadapordi kaudu. Andureid on palju, need on väga lihtsad ja neid ei saa Internetiga ühendada, neil on ainult RS485 port ja nad saavad aru ainult Modbus RTU. Sellepärast kliendid saadavad Modbus TCP päringud Üksuse ID andurid sisse Modbus TCP Server. Server dekodeerib Modbus TCP päring ja teisendab selle Modbus RTU ja saadab RS485 porti. Pärast seda, kui andur sellele reageerib, muundub see Modbus RTU vasta sisse Modbus TCP vastata ja saadab selle tagasi Modbus TCP taotluse algatanud kliendile. Seega saate vaid ühe avaliku IP-aadressiga veebis küsitleda sadu andureid, mida ei saa isegi Internetti või kohalikku võrku ühendada.
Ja nüüd visuaalne diagramm, kuidas see erineb Modbus RTU päring alates Modbus TCP nõuda.
Vaatame kahe päringu baitide näidet:
Modbus RTU: 11 03 006B 0003 7687 Modbus TCP: 0001 0000 0006 11 03 006B 0003Vastuse näidis:
Modbus TCP: 0001 0000 0009 11 03 06 AE41 5652 4340 Modbus RTU: 11 03 06 AE41 5652 4340 49ADNagu näete, teisendage taotlused vahel Modbus RTU Ja Modbus TCP väga lihtne. Kuigi rakendamine Modbus RTU TCP võib tunduda lihtsaim viis taotluste suunamiseks, kuid tegelikult Modbus TCP on mitmeid positiivseid punkte:
- Pole vaja arvutada CRC16
- Vastuse/päringu paari on võimalik tuvastada kasutades Tehingu ID
- Saate hõlpsasti lisada oma protokolli versioone, muutes konstanti Protokolli ID
Modbusi protokolli sõnumi struktuur on järgmine:
- alam aadress on seadme aadress, millele seda sõnumit Modbusi protokoll. Seadmed vastavad ainult neile spetsiaalselt adresseeritud sõnumitele. Vastus algab alluva aadressiga. Aadress varieerub vahemikus 1…247. Aadress 0 Modbusi protokolli teates on reserveeritud levisõnumitele, 248...255 on reserveeritud aadressid.
- funktsiooni number – 1 bait andmeid.
- andmed – see väli sisaldab teavet täidetava funktsiooni kohta või andmeid, mille alamseade saadab Modbusi protokolli ülemseadmele.
- vigade tuvastamise plokk (CRC) – kontrollsumma, mis arvutatakse kõigi eelmiste baitide põhjal, kasutades ümmarguse ja bittide kõrvaldamise algoritmi.
Pange tähele, et Modbus-protokolli kaudu lugemisel saate ühes sõnumis lugeda reas paiknevate diskreetsete või analoogsisendite ja -väljundite väärtusi, st määrata esimese väärtuse aadressi ja nende numbri.
Vaatame peamist standardfunktsioonid nende koodide järgi (kümnend- ja kuueteistkümnendsüsteemis):
1 (0x01) – mitme diskreetse väljundi lugemine
2 (0x02) - mitme diskreetse sisendi lugemine
3 (0x03) - mitme vaheregistri või analoogväljundi lugemine
4 (0x04) – mitme analoogsisendi lugemine
Kui näiteks päringus genereeritud diskreetsete sisendite arv ei ole kaheksakordne, ümardatakse väärtuste baitide arv väärtuseni suur pool ja vastavalt, et saada näiteks 15 diskreetse sisendi väärtusi, võrdub see arv kahe baidiga.
Enne Modbusi sõnumiandmeid edastatakse üks bait, mille väärtus on andmebaitide arv.
5 (0x05) - salvestage ühe väärtus diskreetne väljund
6 (0x06) - ühe analoogväljundi või registri väärtuse kirjutamine
Modbusi käsk koosneb aadressist ja tegelikust väärtusest (2 baiti). Tavaline vastus on Modbusi protokolli päringu kordamine.
15 (0x0F) - väärtuste kirjutamine mitmele diskreetsele väljundile
16 (0x10) - kirjutab mitme analoogväljundi või registri väärtused
Vastus koosneb registri algusaadressist ja muudetud väärtuste arvust.
Modbusi protokolli päringu/vastuse näide:
Edastusvead jagunevad kahte tüüpi - edastusmoonutused ja loogilised. Moonutust jälgib "vaikuse" aeg. Tavaline sõnumitevaheline aeg on aeg, mis kulub 3,5 tähemärgi edastamiseks. Kui Modbusi protokolli sõnumi edastamise ajal tekib üle 1,5 märgi pikkune paus, siis pakett tühistatakse.
Modbusi protokollis ilmnevad loogilised vead, kui alamseade ei saa teadet üldse vastu võtta või võtab selle vastu, kuid tekitab vea. Sel juhul diagnoositakse viga ajalõpu abil. Slave võtab päringu vastu, kuid ei saa seda töödelda (näiteks pääseb ligi olematule aadressile) – sel juhul saadetakse veateade.
Taotluse Modbusi veateate näide:
Standardsed Modbusi protokolli veakoodid:
01 - Funktsiooni ei saa alamseadmes töödelda.
02 - olematu andmeaadress.
03 – päringu andmevälja väärtus on salve jaoks kehtetu.
04 – Slave toimingu sooritamise katse ajal ilmnes saatuslik viga.
05 – Slave võttis taotluse vastu ja hakkas seda töötlema, kuid see võtab aega. See kood takistab kaptenil ajalõpu tõrget tegemast.
06 – alamseade on hõivatud käsu töötlemisega. Ülemseade peab sõnumi hiljem uuesti saatma, kui alamseade on vaba.
07 - Slave ei saa päringu kaudu funktsiooni täita. Kapten peab saatma taotluse diagnostiline teave või saada alluvalt veateavet.
08 - Slave proovib lugeda mäluala, kuid tuvastatakse paarsusviga. Kapten võib taotlust korrata, kuid tavaliselt on sellistel juhtudel vaja remonti.
Modbus TCP raami struktuur:
Kus:
Tehingu ID – kaks baiti
Protokolli ID – kaks baiti (neli nulli)
paketi pikkus - kaks baiti, järgnevate sõnumiväljade suurus
alam aadress – alamseadme aadress, millele Modbusi protokolli päring on adresseeritud.
Modbus TCP protokolli eripäraks on kontrollsumma puudumine, kuna transporditase TCP-protokoll kontrollib CRC-d. Seetõttu pole kontrollsumma kontrollimine RTU formaadis mõttekas.
Sellest artiklist saate teada Modbus TCP protokolli kohta, mis on Modbus RTU protokolli edasiarendus. Ingliskeelne versioon Artiklid on saadaval aadressil ipc2u.com.
Kuhu saata Modbus TCP käsk?
Etherneti võrgus on seadme aadress selle IP-aadress. Tavaliselt asuvad seadmed samas alamvõrgus, kus IP-aadressid on erinevad viimased numbrid 192.168.1.20 kui kasutatakse kõige tavalisemat alamvõrgu maski 255.255.255.0.
Liides on võrk Ethernet, andmeedastusprotokoll – TCP/IP.
Kasutatud TCP port: 502 .
Modbus TCP protokolli kirjeldus
Modbus TCP käsk koosneb Modbus RTU sõnumiosast ja spetsiaalsest päisest.
Modbus RTU sõnumist eemaldatakse SlaveID aadress alguses ja CRC kontrollsumma lõpus, mis moodustab PDU, Protocol Data Unit.
Allpool on näide Modbus RTU taotlusest saada AO analoogväljundi väärtus (hoidmisregistrid) registritest #40108 kuni 40110 seadme aadressiga 17.
11 03 006B 0003 7687
Loobume SlaveID seadme aadressist ja CRC kontrollsummast ning saame PDU:
03 006B 0003
Saadud PDU sõnumi algusesse lisatakse uus 7-baidine päis nimega MBAP Header (Modbus Application Header). Sellel päisel on järgmised andmed:
Tehingu identifikaator: Master määrab iga päringu kordumatuks tuvastamiseks 2 baiti. Võib olla ükskõik milline. Slave kordab neid baite vastuses, kuna Slave'i vastuseid ei pruugita alati päringutega samas järjekorras vastu võtta.
Protokolli identifikaator: 2 baiti määrab Master, alati = 00 00, mis vastab Modbusi protokollile.
Pikkus: 2 baiti määrab Master, identifitseerides baitide arvu järgnevas sõnumis. Loendab alates ühiku identifikaatorist kuni sõnumi lõpuni.
Üksuse identifikaator: 1 bait on seatud Master-le. Slave-seade kordab, et alluvseade unikaalselt tuvastada.
Kokku saame:
Modbus RTU | Orja ID | Taotlus | CRC |
---|---|---|---|
Modbus RTU | 11 | 03 006B 0003 | 7687 |
0001 0000 0006 11 | 03 006B 0003 | ||
PDU | |||
ADU Rakenduse andmedÜksus |
Vastuseks Modbus TCP-lt Orjaseadmed saame:
0001 0000 0009 11 03 06 022B 0064 007F
0001 | Tehingu ID | Tehingu identifikaator |
0000 | Protokolli ID | Protokolli identifikaator |
0009 | Pikkus(9 baiti järgneb) | Sõnumi pikkus |
11 | Seadme aadress(17 = 11 hex) | Üksuse identifikaator |
03 | Funktsiooni kood(lugege analoogväljundi hoidmise registreid) | Funktsiooni kood |
06 | Baitide arv edasi(6 baiti järgneb) | Baitide arv |
02 | (02 hex) | Registri väärtus Tere (AO0) |
2B | (2B hex) | Registri väärtus Lo (AO0) |
00 | Registri kõige olulisema biti väärtus(00 hex) | Registri väärtus Hi (AO1) |
64 | Registreerige LSB väärtus(64 hex) | Registri väärtus Lo (AO1) |
00 | Registri kõige olulisema biti väärtus(00 hex) | Registri väärtus Hi (AO2) |
7F | Registreerige LSB väärtus(7F hex) | Registri väärtus Lo (AO2) |
Analoogväljundi registri AO0 väärtus on 02 2B HEX või 555 kümnendkohana.
Analoogväljundi registri AO1 väärtus on kümnendsüsteemis 00 64 HEX või 100.
Analoogväljundi registri AO2 väärtus on kümnendsüsteemis 00 7F HEX või 127.
Modbus TCP käsutüübid
Siin on tabel funktsioonikoodidega Modbus TCP registrite lugemiseks ja kirjutamiseks.
Funktsiooni kood | Mida funktsioon teeb | Väärtuse tüüp | Juurdepääsu tüüp | |
---|---|---|---|---|
01 (0x01) | Lugege TEHA | Lugege mähise olekut | Diskreetne | Lugemine |
02 (0x02) | DI lugemine | Lugege sisendi olekut | Diskreetne | Lugemine |
03 (0x03) | AO lugemine | Lugege pidamisregistreid | 16 bitine | Lugemine |
04 (0x04) | AI lugemine | Lugege sisestusregistreid | 16 bitine | Lugemine |
05 (0x05) | Kirjutage üks DO | Force Single Coil | Diskreetne | Salvestus |
06 (0x06) | Ühe AO salvestamine | Eelseadistatud üksik register | 16 bitine | Salvestus |
15 (0x0F) | Mitu DO salvestust | Mitme mähise sundimine | Diskreetne | Salvestus |
16 (0x10) | Mitme AO salvestamine | Eelseadistatud mitu registrit | 16 bitine | Salvestus |
Kuidas saata Modbus TCP käsku diskreetse väljundi lugemiseks? Käsk 0x01
Seda käsku kasutatakse DO digitaalväljundi väärtuste lugemiseks.
PDU päring määrab esimese DO-registri algusaadressi ja järgneva arvu DO-väärtusi. PDU-des adresseeritakse DO-väärtusi alates nullist.
DO väärtused vastuses on ühes baidis ja vastavad bittide tähendusele.
Bitiväärtused on määratletud kui 1 = ON ja 0 = OFF.
Esimese andmebaidi kõige vähem oluline bitt sisaldab DO väärtust, mille aadress oli päringus määratud. Ülejäänud DO väärtused liiguvad kasvavas järjekorras kõige olulisema baidi väärtuseni. Need. paremalt vasakule.
Kui nõuti vähem kui kaheksa DO väärtust, täidetakse vastuse ülejäänud bitid nullidega (madala baidi kuni kõrge baidi suund). Baitide arvu väli Baitide arv edasi näitab vastuses olevate andmete täielike baitide arvu.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 04 | ||
01 | Seadme aadress | 01 | Seadme aadress |
01 | Funktsiooni kood | 01 | Funktsiooni kood |
00 | 01 | Baitide arv edasi | |
00 | 02 | DO registri väärtus 0-1 | |
00 | Registrite arv Tere bytes | ||
02 | Registrite arv Lo baiti |
Väljundite DO0-1 olekud kuvatakse baidi 02 hex väärtustena või kahendsüsteem 0000 0010.
DO1 väärtus on paremalt teine ja DO0 väärtus on paremalt esimene (LSB).
Ülejäänud kuus bitti täidetakse täisbaidini nullidega, sest neid ei nõutud.
Diskreetsed väljundmoodulid: ioLogik E1211, ET-7060, ADAM-6060
Kuidas saata Modbus TCP käsku diskreetse sisendi lugemiseks? Käsk 0x02
Seda käsku kasutatakse DI väärtuste lugemiseks.
DI päring ja vastus on sarnased DO päringule.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 04 | ||
01 | Seadme aadress | 01 | Seadme aadress |
02 | Funktsiooni kood | 02 | Funktsiooni kood |
00 | Esimese registri aadress Tere bait | 01 | Baitide arv edasi |
00 | Esimese registri aadress Lo bait | 03 | DI registri väärtus 0-1 |
00 | Registrite arv Tere bytes | ||
02 | Registrite arv Lo baiti |
Väljundite DI 0-1 olekud kuvatakse baidi 03 hex väärtustena või binaarselt 0000 0011.
DI1 väärtus on paremalt teine ja DI0 väärtus paremalt esimene (LSB).
Ülejäänud kuus bitti täidetakse nullidega.
Diskreetsed sisendmoodulid: ioLogik E1210, ET-7053, ADAM-6050
Kuidas saata Modbusi TCP käsku analoogväljundi lugemiseks? Käsk 0x03
Seda käsku kasutatakse AO analoogväljundite väärtuste lugemiseks.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 07 | ||
01 | Seadme aadress | 01 | Seadme aadress |
03 | Funktsiooni kood | 03 | Funktsiooni kood |
00 | Esimese registri aadress Tere bait | 04 | Baitide arv edasi |
00 | Esimese registri aadress Lo bait | 02 | Tere registri väärtus (AO0) |
00 | Registrite arv Tere bytes | 2B | Registri väärtuse langus (AO0) |
02 | Registrite arv Lo baiti | 00 | Tere registriväärtus (AO1) |
64 | Alamregistri väärtus (AO1) |
AO0 väljundolekud kuvatakse baidi 02 2B hex või 555 kümnendkoha väärtustena.
AO1 väljundolekud kuvatakse baitide väärtustena 00 64 kuueteistkümnend või 100 koma.
Diskreetsed sisendmoodulid: ioLogik E1210, ET-7053, ADAM-6050
Kuidas saata Modbus TCP käsku analoogsisendi lugemiseks? Käsk 0x04
Seda käsku kasutatakse AI analoogsisendite väärtuste lugemiseks.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 07 | ||
01 | Seadme aadress | 01 | Seadme aadress |
04 | Funktsiooni kood | 04 | Funktsiooni kood |
00 | Esimese registri aadress Tere bait | 04 | Baitide arv edasi |
00 | Esimese registri aadress Lo bait | 00 | Tere registri väärtus (AI0) |
00 | Registrite arv Tere bytes | 0A | Registri väärtuse langus (AI0) |
02 | Registrite arv Lo baiti | 00 | Tere registri väärtus (AI1) |
64 | Registri väärtuse langus (AI1) |
AI0 väljundolekud kuvatakse baitide väärtustena 00 0A hex või 10 kümnendkohaga.
AI1 väljundolekud kuvatakse baitide väärtustena 00 64 kuueteistkümnend või 100 koma.
Analoogsisendi moodulid: ioLogik E1240, ET-7017-10, ADAM-6217
Kuidas saata Modbus TCP käsk diskreetse väljundi kirjutamiseks? Käsk 0x05
Seda käsku kasutatakse ühe DO väärtuse kirjutamiseks.
Väärtus FF 00 hex seab väljundi olekusse ON.
Väärtus 00 00 hex seab väljundi olekusse OFF.
Kõik muud väärtused on kehtetud ega mõjuta väljundi olekut.
Tavaline vastus sellisele päringule on kaja (päringu kordamine vastuses), mis tagastatakse pärast DO oleku muutmist.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 06 | ||
01 | Seadme aadress | 01 | Seadme aadress |
05 | Funktsiooni kood | 05 | Funktsiooni kood |
00 | Tere registri aadressi bait | 00 | Tere registri aadressi bait |
01 | Registri aadress Lo byte | 01 | Registri aadress Lo byte |
FF | Tere, baidi väärtus | FF | Tere, baidi väärtus |
00 | Lo baidi väärtus | 00 | Lo baidi väärtus |
Diskreetsed väljundmoodulid: ioLogik E1211, ET-7060, ADAM-6060
Kuidas saata Modbus TCP käsku analoogväljundi kirjutamiseks? Käsk 0x06
Seda käsku kasutatakse analoogväljundi AO ühe väärtuse kirjutamiseks.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
06 | 06 | ||
01 | Seadme aadress | 01 | Seadme aadress |
06 | Funktsiooni kood | 06 | Funktsiooni kood |
00 | Tere registri aadressi bait | 00 | Tere registri aadressi bait |
01 | Registri aadress Lo byte | 01 | Registri aadress Lo byte |
55 | Tere, baidi väärtus | 55 | Tere, baidi väärtus |
FF | Lo baidi väärtus | FF | Lo baidi väärtus |
AO0 väljundi olek on muutunud 55 FF hex või 22015 kümnendkohana.
Analoogväljundmoodulid: ioLogik E1241, ET-7028, ADAM-6224
Kuidas saata Modbus TCP käsku mitme digitaalse viigu kirjutamiseks? Käsk 0x0F
Seda käsku kasutatakse mitme DO väärtuse kirjutamiseks.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
08 | 06 | ||
01 | Seadme aadress | 01 | Seadme aadress |
0F | Funktsiooni kood | 0F | Funktsiooni kood |
00 | Esimese registri aadress Tere bait | 00 | Esimese registri aadress Tere bait |
00 | Esimese registri aadress Lo bait | 00 | Esimese registri aadress Lo bait |
00 | Registrite arv Tere bytes | 00 | |
02 | Registrite arv Lo baiti | 02 | |
01 | Baitide arv edasi | ||
02 | Baiti väärtus |
DO1 väljundi olek muudeti VÄLJAS olekuks ON.
DO0 väljundi olek jääb VÄLJA.
Diskreetsed väljundmoodulid: ioLogik E1211, ET-7060, ADAM-6060
Kuidas saata Modbus TCP käsku mitme analoogviigu kirjutamiseks? Käsk 0x10
Seda käsku kasutatakse mitme AO analoogväljundi väärtuse kirjutamiseks.
Bait | Taotlus | Bait | Vastus |
---|---|---|---|
(Kuueteistkümnend) | Välja nimi | (Kuueteistkümnend) | Välja nimi |
01 | Tehingu ID | 01 | Tehingu ID |
02 | 02 | ||
00 | Protokolli ID | 00 | Protokolli ID |
00 | 00 | ||
00 | Sõnumi pikkus | 00 | Sõnumi pikkus |
0B | 06 | ||
01 | Seadme aadress | 01 | Seadme aadress |
10 | Funktsiooni kood | 10 | Funktsiooni kood |
00 | Esimese registri aadress Tere bait | 00 | Esimese registri aadress Tere bait |
00 | Esimese registri aadress Lo bait | 00 | Esimese registri aadress Lo bait |
00 | Registrite arv Tere bytes | 00 | Salvestatud reg. Tere bait |
02 | Registrite arv Lo baiti | 02 | Salvestatud reg. Lo baiti |
04 | Baitide arv edasi | ||
00 | Tere väärtus AO0 bait | ||
0A | Madala väärtusega AO0 bait | ||
01 | Tere väärtus AO1 bait | ||
02 | Madala väärtusega AO1 bait |
AO0 väljundi olek on muutunud 00 0A hex või 10 kümnendkohana.
48. õppetükis näitasin näidet mittestandardsest andmevahetusprotokollist UART-liidese kaudu. Nagu alati, võimaldab kõik ebastandardne ülesande täitmist optimeerida ja kõik universaalne lihtsustab ülesande arendamist.
On olemas lihtne universaalne ModBusi sideprotokoll, milles andmete ja funktsioonide liiasus on viidud miinimumini. See on tõenäoliselt kõige levinum protokoll väikeste hajutatud süsteemide korraldamiseks. Järgmistes tundides rakendan seda protokolli kasutavate seadmete vahelist andmevahetust.
Protokolli üldkirjeldus.
ModBus avatud protokoll andmevahetus väikestes kohalikes võrkudes. Reeglina kasutatakse seda andmete edastamiseks RS-232, RS-485, RS-422 liideste kaudu, TCP/IP, UDP võrkudes. Tänu oma lihtsusele ja mitmekülgsusele on ModBus muutunud laialt levinud ja sellest on saanud väikeste hajutatud arvutisüsteemide de facto standard. Peaaegu kõik kaasaegsed kontrollerid toetavad ModBusi võrke.
ModBusi võrgus ühendatakse kontrollerid tavaliselt "Common Bus" topoloogia abil. Kontrollerite interaktsioon toimub vastavalt ülem-alluv mudelile (ülem-alluv).
Võrgus on põhiseade - kapten. Ja ka mitmed orjaseadmed – orjad. Vahetuse saab algatada ainult põhiseade.
Tehing (toimingute jada andmevahetuse ajal) koosneb päringust ja vastusest.
Ülemseade võib adresseerida päringu mis tahes alamkontrollerile või algatada saatesõnum, kõigi alluvate seadmete jaoks samaaegselt.
Olles päringus oma aadressi määranud, genereerib alamseade vastuse.
Põhiseadme päring peab sisaldama funktsioonikoodi, s.t. mida teha. Samuti võib päring sõltuvalt funktsioonist sisaldada andmeid.
ModBusi protokollil on 3 varianti.
- ModBus ASCII – tekstiprotokoll. See kasutab ainult ASCII märgid. Iga bait edastatakse kahe kuueteistkümnendsüsteemi märgina.
- ModBus RTU on numbriline protokoll. Andmed edastatakse aadressile binaarne. Võrgu kaudu edastatav bait on protokolli number.
- ModBus TCP on andmeedastusprotokoll TCP/IP võrkudes.
Numbriline ja tekstiprotokollid Võrdlesin tagasi aastal. Toimivuse ja vahetuskiiruse osas on numbrilistel protokollidel kindlasti eelis. Järgmistes tundides kasutame ModBus RTU-d. Sellele valikule on pühendatud selle õppetüki järgmine teave.
ModBus RTU protokoll.
Seadmed (kontrollerid) ühendatakse võrku kasutades “Common Bus” topoloogiat. ModBusi standard lubab koos töötama kuni 247 kontrollerit.
Iga kontroller sisaldab andmeid, mida seadmed vahetavad.
ModBusi standard määratleb 4 andmetüüpi.
Andmetüüp | Suurus | Kehtivad toimingud |
Lipuregister (mähised) | 1 bitt | Kirjuta ja loe |
Diskreetsed sisendid | 1 bitt | Lugemine |
Registrite hoidmine | 16 bitine | Kirjuta ja loe |
Sisendregistrid | 16 bitine | Lugemine |
See funktsionaalne andmete eraldamine on kustutatud ja seda praktiliselt ei kasutata. Kõik andmed loetakse lõppkokkuvõttes kontrolleri mälust ja pole nii oluline, kust need sisenditest või sisendregistritest sinna sattusid.
Praktikas kasutatakse ainult neid valduste registreid. Andmetele juurdepääsetakse 16-bitise aadressi kaudu. Lõpuks:
- iga kontrolleri andmed on 16-bitiste registrite tabel;
- andmetabelis võib olla kuni 65536 elementi;
- elementide nummerdamine algab 0-st.
Peaseade algatab tehingu – andmevahetuse. Tehing võib olla individuaalne (päring-vastus) või leviedastus (kõiki alamseadmeid adresseeritakse samaaegselt). Tehing koosneb ühest päringuraamist ja ühest vastuseraamist. Ülekandetehingus kasutatakse ainult päringu kaadrit.
Kaadriandmed edastatakse pideva voona. Andmeedastuse vaheline paus ei tohiks ületada 1,5 tähemärgi pikkust edastusaega. Uue kaadri märgiks on vahetuse puudumine võrgus (vaikus) 3,5 tähemärgi edastamiseks kuluva aja jooksul. Kui selle aja jooksul oli võrguliin passiivses olekus, tajuvad alamseadmed esimesi vastuvõetud andmeid kaadri algusena.
Üldjuhul on päringuraamil järgmine vorming.
Aadress (8 bitti).
Raam algab aadressiväljaga, mis koosneb 8 bitist. Sisaldab alamseadme aadressi, millele ülemseadme sõnum on mõeldud. Igal alamseadmel peab olema kordumatu aadress vahemikus 1 kuni 247. Ja ainult adresseeritav alamseade peab vastama ülemseadme päringule. Vastus ütleb ülemale, milline alamseade suhtleb.
Edastusrežiimis kasutatakse aadressi 0. Kõik alamseadmed täidavad päringus määratud funktsiooni, kuid ei saada kinnitust.
Funktsioon (8 bitti).
Funktsiooniväli ütleb adresseeritud alamseadmele, millist toimingut teha.
Funktsioonibaidi kõige olulisem bitt on alamvastuses seatud väärtusele 1, et teavitada ülemseadet, et toiming lõpetati ekslikult. Kui toiming õnnestub, on kõige olulisem bitt 0.
- Tavalised käsud. ModBusi protokolli standardiga määratletud koodid.
- Kohandatud käsud. Koodidele 65...72 ja 100...110 saab kasutaja määrata suvalise funktsiooni.
- Reserveeritud meeskonnad. Need on koodid, mida standard algselt ei määratlenud, kuid on juba kasutusel erinevate tootjate seadmetes.
Valdav enamus ModBusi kontrolleritest kasutab ainult 3 funktsiooni.
Vastuse vorming sõltub funktsioonist. Paljudel juhtudel kordab tavaline vastus päringut täielikult või osaliselt.
Andmed (N * 8 bitti).
Andmeväli sisaldab teavet, mida alamkontroller vajab täitmiseks antud funktsioon või väli sisaldab andmeid, mida alamseade edastab ülemseadme nõudmisel. Andmevälja pikkus ja formaat sõltub funktsiooni koodist. Mõnes sõnumis võivad andmed puududa.
Igal andmetel on 16 bitti (2 baiti). Andmed edastatakse esimesena kõige olulisem bait. Näiteks peaks aadressidega 0 ja 1 registrite järjestikune ülekandmine toimuma järgmiselt:
- registri 0 kõrge bait ->
- registri 0 madal bait ->
- registri 1 kõrge bait ->
- registri 1 madal bait ->.
Näiteks 4-baidise numbri edastamisel ujukomaga on jada sama. Arv jagatakse kahte 16-bitisesse registrisse ja neist kummaski edastatakse esimesena kõige olulisem bait (1-> 0-> 3-> 2->).
Kontrollsumma (16 bitti).
Sõnumiandmete terviklikkuse kontrolli väli. Võimaldab kontrollida raamides vigu. See on umbes andmete edastamisel ilmnevate vigade kohta.
ma annan endast parima üldine ülevaade räägi kontrollkoodist. Parem on see lõik vahele jätta. Pea võib praguneda. Kui ma seda teemat puudutan, läheb mul alati peavalu. Järgmises tunnis tutvustan praktiline rakendamine ModBusi juhtkoodi arvutused.
Kontrollsummana kasutatakse tsüklilist liiasuskoodi (CRC). Kõik ülekanderaami bitid on kogutud tohutuks kahendnumber. See jagatakse genereeriva polünoomi koodiga. Jaotuse ülejäänud osa on kontrollkood.
Kasutatakse polünoomaritmeetika moodulit 2. See tähendab, et kõik toimingud CRC arvutamisel on aritmeetilised tehtedülekannet pole. Lahutamine ja liitmine toimuvad bittide kaupa, kandmist arvesse võtmata, mistõttu need toimingud annavad sama tulemuse ja neid saab asendada tehtega “välistav või”. Jagamisel kasutatakse dividendist jagaja lahutamise asemel ka tehteid “välistav või”. See üldpõhimõte CRC arvutused. Praktikas tehakse arvutusi tõhusamate algoritmide abil.
Kontrollsumma lõpetab edastuskaadri. Pärast kaadri vastuvõtmist arvutab alamseade sama algoritmi abil vastuvõetud andmete kontrollsumma ja võrdleb seda kaadri lõpus edastatud kontrollkoodiga. Selle tulemusena kinnitatakse kaadriandmete terviklikkus.
ModBus RTU standard kasutab standardit tsükliline kood CRC-16 genereeriva polünoomiga X 16 +X 15 +X 2 +1. See on 16-bitine kood, kahendkoefitsiendid on 1 1000 0000 0000 0101 (8005 h kuueteistkümnendsüsteemis).
Sõnumit käsitletakse ühe järjestikuse kahendarvuna, mille kõige olulisem bitt edastatakse esimesena. See arv korrutatakse X 16-ga (nihutatud 16 koha võrra vasakule) ja jagatakse X 16 +X 15 +X 2 +1 (1 1000 0000 0000 0101). 16-bitine jääk (eelinitsialiseeritud kõigiga) on sõnumi juhtkood.
Loogikavigade käsitlemine.
Lisaks vigadele, mis on seotud andmete riknemisega edastamise ajal, võib esineda loogikavigu, kui päring võetakse vastu vigadeta, kuid seda ei saa täita. Tavaliselt on sellised vead seotud kehtetute aadresside, andmete, koodide jne. Enamik ModBusi kontrollereid toetab järgmisi veatüüpe.
Veakood | Nimi | Kirjeldus |
01 | ILLEGAALNE FUNKTSIOON | Funktsioonikoodi kontroller ei toeta |
02 | ILLEGAALNE ANDMETE AADRESS | Vale andmeaadress |
03 | ILLEGALITE ANDMETE VÄÄRTUS | Kehtetud andmeväärtused |
04 | SLAVE SEADME RIKE | Toimingu sooritamisel ilmnes viga |
Kui vastuses ilmneb viga, määratakse funktsiooni koodi väljale kõige olulisem bitt ja seejärel edastatakse tavaliste andmete asemel veakood.
Funktsioonide üksikasjalik uurimine.
Funktsioon 03 – valdusregistrite lugemine.
Kasutatakse mitme valdusregistri väärtuste lugemiseks. Päring edastab registritabeli esimese elemendi aadressi, mille väärtust tuleb lugeda, ja loetavate registrite arvu. 16 kasutatakse aadressi ja koguse jaoks bitinumbrid. Esimesena edastatakse kõige olulisem bait.
Nõutud andmed sisalduvad vastuses. Enne andmeplokki edastatakse bait, mis sisaldab loetud andmete arvu baitides.
Salvestusregistrite lugemise funktsiooni päringu vorming.
Baiti number | Baiti number parameetris | Parameeter | ||
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 03 | 03 |
2 | 1 | Registrite algusaadress | 0008 | 00 |
3 | 0 | 08 | ||
4 | 1 | Registrite arv | 0002 | 00 |
5 | 0 | 02 | ||
6 | 1 | Kontrolli summa | 45C9 | 45 |
7 | 0 | C9 |
Vastus (alluva aadress, funktsiooni kood, loetud baitide arv, registri väärtused).
Baiti number | Baiti number parameetris | Parameeter | Näide lugemisregistrite kohta aadressidega 8 ja 9 | |
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 03 | 03 |
2 | 0 | Loetud baitide arv | 04 | 04 |
3 | 1 | Registri väärtus 8 | 12A5 | 12 |
4 | 0 | A5 | ||
5 | 1 | Registri väärtus 9 | E020 | E0 |
6 | 0 | 20 | ||
7 | 1 | Kontrolli summa | A770 | A7 |
8 | 0 | 70 |
Funktsioon 06 – kirjuta ühte valdusregistrisse.
Kasutatakse ühte registrisse kirjutamiseks. Päring edastab registri aadressi ja selle väärtuse. Kui see õnnestub, vastab alamkontroller päringu koopiaga.
Taotle vormingut ühe salvestusregistri kirjutamisfunktsiooni jaoks.
Baiti number | Baiti number parameetris | Parameeter | ||
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 06 | 06 |
2 | 1 | Registreeri aadress | 0009 | 00 |
3 | 0 | 09 | ||
4 | 1 | Registri väärtus | 12A5 | 12 |
5 | 0 | A5 | ||
6 | 1 | Kontrolli summa | 9513 | 95 |
7 | 0 | 13 |
Vasta (korrab päringut).
Baiti number | Baiti number parameetris | Parameeter | Näide väärtuse 12A5 kirjutamisest registrisse 9 | |
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 06 | 06 |
2 | 1 | Registreeri aadress | 0009 | 00 |
3 | 0 | 09 | ||
4 | 1 | Registri väärtus | 12A5 | 12 |
5 | 0 | A5 | ||
6 | 1 | Kontrolli summa | 9513 | 95 |
7 | 0 | 13 |
Funktsioon 16 – väärtuste kirjutamine salvestusregistritesse.
Kasutatakse mitmesse järjestikku tabelis asuvasse registrisse kirjutamiseks.
Päring edastab esimese registri aadressi, registrite arvu ja nende väärtused.
Vastus tagastab lähteaadressi ja muudetud registrite arvu.
Salvestusregistri kirjutamise funktsiooni päringu vorming.
Baiti number | Baiti number parameetris | Parameeter | ||
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 10 | 10 |
2 | 1 | Registrite algusaadress | 0008 | 00 |
3 | 0 | 08 | ||
4 | 1 | Registrite arv | 0002 | 00 |
5 | 0 | 02 | ||
6 | 0 | Baitide loendur | 04 | 04 |
7 | 1 | Registri väärtus 8 | 12A5 | 12 |
8 | 0 | A5 | ||
9 | 1 | Registri väärtus 9 | E020 | E0 |
10 | 0 | 20 | ||
11 | 1 | Kontrolli summa | AF4A | A.F. |
12 | 0 | 4A |
Vastus (alluva aadress, funktsiooni kood, algusaadress ja registrite arv).
Baiti number | Baiti number parameetris | Parameeter | Näide registrite kirjutamisest aadressidega 8 ja 9 | |
0 | 0 | Kontrolleri aadress | 01 | 01 |
1 | 0 | Funktsioon | 10 | 10 |
2 | 1 | Registrite algusaadress | 0008 | 00 |
3 | 0 | 08 | ||
4 | 1 | Registrite arv | 0002 | 00 |
5 | 0 | 02 | ||
6 | 1 | Kontrolli summa | С00A | C0 |
7 | 0 | 0A |
ModBus ja spetsiaalsed protokollid.
Nüüd saate võrrelda ModBusi protokolli spetsiaalse protokolliga alates .
Baiti number | Numbrivorming | Eesmärk |
0 … 3 | ujuk | Temperatuur |
4 … 7 | ujuk | Pinge |
8 | bait | Nupu olek |
9 | bait | Reserv |
10, 11 | int | Kontrollsumma (baitide summa 0 ... 9 ^ 0xa1e3) |
Võrreldes spetsiaalse protokolliga:
- ModBus on aeglasem ja väiksema jõudlusega. Sama hulga teabe saamiseks edastatakse võrgu kaudu palju rohkem andmeid.
- Selle rakendamine on keerulisem. Nõuab rohkem mikrokontrollerit ja võrguressursse.
Kuid eelised on paljudel juhtudel olulisemad.
- Tänu keerukamale kontrollsummale ja üleliigsele infole tuvastatakse võrguvead usaldusväärsemalt ja andmete usaldusväärsus on suurem.
- Võrku on lihtne laiendada. Uute seadmete lisamine on väga lihtne.
- ModBus on standardprotokoll. Paljud erinevate tootjate kontrollerid toetavad seda.
Võib-olla, peamine põhjus mittestandardsete protokollide kasutamine tähendab süsteemi ebapiisavaid arvutusressursse.
Tõsi, mittestandardse protokolli kasutamiseks on veel üks põhjus. Sealhulgas tänu millele võitis meie ettevõte suure hanke. Keegi peale arendajate ei saa luua ühendust spetsiaalse protokolliga seadmetega ja neid juhtida. Need. hoopis vastupidi standardprotokollid kvaliteet. Kehtib vastandite ühtsuse filosoofiline seadus.
Järgmises tunnis rakendame Arduino plaadi ja arvuti vahelist suhtlust ModBus protokolli kasutades.
Kategooria: . Saate selle järjehoidjatesse lisada.