Modbusi protokolli tutvustus vene keeles. Võrguprotokoll - Modbus. Andmete adresseerimine Modbusi protokollis

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 RTU

See 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 koodidenamä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 produktiivsemASCII.

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).

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ülitatud3. 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 rakendamine

Erinevalt 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 polarisatsiooni

MODBUS 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 kaudu

Lahendus . 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 seadetSCADA/ 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 7687

Nüüd eemaldame esimese ja viimase 2 baiti. Saame PDU!

03 006B 0003

Sellega 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 0003

Vastuse näidis:

Modbus TCP: 0001 0000 0009 11 03 06 AE41 5652 4340 Modbus RTU: 11 03 06 AE41 5652 4340 49AD

Nagu 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:

  1. 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.
  2. funktsiooni number – 1 bait andmeid.
  3. andmed – see väli sisaldab teavet täidetava funktsiooni kohta või andmeid, mille alamseade saadab Modbusi protokolli ülemseadmele.
  4. 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 RTUOrja IDTaotlusCRC
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 koodMida funktsioon teebVäärtuse tüüpJuurdepääsu tüüp
01 (0x01)Lugege TEHALugege mähise olekutDiskreetneLugemine
02 (0x02)DI lugemineLugege sisendi olekutDiskreetneLugemine
03 (0x03)AO lugemineLugege pidamisregistreid16 bitineLugemine
04 (0x04)AI lugemineLugege sisestusregistreid16 bitineLugemine
05 (0x05)Kirjutage üks DOForce Single CoilDiskreetneSalvestus
06 (0x06)Ühe AO salvestamineEelseadistatud üksik register16 bitineSalvestus
15 (0x0F)Mitu DO salvestustMitme mähise sundimineDiskreetneSalvestus
16 (0x10)Mitme AO salvestamineEelseadistatud mitu registrit16 bitineSalvestus

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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
01 Funktsiooni kood01 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
02 Funktsiooni kood02 Funktsiooni kood
00 Esimese registri aadress Tere bait01 Baitide arv edasi
00 Esimese registri aadress Lo bait03 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
03 Funktsiooni kood03 Funktsiooni kood
00 Esimese registri aadress Tere bait04 Baitide arv edasi
00 Esimese registri aadress Lo bait02 Tere registri väärtus (AO0)
00 Registrite arv Tere bytes2BRegistri väärtuse langus (AO0)
02 Registrite arv Lo baiti00 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
04 Funktsiooni kood04 Funktsiooni kood
00 Esimese registri aadress Tere bait04 Baitide arv edasi
00 Esimese registri aadress Lo bait00 Tere registri väärtus (AI0)
00 Registrite arv Tere bytes0ARegistri väärtuse langus (AI0)
02 Registrite arv Lo baiti00 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
05 Funktsiooni kood05 Funktsiooni kood
00 Tere registri aadressi bait00 Tere registri aadressi bait
01 Registri aadress Lo byte01 Registri aadress Lo byte
FFTere, baidi väärtusFFTere, baidi väärtus
00 Lo baidi väärtus00 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
06 Funktsiooni kood06 Funktsiooni kood
00 Tere registri aadressi bait00 Tere registri aadressi bait
01 Registri aadress Lo byte01 Registri aadress Lo byte
55 Tere, baidi väärtus55 Tere, baidi väärtus
FFLo baidi väärtusFFLo 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.

BaitTaotlusBaitVastus
(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 aadress01 Seadme aadress
0FFunktsiooni kood0FFunktsiooni kood
00 Esimese registri aadress Tere bait00 Esimese registri aadress Tere bait
00 Esimese registri aadress Lo bait00 Esimese registri aadress Lo bait
00 Registrite arv Tere bytes00
02 Registrite arv Lo baiti02
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.

BaitTaotlusBaitVastus
(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
0B06
01 Seadme aadress01 Seadme aadress
10 Funktsiooni kood10 Funktsiooni kood
00 Esimese registri aadress Tere bait00 Esimese registri aadress Tere bait
00 Esimese registri aadress Lo bait00 Esimese registri aadress Lo bait
00 Registrite arv Tere bytes00 Salvestatud reg. Tere bait
02 Registrite arv Lo baiti02 Salvestatud reg. Lo baiti
04 Baitide arv edasi
00 Tere väärtus AO0 bait
0AMadala 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.