Dzidziso Yakadzama Yekuongorora Mameseji Ekutaurirana kweModbus
I. Pfupiso yeModbus Protocol
Modbus inzira yekutaurirana yakagadzirwa naModicon (ikozvino Schneider Electric) muna 1979 yekutaurirana pakati pevanodzora logic (PLCs). Kwemakore anopfuura makumi mana ekushanduka-shanduka, yave imwe yenzira dzekutaurirana dzakajairwa mumunda we automation yeindasitiri.
Zvinhu Zvikuru:
- Magadzirirwo eTenzi/Varanda: Mutariri mumwe chete ane varanda vakawanda, uko tenzi anotanga zvikumbiro uye varanda vanopindura vasina kupindira.
- Nzira yekushanda yakavhurika: Hapana muripo wekupa marezenisi; chero mugadziri anogona kuishandisa mahara.
- Nzira dzakawanda dzekutumira: RTU (binary), ASCII (text), TCP (Ethernet).
- Inotsigira ma layer akasiyana-siyana emuviri: RS485 (yakajairika), RS232, TCP/IP (Ethernet).
- Modhi yedata rakachena: Mhando ina dzezvinhu - macoil, ma inputs akasiyana, ma input registers, uye ma hold registers.
1.1 Kuenzanisa kweThree Protocol Variants

1.2 Zvipingamupinyi zveProtocol

II.Modbus Data Model uye Mitemo yeKero
2.1 Mhando ina dzezvinhu zvinoshanda

2.2 Kumiririrwa Kwekero (Yakakosha!)
Vagadziri vakasiyana vanoshandisa nzira dzakasiyana dzekunyora makodhi Kero dzeModbus, inova ndiyo dambudziko rinonyanya kuitika mukuita zvinhu zvinobudirira:

Zvinoreva chivakashure chekero (kumiririrwa kweindasitiri-kwakajairika):
- Kutanga na0: Kero yeprotocol (hexadecimal), semuenzaniso, 0x0000
- 4 xxxx: Chengetedza marejista; semuenzaniso, 40001 inoratidza kero yeprotocol yerejista yekuchengetedza 0.
- 3xxxx: Rejista yekupinda; semuenzaniso, 30001 inoratidza kero yeprotocol yerejista yekupinda 0. ·
- 0xxxx: Koira; semuenzaniso, 00001 inoratidza kero yeprotocol yekoira 0. ·
- 1xxxx: Kupinza kwakavanzika; semuenzaniso, 10001 inoratidza kero yeprotocol yekupinda kwakavanzika 0.
2.3 Mitemo yeKugadzirisa Data Guru
1.1. Huwandu hwepamusoro hwemarejista anoverengwa pabasa rega rega: 125 (makodhi ebasa 0x03/0x04)
2.2. Huwandu hwepamusoro hwema coils/discrete inputs anoverengwa pakushanda kwega kwega: 2000 (ma function codes 0x01/0x02)
3.3. Huwandu hwepamusoro hwemarejista akanyorwa pabasa rega rega: 123 (kodhi yebasa 0x10)
4.4. Huwandu hwepamusoro hwemakoiri akanyorwa pabasa rega rega: 1968 (kodhi yebasa 0x0F)
5.5. Kupfuura miganhu iyi kunoda kuverenga/kunyora kwakavakirwa pabhuroko; ona kuti nguva dzekuvhota dzakarongwa zvakatevedzana kudzivirira kusawirirana kwemabhazi
III. Kuongororwa Kwakadzama kweMameseji eModbus RTU
Chikamu cheRemote Terminal (RTU) ndicho chinoshandiswa zvakanyanya Nzira yekutumira yeModbus mumabasa emaindasitiri, vachishandisa binary encoding kuti vagone kutumira data zvakanaka uye vashande zvakanaka neRS485/RS232 serial interfaces. Nguva yakanyarara ye3.5 character time pakati pemafuremu inodiwa kuti musiyanise miganhu yemafuremu.
3.1 Kurongeka Kwakazara kweRTU
Furemu yedata remirairo yakazara muRTU ine zvikamu zvina zvinotevera:

3.2 Muenzaniso weRTU Message - Verenga Holding Registers (Function Code 0x03)
[Meseji Yekukumbira] Tenzi anoverenga marejista ekuchengeta Muranda 1 (kero yekutanga 0x0001, achiverenga marejista matatu):
01 03 00 01 00 03 54 0B
Kuongorora meseji yekukumbira nebhaiti nebhaiti:

[Mhinduro] Slave Station 1 inodzosera data kubva kumarejista matatu: 01,03,06,02,2B,00,00,00,64, D5, 87
Kuongororwa kwemashoko emhinduro nebhaiti nebhaiti:

3.3 Tsananguro Yakadzama yeMakodhi Ebasa Rakajairika

3.4 Tsananguro Yakadzama yeFomati Yese yeMashoko eKodhi yeBasa
(1) Verenga Coil / Verenga Discrete Input (Makodhi Ebasa 0x01/0x02)
[Kumbira Fomu reFuremu] (8 bytes ese)

[Maumbirwo eFuremu yeMhinduro]

[Muenzaniso wekuongorora nzvimbo] Ruzivo rwemhinduro rune mabyte matatu (macoil 20–38):

(2)Read Holding Register/Read Input Register (Function Code 0x03/0x04)
[Kumbira Fomu reFuremu] (8 bytes ese)

[Maumbirwo eFuremu yeMhinduro]

(3)Nyora rejista imwe chete (kodhi yebasa 0x06)
[Kumbira fomati yefuremu] (mabyte masere ese)

[Furemu Yemhinduro] Zvakafanana nefuremu yekukumbira, zvinosimbisa kunyora kwakabudirira.
(4)Nyora marejista akawanda ekuchengetedza (kodhi yebasa 0x10)
[Kumbira Chimiro cheFuremu]

[Response Frame Format] (8 bytes zvese): [Kero][0x10][Start Kero (2 bytes)][Nhamba (2 bytes)][CRC (2 bytes)]
(5)Nyora koiri imwe chete (Kodhi Yebasa: 0x05)
[Request Frame Format] (8 bytes zvese): Makoshero maviri chete anoshanda anotsigira pakunyora:
- 0xFF00 – Coil yakaiswa paON (yakavharwa)
- 0x0000 – Coil yakaiswa kuOFF (yakavhurika)

[Furemu Yemhinduro] Zvakafanana nefuremu yekukumbira, zvinosimbisa kunyora kwakabudirira.
IV. Kuongororwa Kwakadzama kweMameseji eModbus TCP
Modbus TCP inoshanda kuburikidza neEthernet TCP/IP protocol, ichishandisa port 502 senzira yekutanga. Kusiyana neRTU mode, Modbus TCP inoshandisa MBAP (Modbus Application Protocol) header kutsanangura miganhu yemeseji uye haidi CRC verification (panzvimbo pezvo ichivimba neTCP's built-in error-checking mechanism).
4.1 Maumbirwo emusoro weMBAP (mabyte manomwe, anowanikwa mumapaketi ese eTCP)

4.2 Muenzaniso weMeseji yeModbus TCP
[Meseji Yekukumbira] Kuverenga rejista yeSlave 1 (kero yekutanga 0x0000, kuverenga kukosha 3):
00 01 00 00 00 06 01 03 00 00 00 03
Kuongororwa kwemashoko ekukumbira kubva mumunda kusvika munda:

[Mhinduro] Muranda anodzosa data kubva kumarejista matatu:
00 01 00 00 00 09 01 03 06 02 2B 00 00 00 64
Kuongororwa kwemeseji yemhinduro mumunda nemunda:

4.3 Musiyano Mukuru Pakati peRTU neTCP Packet Structures

V. Tsananguro Yakadzama yeCRC-16 Verification
Algorithm CRC (Cyclic Redundancy Check) ndiyo nzira yekuongorora frame yeModbus RTUs, yakagadzirirwa kuona zvikanganiso panguva yekutumira meseji. CRC-16 generating polynomial ndeye x¹⁶ + x¹⁵ + x² + 1 (yakaenzana ne 0x8005); mukuita, inverted polynomial 0xA001 inoshandiswa.
5.1 Matanho Ekuverenga CRC-16
6.1. Tanga 16-bit CRC register kuita 0xFFFF
7.2. Ita XOR operation pakati pebyte yekutanga ne8 bits yakaderera yeCRC register; chengeta mhedzisiro kumashure mu8 bits yakaderera yeCRC register
8.3. Chinja CRC register kurudyi ne 1 bit, uchizadza high bits ne 0; sarudza shifted-out bit (LSB):
9.4. Kana bhiti rakabviswa riri 0: Ramba uchichinja kurudyi nebhiti rimwe chete
10.5. Kana shifted-out bit iri 1: Ita XOR operation pakati peCRC register ne 0xA001
11.6. Dzokorora danho rechitatu kusvika kugadziriswa kwemabhiti ese masere ebhaiti remazuva ano kwapera
12.7. Tora byte inotevera wodzokorora matanho 2-6 kusvika mabyte ese agadziriswa 13.8. Mushure mekupedza kugadzirisa mabyte ese, chinja mabyte epamusoro neakaderera eCRC register kuti uwane checksum yekupedzisira
14.9. Isa checksum yekupedzisira kumagumo emeseji, ne low byte kutanga uye high byte yekupedzisira
5.2 Muenzaniso weKuverenga weCRC-16 (Python Code)
Basa rinotevera rePython rinogona kushandiswa zvakananga kuverenga CRC-16 checksum yeModbus RTU:
def modbus_crc16(data: mabyte) -> mabyte:
"""count Modbus RTU CRC-16 check code(Dzosera mabyte maviri ekutanga ane least important bit kutanga)"""
crc = 0xFFFF
yebhaiti mudata:
crc ^= byte
ye_ iri muchikamu (8):
kana crc & 0x0001:
crc = (crc >> 1) ^ 0xA001
zvimwe:
crc >>= 1
# Dzosera low byte kutanga, wozoteverwa nehigh byte
dzorera mabyte([crc & 0xFF, (crc >> 8) & 0xFF])
# ipa mienzaniso yakajairika: nhamba 01 03 00 01 00 03 CRC
furemu = mabheti([0x01, 0x03, 0x00, 0x01, 0x00, 0x03])
crc = modbus_crc16(furemu)
print(crc.hex()) # kutumira kunze:540b(0x54 0x0B)
5.3 Nzvimbo yeCRC Check muMessage
Uchishandisa meseji yekukumbira 01 03 00 01 00 03 54 0B semuenzaniso:

Mugamuchiri anoverengazve kukosha kweCRC kwemabyte matanhatu ekutanga uye anoienzanisa nemabyte maviri ekupedzisira epaketi. Kana akasiyana, pane chikanganiso chekutumira chinoonekwa uye hapana mhinduro inodzoserwa.
Ⅵ.Kubata Kunze uye Ruzivo rweKodhi Yekukanganisa
Kana chiteshi chevaranda chikasakwanisa kuita chikumbiro kubva kuchiteshi chikuru (semuenzaniso, nekuda kwemakodhi ebasa asina kutsigirwa kana kero iri kunze kwenzvimbo), chinodzosera furemu yemhinduro yekusarudzika. Kodhi yebasa rekusarudzika ndeye = kodhi yebasa rekutanga + 0x80 (kureva kuti, chikamu chepamusoro chakaiswa ku1).
6.1 Maitiro Emhinduro Asina Kunaka (RTU)
[Kero yeMuranda][Kodhi yeBasa | 0x80][Kodhi Isina Kujairika][CRC-16]

6.2 Zvinoreva Standard Exception Codes

6.3 Muenzaniso weMhinduro Isina Kunaka
[Chiitiko] Chiteshi chikuru chinokumbira kuverenga rejista pakero isiriyo kubva kuchiteshi chevaranda 1, uye chiteshi chevaranda chinodzosera musiyano:
Chikumbiro: 01 03 00 20 00 01 XX XX (kuverenga rejista pakero 0x0020);
Mhinduro isina kunaka: 01 83 02 C0 F1;
Kupatsanurwa kwemhinduro yekusarudzika kweByte-byte:

VI. Nhanganyaya kuModbus ASCII Messages
Modbus ASCII mode inochengetedza data bytes dzese semavara maviri eASCII (semuenzaniso, 0x0F inonyorwa se "0F"). Kunyange zvazvo iri nyore kuverenga, inopa simba shoma rekutumira data uye inonyanya kushandiswa pakugadzirisa matambudziko.
7.1ASCII Furemu Maumbirwo
Fomu refuremu reASCII rakazara:

7.2 Algorithm Yekusimbisa LRC
Matanho ekuverenga LRC (Longitudinal Redundancy Check):
15.1. Ita binary summation pamabyte ese emunda wekero, function code, uye munda wedata (kunze kwezviratidzo zvekutanga nekuguma).
16.2.Regai kukanda mabhiti (kana mhedzisiro yacho ikadarika 255, putirai otomatiki mochengeta mabhiti masere epasi chete).
17.3. Verenga huwandu hwemhedzisiro yehuwandu hwe ...
18.4. Wedzera chikamu chekuwedzera ne1 kuti uwane kodhi yekupedzisira yekutarisa yeLRC (byte imwe).
19.5. Nyora kodhi yekutarisa yeLRC semavara maviri eASCII woabatanidza kusvika kumagumo emeseji.
VIII. Mazano Anoshanda uye Nyaya Dzinowanzo itika
8.1 Nyaya dzeByte Order (Big-Endian/Micro-endian)
Iyo Modbus standard inoshandisa big-endian order (nekutanga nehigh-order byte) kutumira data re16-bit kana refu. Mimwe midziyo (semuenzaniso, mimwe midziyo yakavakirwa paARM) inoshandisa micro-endian order; kushandurwa kwebyte order kunodiwa kudzivirira zvikanganiso zvekuverenga nhamba.

8.2 Muganho weSaizi yeChikamu Chekunyoresa (PDU ≤ 253 bytes)

8.3 Mazano eKutaurirana Nguva Yapera uye Edzazve Kugadzirisa
Magadzirirwo anokurudzirwa:
- Nguva yekuvhota: Yakaiswa pa2-3 nguva yepamusoro yekupindura kwemuranda (kazhinji 100-500 ms) • Nguva yekupedza: Nguva inokurudzirwa ye1000-3000 ms, inogadziriswa zvichienderana nekumhanya kwekupindura kwemuranda.
- Kuedzazve: Muganho unokurudzirwa we3; tanga alarm kana ikatadza kushanda
- Kuvhota kwevaranda vakawanda: Ronga nguva dzekuvhota dzakatevedzana pakati pevaranda kudzivirira kusawirirana kwemabhazi • Nguva yekubuda kwebhaisikopo: Munzira yeRTU, nguva yehunhu inodarika nguva yehunhu 1.5 inoonekwa sechikanganiso chefuremu
8.4 Zvishandiso zveDe Bugging Zvinokurudzirwa
Chinyorwa: Tafura Yekunongedzera Mashoko Akajairika
Verenga coil (Kodhi Yebasa 0x01)
[Chikumbiro]: Verenga kubva pachiteshi chevaranda 1 pakero yekutanga 0 (coil 1), tora mameseji emamiriro ecoil masere: 01 01 00 00 00 08 3D CC
[Mhinduro]: Mamiriro masere ekoiri: 0x55 (01010101B);
Mharidzo: 01 01 01 55 94 36
Nyorera kune imwe coil (Function Code 0x05)
[Chikumbiro] Isa coil pakero 0 kusvika ON (nyora kukosha 0xFF00):
Mharidzo: 01 05 00 00 FF 00 8C 3A
[Chikumbiro] Isa coil pakero 0 kusvika kuOFF (nyora kukosha 0x0000):
Mharidzo: 01 05 00 00 00 00 CD CA
[Mhinduro] Yakafanana nefuremu yekukumbira
Nyorera kune rejista imwe chete (Function Code 0x06):
[Chikumbiro] Nyora kukosha 0x1234 kuti unyorese pakero 0.
Mharidzo: 01 06 00 00 12 34 XX XX (XX iCRC, inofanira kuverengerwa).
[Mhinduro] Zvakafanana nefuremu yekukumbira.
Nyorera kune marejista akawanda (Function Code 0x10)
[Chikumbiro]: Nyorera marejista maviri kutanga kubva pakero 0 ine kukosha 0x1234 uye 0xABCD zvakateerana.
Mharidzo: 01 10 00 00 00 02 04 12 34 AB CD XX XX
[Mhinduro]: Dzosera kero yekutanga nenhamba yemarejista akanyorwa.
Mharidzo: 01 10 00 00 00 02 41 C8
Verenga marejista ekupinda (kodhi yebasa 0x04)
[Chikumbiro]: Verenga kubva kumuranda 1 pakero yekutanga 0, uchiverenga rejista mbiri dzekupinda
mameseji: 01 04 00 00 00 02 71 CB
[Mhinduro]: Dzorera marekodhi maviri ekupinda
mameseji: 01 04 04 00 64 01 90 XX XX (Kudzoserwa kwedata: 100 ne400)










