Pengenalan kepada protokol modbus dalam bahasa Rusia. Protokol rangkaian - Modbus. Menangani data dalam protokol Modbus

6.3. Siri MODBUS

Rangkaian MODBUS pertama adalah berdasarkan talian komunikasi bersiri tak segerak dan dipanggil MODBUS RTU Dan MODBUS ASCII . hidup tahap fizikal mereka menggunakan antara muka bersiri standard dengan mod penghantaran aksara (lihat Rajah 6.1).

Pada masa ini, dalam MODBUS-IDA rangkaian ini dipanggil MODBUS melalui Talian Bersiri dan diterangkan dalam piawaian yang berkaitan. Ia menentukan peraturan dan cadangan untuk digunakan pada pautan dan tahap fizikal.

Oleh kerana rangkaian MODBUS RTU/ASCII boleh mempunyai topologi bas, kaedah akses bas ditakrifkan sebagai model Master/Slave. Dalam rangkaian MODBUS RTU dan MODBUS ASCII, Proses Induk sentiasa menjadi Pelanggan, dan Proses Hamba adalah Pelayan. Ini bermakna bahawa Guru menghantar permintaan, dan Hamba memprosesnya. Permintaan ini boleh dialamatkan kepada sama ada nod individu atau semua Hamba di dalam bas (siaran).

hidup tahap pautan MODBUS RTU/ASCII menggunakan pengalamatan berorientasikan ID nod.Setiap Hamba mesti mempunyai alamat uniknya sendiri (1-247), Tuan tidak boleh dialamatkan. Untuk permintaan individu, Pemimpin (dengan Proses klien) membentuk bingkai dengan mesej permintaan dan menghantarnya melalui alamat yang ditentukan. Hamba (dengan Proses pelayan) menerima bingkai ini dan memproses mesej. Selepas memprosesnya, Hamba membentuk bingkai dengan mesej respons dan menghantarnya semula kepada Pemimpin. Bingkai dengan mesej respons juga berfungsi sebagai bingkai pengesahan, yang Master akan tunggu daripada Hamba untuk masa yang ditentukan oleh tamat masa.

Untuk permintaan siaran, alamat 0 digunakan. Permintaan siaran tidak memerlukan pengakuan, jadi selepas menghantar bingkai siaran, Master tidak menunggu bingkai respons.

6.3.1. Lapisan Pautan Data

Rajah 6.11 menunjukkan bentuk umum bingkai MODBUS Siri. Sila ambil perhatian bahawa perbezaan antara bingkai dan jenis checksum tidak disenaraikan di sini kerana ia bergantung kepada mod penghantaran ASCII atau RTU. Dalam medan alamat peranti, Guru (apabila meminta) menunjukkan alamat penerima, dan Hamba (apabila membalas) - alamatnya. Medan MODBUS PDU diterangkan di atas.

Rajah masa dalam Rajah 6.12 menunjukkan tiga situasi tipikal pengendalian model Master-Slave pada Siri MODBUS. Situasi pertama adalah pertukaran tipikal dalam mod unicast, yang kedua dalam mod siaran, yang ketiga ialah reaksi Budak terhadap ralat komunikasi.

6.3.2. MODBUS RTU

Mod ini menggunakan 8 bit data dalam simbol 11-bit, yang membolehkan anda memindahkan satu bait setiap simbol. Format aksara dalam mod RTU: 1 bit permulaan, 8 bit data (bit rendah dihantar dahulu), 1 bit pariti + 1 bit henti bit atau tiada pariti + 2 bit hentian.

Format bingkai MODBUS RTU ditunjukkan dalam Rajah 6.13. Perbezaan antara bingkai dibuat menggunakan jeda antara aksara. Bingkai baharu tidak sepatutnya muncul pada bas lebih awal daripada 3.5 * Тс daripada yang sebelumnya, dengan Тс ialah masa penghantaran satu aksara. Jika ketiadaan isyarat pada talian (selang senyap) lebih besar daripada 1.5 * Tc, penerima mengenal pasti hujung bingkai. Sebaliknya, penampilan bingkai baharu lebih awal daripada 3.5 * Tc juga akan membawa kepada ralat.

Medan alamat dan kod fungsi dalam mod RTU menduduki satu bait setiap satu, kerana setiap bait dihantar sebagai satu aksara. Dua bait yang dikira menggunakan algoritma CRC16 digunakan sebagai jumlah semak.


6.3.3. MODBUS ASCII

DALAM mod ini setiap bait mesej dihantar sebagai dua aksara ASCII bagi perwakilan heksadesimal mereka, i.e. nilai bait 03 16 akan dihantar sebagai kod ASCII bagi aksara "0" dan "3" (0110000 0110011) Oleh itu, bait data, kod fungsi dan bait medan semak akan dihantar dalam kodaksara 0-9, A-F. Format aksara dalam mod ASCII: 1 bit permulaan, 7 bit data (bit paling tidak ketara dihantar dahulu); 1 bit pariti + 1 bit hentian atau tiada pariti + 2 bit hentian.

Format bingkai ditunjukkan dalam Rajah 6.14. Seperti yang anda lihat, aksara mula ":" dan urutan henti "CR LF" digunakan untuk membezakan antara bingkai. Penerima di dalam bas sentiasa memantau aksara ":", yang secara unik menunjukkan permulaan bingkai. Apabila ia diterima, penerima menangkap medan alamat, dsb. Ini ialah kaedah penyegerakan yang sangat mudah yang membolehkan anda tidak mengkritik jeda antara aksara (sehingga 1 saat). Alamat Hamba dan kod fungsi menduduki dua aksara setiap satu, mengikut nilai satu bait. Seterusnya datang n * 2 aksara data, di mana n ialah bilangan bait data. Dalam mod ASCII, algoritma LRC digunakan untuk mengira jumlah semak. Selain itu, checksum dijalankan ke atas semua bait bingkai, kecuali untuk urutan permulaan dan henti aksara.

Mod ASCII mengurangkan permintaan pada perkakasan dengan menggunakan urutan permulaan dan pasca untuk mengehadkan bingkai, dan tidak sensitif kepada jeda yang ketara antara aksara. Tetapi kelebihan ini tercermin dalam kelemahannya. Mod RTU lebih menuntut pada selang antara bingkai, tetapi jauh lebih produktif daripadaASCII.

Contoh 6.4. MODBUS. Pengiraan masa pengundian hamba pada MODBUS-RTU.

Tugasan . Bina bingkai format mesej permintaan dan respons untuk MODBUS RTU dan hitung jumlah masa pengundian untuk 10 pembolehubah analog 16-bit untuk 4 hamba (Rajah 6.15). Kadar pemindahan data bit - 19200 bps. Proses Pelanggan Induk (TSX Premium) dan Proses Pelayan Hamba (TSX Micro PLC) menerima mesej pada permulaan kitaran dan menghantar mesej pada penghujung kitaran. Masa kitaran induk = 10 ms, Hamba - 5s.

Selesaikan tugasan. Pembolehubah analog dalaman TSX Micro diakses melalui fungsi 03 atau 04, jadi format bingkai akan kelihatan seperti Rajah 6.16.

Memandangkan struktur bingkai lain adalah serupa, tidak ada gunanya mempersembahkan formatnya.
Begitu juga dengan Rajah 6.12, kita akan membina gambar rajah masa pertukaran (Rajah 6.17).

Dari sisi aplikasi klien, mesej permintaan dijana menggunakan fungsi komunikasi, data yang dihantar melalui port komunikasi pada penghujung kitaran tugas, dan diterima dari port pada permulaan kitaran. Tingkah laku pihak pelanggan ini konsisten dengan banyak pelaksanaan untuk pelbagai PLC.

Dalam pelayan TSX Micro MODBUS dilaksanakan pada peringkat sistem pengendalian. Kekhususan pelaksanaan ialah sistem menerima permintaan MODBUS daripada port komunikasi pada permulaan kitaran, dan menghantar mesej respons pada penghujung.

Perlu diingatkan bahawa pelaksanaan pelayan MODBUS boleh disokong pada tahap modul komunikasi, dan pertukaran data dengan memori peranti itu sendiri dijalankan melalui penampan komunikasi. Dalam kes ini, tindak balas pelayan MODBUS akan menjadi lebih pantas dan tidak akan bergantung pada kitaran program. Untuk mengira masa transaksi untuk jenis sistem lain, anda perlu membiasakan diri dengan butiran pelaksanaannya.

Rajah 6.17 menunjukkan bahawa ketibaan bingkai tiba di suatu tempat dalam gelung. Ini bermakna pemprosesan dan penjanaan tindak balas mereka akan mengambil masa kira-kira 1.5 kitaran. Perlu difahami bahawa ini adalah nilai purata untuk anggaran terburuk adalah lebih baik untuk menempah 2 masa kitaran (iaitu apabila bingkai tiba sejurus selepas mengundi pelabuhan komunikasi). Oleh itu, masa transaksi untuk satu PLC, contohnya PLC1 (TT1), akan sama dengan:

TT1=C5+T1.req+2*C1+T1.res+C5*2 (6.1)

TT1 dikira dengan mengambil kira 2 kitaran yang dibelanjakan oleh Hamba untuk menjana respons kepada mesej permintaan. Jika urus niaga dijalankan tidak secara berkala, mengikut keadaan tugas, tetapi apabila berlakunya peristiwa, maka semasa urus niaga itu juga perlu untuk memasukkan kitaran Induk yang lain. Adalah mudah untuk memaparkan masa pengundian untuk semua hamba:

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

Memandangkan kitaran Hamba adalah sama, dan bingkai permintaan dan bingkai respons untuk semua hamba mempunyai struktur yang sama, formula am akan kelihatan seperti ini:

TSeluruh= C5*9 + C1*8 + (T1.req+T2.req)*4(6.3)

Mari kita hitung masa T1.req dan T2.req.

Masa penghantaran bingkai (Tframe) boleh dikira lebih kurang dengan bilangan simbol (Nsymb) dalam bingkai dan masa penghantaran satu simbol (Tsymb):

Tframe=Nsymb*Tsymb (6.4)

Masa penghantaran satu aksara dikira:

masa penghantaran setiap simbol = bilangan bit setiap simbol/kadar bit;
Masa penghantaran bingkai akan sama dengan (div. Rajah 6.16 dan Rajah 6.17):

T1.req=8*(11/19200)=4.58 ms

T1.res=25*(11/19200)=14.33 ms

TSeluruh=90+40+ (4.58+14.33)*4= 206 ms.

Oleh itu, untuk meninjau 10 pembolehubah daripada 4 Hamba pada kelajuan 19200 bps, ia mengambil masa kira-kira 206 ms. Jika pengundian berkala diperlukan, adalah dinasihatkan untuk membuat tempahan masa tertentu, contohnya 100 ms lagi.

Dalam sesetengah kes, pelaksanaan fungsi Klien MODBUS jatuh pada sistem pengendalian, dan akses kepada mereka dalam program PLC berlaku melalui fungsi komunikasi antara muka. Khususnya, ini adalah tipikal untuk kebanyakan PLC daripada Scneider Electric (Momentum, Quantum, TSX Micro, TSX Premium, M340). Dalam beberapa sistem lain - bahagian klien pada peringkat permohonan mesti dinyatakan sepenuhnya dalam program PLC, dan antara muka disediakan hanya untuk pertukaran dengan port komunikasi. Dalam kes ini, sistem menyediakan perkhidmatan untuk menghantar dan menerima mesej (yang dijana dan dianalisis oleh program pengguna itu sendiri), dan menjana dan mengesahkan jumlah semak.Mari kita lihat satu contoh.

Contoh 6.5. MODBUS. Pelaksanaan klien MODBUS pada TSX Twido.

Tugasan . Tulis serpihan program ke Twido PLC untuk membaca 3 daftar daripada Hamba dengan alamat 1 (Rajah 6.18).

Penyelesaian . Di Twido, bahagian klien MODBUS perlu dilaksanakan melalui fungsi universal EXCHx, yang menghantar dan/atau menerima data melalui nombor port komunikasi x. Parameter fungsi ialah jadual perkataan (%MW), yang mengandungi data kawalan fungsi, data yang akan dihantar dan penimbal untuk diterima. Jika pertukaran berlaku melalui port komunikasi 2, maka panggilan fungsi akan mempunyai format berikut:

EXCH2 %MWy:n,

di mana y ialah bilangan pembolehubah pertama bagi jadual yang dipilih, n ialah bilangan perkataan dalam jadual.

Format jadual, iaitu, data yang perlu diisi, dan kawasan data yang akan diterima adalah sama untuk semua jenis komunikasi. Untuk fungsi 03/04 (membaca N perkataan) melalui MODBUS-RTU, jadual ini akan mempunyai bentuk yang ditunjukkan dalam Jadual 6.2).

Jadual parameter terdiri daripada 3 bahagian - subjadual. Jadual kawalan fungsi menentukan parameter fungsi itu sendiri. Jadi dalam bait tinggi perkataan ke-0 ia menunjukkan bahawa fungsi ini berfungsi dalam kedua-dua arah, i.e. Selepas menghantar data, anda mesti menunggu jawapan. Bait rendah bagi perkataan yang sama menunjukkan panjang jadual penghantaran (dalam kes ini 6 bait), supaya sistem mengetahui tentang bait yang perlu dihantar (dari perkataan ke-2 hingga ke-4) dan di mana penimbal terima bermula (dari perkataan ke-5). Offset dalam menghantar dan menerima adalah perlu untuk menyelaraskan data dalam penimbal kepada perkataan.

Jadual pemindahan mengandungi permintaan itu sendiri, i.e. bingkai tanpa kod CRC. Jadual terima ialah penimbal yang akan diisi oleh sistem dengan bingkai tindak balas jika hasilnya positif. Oleh itu, sebelum menggunakan fungsi ini, adalah perlu untuk membina rangka permintaan dan tindak balas tidak termasuk medan CRC (Rajah 6.19)

Jadual 6.2

Jadual parameter

Indeks dalam jadual

Bait tinggi

Bait rendah

Jadual kawalan kom fungsi

01 (jenis fungsi menghantar+menerima)

06 (pindah panjang meja)

03 (berat sebelah dalam penerimaan)

00 (perubahan dalam penghantaran)

Meja pemindahan

alamat budak

03 (nombor fungsi)

alamat daftar permulaan

bilangan daftar

Jadual penerimaan tetamu (mesej-tindak balas)

alamat budak

03 (nombor fungsi)

00 (bait untuk mengimbangi)

pembilang bait

daftar dulu

daftar kedua

...

N+6

Daftar ke-n

Seperti yang anda lihat, permintaan itu mengandungi 6 bait. Kuantiti ini mesti dimasukkan ke dalam bait rendah perkataan ke-0 jadual. Respons dijangkakan ialah 9 bait. Jika bait bingkai tindak balas diletakkan dalam urutan perkataan (dalam Schneider Electric PLC memori dialamatkan dalam perkataan), maka bait tinggi daftar pertama yang diterima (mengikut syarat, ini ialah %MW100) akan menjadi terletak pada bait rendah perkataan ke-2 penimbal, dan bait rendah daftar yang diterima akan dihidupkanbait tinggi bagi perkataan ke-3 dalam penimbal. Oleh itu, semua perkataan yang diterima akan beralih dan sukar dibaca. Untuk membetulkan masalah ini, jadual parameter fungsi mempunyai medan ofset terima yang menentukan nombor bait dalam penimbal terima yang akan mengalihkan keseluruhan jujukan.

Serpihan program akan kelihatan seperti dalam Rajah 6.20.
Rantaian LD atas adalah untuk mengisi jadual kawalan fungsi dan mengisi jadual penghantaran.

Dalam rantaian kedua, fungsi dipanggil secara langsung. Pembolehubah %MSG2.D mengembalikan Boolean "1" apabila fungsi EXCH2 diproses dan hasilnya diterima. Penggunaannya menghalang rangkaian daripada "dibanjiri" dengan bilangan bingkai yang berlebihan, kerana tiada tindak balas kepada permintaan sebelumnya atau tamat masa tidak berlalu, permintaan baru tidak boleh dihantar.

Rantaian terakhir bertujuan untuk menulis hasil bacaan kepada pembolehubah %MW0:3 (jadual dengan 3 perkataan bermula daripada %MW0). Pembolehubah %MSG2.E akan sama dengan 1 apabila terdapat ralat dalam panggilan fungsi.

6.3.4. Pelaksanaan lapisan fizikal untuk Siri MODBUS

Tidak seperti spesifikasi asal, yang terhad untuk menerangkan bingkai, standard MODBUS-IDA juga menerangkan peraturan untuk melaksanakan rangkaian pada lapisan fizikal. MODBUS melalui Talian Bersiri adalah berdasarkan penggunaan antara muka bersiri RS-485, RS-422 dan RS-232.

Topologi telah ditakrifkan untuk RS-485 - ini ialah bas yang menyediakan tiga cara untuk menyambungkan peranti (Gamb. 6.21):

- Terus ke kabel batang, tiada cawangan;

- Melalui kotak sambungan pasif dan kabel cawangan (Derivasi);

- Melalui kotak aktif dan kabel cawangan tertentu.

Antara muka antara kabel dan elemen rangkaian mempunyai sebutan berikut (lihat Rajah 6.21): ITr - antara muka ke kabel tulang belakang; IDv - antara muka antara peranti dan kotak pasif; AUI - antara muka antara peranti dan kotak aktif; LT - penamat talian.
Kadar bit ditakrifkan sebagai 9600 bps dan 19200 bps (lalai). Kelajuan lain adalah pilihan.Kaedah pengekodan NRZ digunakan.

Apabila menggunakan RS-485, piawaian mentakrifkan peraturan untuk menyambungkan peranti menggunakan skema 2-wayar dan 4-wayar, serta peraturan untuk keserasian antara muka 2-wayar dan 4-wayar pada satu baris. Di bawah ini kami menganggap hanya sambungan 2 wayar, sokongannya adalah wajib.

Pada asasnya, sambungan 2-wayar sebenarnya adalah sambungan 3-wayar, kerana sebagai tambahan kepada garis A-( D0 ) dan B+( D1 ) juga digunakan garis biasa C( Biasa ), yang wajib (Rajah 6.22).

Jumlah bilangan peranti adalah terhad: 32 peranti pada satu segmen RS-485 tanpa pengulang (penggunaan pengulang dibenarkan). Panjang kabel maksimum bergantung pada kelajuan, jenis kabel, bilangan beban dan konfigurasi rangkaian (2-wayar atau 4-wayar). Untuk kadar bit 9600 dan kabel AWG26 panjang maksimum terhad kepada 1000m. Kabel jatuh mestilah lebih pendek daripada 20 m. Jika kotak multiport dengan n port digunakan, maka setiap kabel jatuh adalah terhad kepada 40/n m panjang.

Wayar isyarat biasa (Common) mesti disambungkan ke skrin pada satu titik pada bas, biasanya berhampiran nod Master atau kotak cawangannya.

Untuk menyekat pantulan gelombang, penamat talian (LT) dipasang pada hujung garisan antara D1 dan D0. Terminator dibenarkan dipasang hanya pada kabel utama.Yang berikut boleh digunakan sebagai penamat:

- Perintang dengan nilai nominal 150 Ohm dan kuasa 0.5 W;

- Pemuat bersambung siri (1 nF, minimum 10 V) dan perintang 120 ohm (0.25 W) menggunakan polarisasi talian

Piawaian Siri MODBUS mentakrifkan peraturan untuk melaksanakan pincang pelindung (polarisasi), yang menyediakan untuk menyambungkan bekalan kuasa 5 V antara D1 dan D0 melalui perintang PullUp dan PullDown untuk mengekalkan logik "1" pada talian apabila tiada penghantaran.Nilai perintang dipilih daripada 450 Ohm hingga 650 Ohm bergantung kepada bilangan peranti (650 Ohm untuk bilangan yang besar). Peralihan pertahanan dilakukan hanya pada satu titik di barisan, biasanya di sebelah Mendahului. Bilangan maksimum peranti dengan polarisasi yang dilaksanakan dikurangkan sebanyak 4 berbanding dengan sistem tanpa polarisasi. Polarisasi adalah pilihan. Walau bagaimanapun, komunikasi pada peranti mungkin gagal jika tiada isyarat logik. Jika ini berlaku, maka polarisasi mesti dilaksanakan secara bebas, atau menggunakan litar sedia ada, jika disediakan oleh peranti.

Piawaian juga mentakrifkan antara muka mekanikal, i.e. jenis penyambung, palam dan korespondensi isyarat pada kenalan. Sebagai terminal mekanikal, anda boleh menggunakan blok terminal, RJ-45 terlindung (Gamb. 6.23) atau penyambung SUB-D9 terlindung (Gamb. 6.24).

Jadual 6.3 menunjukkan penetapan sesentuh untuk penyambung dengan 2 sambungan berwayar melalui RS-485, dan dalam jadual 6.4 melalui RS-232

Jadual 6.3

Tujuan kenalan penyambung apabila menyambung melalui RS-485

nombor kenalan

keperluan ketersediaan

litar IDv

litar Itr

nama RS-485

satu komen

(lihat bahagian 3)

RJ45

SUB-D9

pilihan

P.M.C.

kawalan mod com pelabuhan

Semestinya

D1

B/B"

voltan V1, V1>V0 untuk log. "1"

Semestinya

D0

A/A"

voltan V0, V0>V1 untuk log. "0"

sebaiknya

Bekalan kuasa 5…24 VDC

Semestinya

Biasa

Biasa

C/C"

Kuasa dan tanah isyarat

Jadual 6.4

Tujuan kenalan penyambung apabila menyambung melalui RS-232

DCE (modem)

litar

DTE

nombor kenalan

keperluan ketersediaan

Nama

satu komen

(lihat bahagian 3)

sumber

RS-232

keperluan ketersediaan

nombor

kenalan

RJ45

SUB-D9

RJ45

SUB-D9

Semestinya

TxD

Data Dihantar

<< DTE

Semestinya

Semestinya

RxD

Data Diterima

DCE >>

Semestinya

pilihan

CTS

Kosongkan untuk Hantar

DCE >>

pilihan

pilihan

RTS

Permintaan untuk Hantar

<< DTE

pilihan

Semestinya

Biasa

Isyarat Biasa

Semestinya

Sebagai kabel untuk jenis sambungan 2 wayar, piawaian mentakrifkan pasangan terpiuh berperisai dua kategori 4 (sehingga 600m) atau 5 (sehingga 1000m), di mana satu pasangan mengandungi isyarat seimbang D0 dan D1, dan yang kedua mengandungi Biasa tanah isyarat. Warna kabel yang disyorkan: D1 kuning; D0 coklat; Kelabu biasa.

Contoh 6.6. MODBUS. Gambar rajah sambungan rangkaian MODBUS RTU.

Tugasan . Lukis gambar rajah sambungan rangkaian untuk pelaksanaan 2 wayar bas MODBUS RTU dengan nod berikut:

- PLC1: VIPA CPU 115SER 6BL32 (Master) melalui terbina dalam port bersiri modul pemproses;

- PLC2: TSX Twido TWDLMDA40DTK (Hamba) melalui modul komunikasi TWD NOZ 485T

- PLC3: TSX Twido TWDLMDA40DTK (Hamba) melalui modul komunikasi TWD NOZ 485T

Penyelesaian . Rajah 6.25 menunjukkan gambar rajah sambungan rangkaian untuk tugasan yang diberikan. Spesifikasi kemudahan rangkaian diberikan dalam Jadual 6.5.

Seperti yang boleh dilihat daripada Rajah 6.25, PLC1 disambungkan kepada bas melalui kotak pasif, atau lebih tepat melalui blok terminal, yang pada asasnya setara. Ini disebabkan oleh fakta bahawa sambungan ke PLC dibuat menggunakan penyambung SUB-D 9-pin, yang memerlukan pembangunan kabel anda sendiri, gambarajah sambungan (simpang) yang mana ke penyambung dan ke blok terminal ditunjukkan. di bawah rajah utama.

Oleh itu, wayar kabel KM2 mesti dipateri ke palam KK1.Penetapan pin soket SER tidak bertepatan dengan yang standard. Pin 8 dan 3 (A (D0) dan B (D1, masing-masing)) masuk dalam satu pasangan, kemudian sambungkan ke XT1:1 dan XT1:2; 5 dan 6 (M5V (-5V) dan P5V (+5 V, masing-masing)) pergi ke pasangan terpiuh kabel KM2 yang lain. Bekalan 5V diperlukan untuk melaksanakan bias pelindung (asimetri) mengikut piawaian. Selain ituM5Vadalah tanah isyarat (Umum).

Kabel KM2 disambungkan kepada XT1 mengikut rajah yang ditunjukkan dalam Rajah 6.25. Perisai kabel disambungkan ke tanah isyarat mengikut keperluan standard. Perlu diingat bahawa VIPA PLC dalam sistem ini adalah Master, oleh itu, offset pelindung dan sambungan perisai-ke-tanah mesti dilaksanakan di tempat ini. Bias pengawal dihasilkan menggunakan kuasa 5V, yang diambil dari port SER dan dua perintang.

Jadual 6.5.

Spesifikasi Kemudahan Rangkaian

Jawatan

Nama

Rujukan

Kolic

Catatan

PLC1

PLC VIPA 100

CPU VIPA 115SER 6BL32

1 PC.

VIPA

PLC2, PLC3

Twido PLC

TWDLMDA40DTK

2 pcs.

Schneider Electric

MK1, MK2

modul komunikasi untuk melaksanakan antara muka RS-485, sambungan skru

TWD NOZ 485T

2 pcs.

Schneider Electric

KK1

Penyambung lelaki SUB-D 9-pin

1 PC.

XT1

Blok terminal 4-pin

1 PC.

TL1,TL2

penamat talian

2 pcs

dihasilkan dengan pos. 7 dan 8

Perintang 120 Ohm (0.25 W)

2 pcs.

termasuk dalam perkara 6

Kapasitor 1 nF (>10 V)

2 pcs.

sebagai sebahagian daripada pos 6

Ru, Rd

Perintang 500 Ohm (0.25 W)

2 pcs

KM1

AWG26

300 m

KM2

kabel berperisai dua kali pasangan berpintal kategori ke-5 AWG26

2 m

KM3

kabel pasangan terpiuh dua perisai, kategori 5 AWG26

300 m

PLC2 dan PLC3 disambungkan ke bas menggunakan modul komunikasi dengan blok terminal. Ini membolehkan sambungan tanpa cawangan. Walau bagaimanapun, blok tidak menyediakan titik sambungan untuk perisai, jadi kabel dilindungi secara berasingan.

Penamat talian dilaksanakan sambungan bersiri perintang dan kapasitor kerana bas itu pincang.

Pada masa ini, MODBUS Serial digunakan pada tahap pengawal dan pada tahap sensor (untuk peranti teragih). Penggunaannya bermasalah apabila terdapat beberapa peranti di dalam basSCADA/ HMI, yang dalam seni bina pelayan-pelanggan mestilah Klien, kerana pada MODBUS RTU/ASCII hanya Master boleh menjadi Klien. Tetapi walaupun dalam keadaan sedemikian, adalah mungkin untuk mengatur penghantaran data kepada semua nod yang memerlukan, jika mereka menyokong mod ini.

Berdasarkan perkara di atas, anda boleh memilih bas Bersiri MODBUS jika:

- semua peranti Pelayan menyokong MODBUS RTU / ASCII dalam mod Hamba;

- hanya satu peranti Pelanggan diperlukan, yang perlu memulakan pertukaran pada bas, menyokong MODBUS RTU/ASCII sebagai Master;

- kelajuan pemulihan data- memenuhi syarat masalah;
tidak perlu

Nah, sudah tiba masanya untuk mempertimbangkan protokol apa Modbus TCP berbeza dengan protokol Modbus RTU. Oleh kerana tidak ada banyak perbezaan, artikel itu tidak akan panjang.
Jadi, dalam artikel sebelum ini mengenai fungsi Modbus RTU anda boleh mengetahui apakah fungsi dan format binarinya. Sekarang ia bernilai memberitahu apa itu Modbus TCP bagaimana ia digunakan dan bagaimana ia berbeza daripada standard Modbus RTU.

ModbusRTUmelalui TCPkompaun

Cara paling mudah untuk bertukar Modbus mesej melalui rangkaian - mudah dihantar Modbus RTU pakej melalui soket TCP(sebatian). Dalam kes ini, format paket adalah sama seperti untuk Modbus RTU protokol. Pada dasarnya, ini boleh menjadi penghujung jenis protokol ini.

ModbusTCP

Untuk pertukaran Modbsu mesej melalui rangkaian memutuskan untuk menggunakan protokol yang diubah suai. Kami mengambil yang standard Modbus RTU dan mengubahnya sedikit. Pertama, kami mengeluarkan 2 bait terakhir daripadanya CRC16. Memandangkan setiap paket TCP/IP mengandungi jumlah semak sendiri, kami memutuskan bahawa tidak perlu menyemaknya semula. Di samping itu, bait pertama telah dialih keluar ID hamba. Pada dasarnya, seperti yang akan dilihat kemudian, ia tidak dialih keluar, tetapi hanya dinamakan semula. Ini adalah bait, tanpa ID hamba Dan CRC16 bernama PDU – Unit Data Protokol.

Sebagai contoh, mari kita ambil permintaan Modbus RTU, yang berbunyi beberapa MEMEGANG mendaftar daripada peranti #17 (ID Hamba = 17)

11 03 006B 0003 7687

Sekarang kita keluarkan 2 bait pertama dan terakhir. Kita mendapatkan PDU!

03 006B 0003

Semuanya nampak jelas dengan ini. Sekarang untuk mendapatkan pakej penuh Modbus TCP kita perlu menambah di hadapan Pengepala MBAP - Pengepala Aplikasi Modbus. Itu. kita perlu menambah beberapa tajuk. Pengepala ini termasuk ID Transaksi, ID Protokol, Panjang Dan ID Unit.

ID Transaksi– 2 bait yang ditetapkan oleh pelanggan untuk mengenal pasti secara unik setiap permintaan. Itu. ia hanyalah nombor dari 0 hingga 65535 yang unik untuk setiap permintaan.

ID Protokol– 2 bait yang menentukan versi protokol. Dalam pelaksanaan semasa hendaklah sentiasa sama dengan 0x00 0x00

Panjang– 2 bait yang menentukan panjang paket (tidak termasuk bait ID Protokol, ID Transaksi Dan Panjang)

ID Unit– alamat unik peranti yang ditinjau oleh arahan ini. Secara identik ID hamba.

Penyimpangan kecil mengenai menangani. Ini mungkin kelihatan tidak perlu, kerana sambungan TCP hanya boleh ditetapkan kepada alamat IP dan port tertentu. Itu. kami sudah mempunyai alamat pelayan tertentu, jadi tugasan ID Unit tidak begitu jelas.

Tetapi sebenarnya, adalah perkara biasa untuk terdapat beberapa pelayan yang hanya mengarahkan Modbus RTU permintaan kepada peranti lain yang disambungkan kepadanya melalui pelbagai saluran(LAN, port bersiri, antara muka BOLEH). Oleh itu pelanggan boleh menggunakan Modbus TCP pelayan sebagai pintu masuk ( Gerbang) untuk berkomunikasi dengan peranti di belakangnya.

Contoh pelayan Modbus TCP, yang digunakan sebagai gerbang untuk mengubah hala permintaan ke peranti Modbus RTU

Berikut adalah contoh dari kehidupan. Terdapat peranti tertentu berdasarkan Linux. Peranti ini menonjol Modbus TCP pelayan. Mana-mana pelanggan boleh menyambung ke alamat IP awam pada port 502 dan memulakan Modbus TCP kompaun. Untuk ini peranti Linux penderia disambungkan menggunakan port bersiri RS485. Terdapat banyak sensor, ia sangat mudah dan tidak boleh disambungkan ke Internet, mereka hanya mempunyai port RS485 dan mereka hanya faham Modbus RTU. Itulah sebabnya pelanggan menghantar Modbus TCP permintaan daripada ID Unit penderia dihidupkan Modbus TCP pelayan. Pelayan menyahkod Modbus TCP meminta dan menukarnya kepada Modbus RTU dan menghantar ke port RS485. Selepas sensor bertindak balas kepadanya, ia menukar Modbus RTU jawab masuk Modbus TCP jawab dan hantar semula ke Modbus TCP kepada pelanggan yang memulakan permintaan. Oleh itu, dengan hanya satu alamat IP awam, anda boleh menyoal siasat beratus-ratus penderia dalam talian yang tidak boleh disambungkan ke Internet atau rangkaian tempatan.

Dan kini gambar rajah visual bagaimana ia berbeza Modbus RTU permintaan daripada Modbus TCP permintaan.

Mari kita lihat contoh bait untuk dua permintaan:

Modbus RTU: 11 03 006B 0003 7687 Modbus TCP: 0001 0000 0006 11 03 006B 0003

Contoh jawapan:

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

Seperti yang anda lihat, tukar permintaan antara Modbus RTU Dan Modbus TCP sangat ringkas. Walaupun pelaksanaan Modbus RTU TCP mungkin kelihatan seperti cara paling mudah untuk menghalakan permintaan, tetapi sebenarnya Modbus TCP terdapat beberapa perkara positif:

  • Tidak perlu berkira CRC16
  • Adalah mungkin untuk mengenal pasti pasangan respons/permintaan menggunakan ID Transaksi
  • Anda boleh menambah versi protokol anda sendiri dengan mudah dengan menukar pemalar ID Protokol


Struktur mesej protokol Modbus adalah seperti berikut:

  1. alamat hamba ialah alamat peranti yang mesej ini Protokol Modbus. Peranti hanya bertindak balas kepada mesej yang ditujukan khusus kepada mereka. Tanggapan bermula dengan alamat hamba. Alamat berbeza dalam 1…247. Alamat 0 dalam mesej protokol Modbus dikhaskan untuk mesej siaran, 248..255 adalah alamat tersimpan.
  2. nombor fungsi – 1 bait data.
  3. data – medan ini mengandungi maklumat tentang fungsi yang akan dilakukan, atau data yang dihantar oleh hamba kepada induk protokol Modbus.
  4. blok pengesanan ralat (CRC) - jumlah semak yang dikira daripada semua bait sebelumnya menggunakan algoritma round-robin dan penyingkiran bit.

Sila ambil perhatian bahawa apabila membaca melalui protokol Modbus, dalam satu mesej anda boleh membaca nilai input dan output diskret atau analog yang terletak dalam satu baris, iaitu, tetapkan alamat nilai pertama dan nombornya.

Mari lihat yang utama ciri standard mengikut kod mereka (dalam format perpuluhan dan perenambelasan):
1 (0x01) – membaca beberapa output diskret
2 (0x02) - membaca beberapa input diskret
3 (0x03) - membaca beberapa daftar perantaraan atau output analog
4 (0x04) – membaca beberapa input analog
Jika, sebagai contoh, bilangan input diskret yang dijana dalam permintaan bukan gandaan lapan, maka bilangan bait nilai dibundarkan kepada sebelah besar dan, oleh itu, untuk mendapatkan, sebagai contoh, nilai 15 input diskret, nombor ini akan sama dengan dua bait.
Sebelum data mesej Modbus, satu bait dihantar, nilainya ialah bilangan bait data.
5 (0x05) - rekod nilai satu keluaran diskret
6 (0x06) - tulis nilai satu output analog atau daftar
Perintah Modbus terdiri daripada alamat dan nilai sebenar (2 bait). Tindak balas biasa ialah pengulangan permintaan protokol Modbus.
15 (0x0F) - menulis nilai kepada beberapa output diskret
16 (0x10) - menulis nilai beberapa output analog atau daftar
Tanggapan terdiri daripada alamat permulaan daftar dan bilangan nilai yang berubah.
Contoh permintaan/tindak balas protokol Modbus:

Ralat penghantaran terbahagi kepada 2 jenis - herotan penghantaran dan logik. Herotan dipantau oleh masa "senyap". Masa biasa antara mesej ialah masa yang diperlukan untuk menghantar 3.5 aksara. Jika jeda lebih daripada 1.5 aksara berlaku semasa penghantaran mesej protokol Modbus, paket akan dibuang.

Ralat logik dalam protokol Modbus berlaku jika hamba tidak dapat menerima mesej sama sekali, atau menerimanya tetapi menghasilkan ralat. Dalam kes ini, ralat didiagnosis dengan tamat masa. Hamba menerima permintaan itu, tetapi tidak boleh memprosesnya (contohnya, mengakses alamat yang tidak wujud) - dalam kes ini, mesej ralat dihantar.

Contoh mesej ralat Modbus untuk permintaan:

Kod ralat protokol Modbus standard:
01 -Fungsi tidak boleh diproses pada hamba.
02 - Alamat data tidak wujud.
03 - Nilai dalam medan data untuk permintaan adalah tidak sah untuk salve.
04 - Ralat maut berlaku semasa hamba cuba melakukan tindakan.
05 - Hamba menerima permintaan itu dan mula memprosesnya, tetapi ini akan mengambil masa. Kod ini menghalang master daripada membuang ralat tamat masa.
06 - Hamba sedang sibuk memproses arahan, Tuan mesti menghantar semula mesej itu nanti apabila hamba itu bebas.
07 -Slave tidak boleh melaksanakan fungsi daripada permintaan. Guru mesti menghantar permintaan untuk maklumat diagnostik atau menerima maklumat ralat daripada hamba.
08 - Hamba cuba membaca kawasan memori, tetapi ralat pariti dikesan. Guru boleh mengulangi permintaan, tetapi biasanya dalam kes sedemikian pembaikan diperlukan.

Struktur bingkai TCP Modbus:

di mana:
ID Transaksi - dua bait
ID Protokol - dua bait (empat sifar)
panjang paket - dua bait, saiz medan mesej berikutnya
alamat hamba - alamat hamba yang mana permintaan protokol Modbus dialamatkan.
Ciri khas protokol TCP Modbus ialah ketiadaan checksum, kerana tahap pengangkutan Protokol TCP menyemak CRC. Oleh itu, menyemak checksum dalam format RTU tidak masuk akal.

Dalam artikel ini, anda akan mempelajari tentang protokol Modbus TCP, yang merupakan evolusi protokol Modbus RTU. versi Bahasa Inggeris Artikel boleh didapati di ipc2u.com.

Di mana hendak menghantar arahan Modbus TCP?

Pada rangkaian Ethernet, alamat peranti ialah alamat IPnya. Biasanya, peranti terletak pada subnet yang sama, di mana alamat IP berbeza digit terakhir 192.168.1.20 apabila menggunakan subnet mask yang paling biasa 255.255.255.0.

Antara muka ialah rangkaian Ethernet, protokol pemindahan data – TCP/IP.

Port TCP yang digunakan: 502 .

Penerangan mengenai protokol TCP Modbus

Arahan Modbus TCP terdiri daripada bahagian mesej Modbus RTU dan pengepala khas.

Daripada mesej Modbus RTU, alamat SlaveID pada permulaan dan CRC checksum pada akhir dialih keluar, yang membentuk PDU, Unit Data Protokol.

Di bawah ialah contoh permintaan Modbus RTU untuk mendapatkan nilai keluaran analog AO (daftar pegangan) daripada daftar #40108 hingga 40110 dengan alamat peranti 17.

11 03 006B 0003 7687

Kami membuang alamat peranti SlaveID dan CRC checksum dan mendapatkan PDU:

03 006B 0003

Pengepala 7-bait baharu yang dipanggil Pengepala MBAP (Pengepala Aplikasi Modbus) ditambahkan pada permulaan mesej PDU yang terhasil. Pengepala ini mempunyai data berikut:

Pengecam Transaksi: 2 bait ditetapkan oleh Guru untuk mengenal pasti secara unik setiap permintaan. Boleh jadi mana-mana. Bait ini akan diulang oleh Hamba dalam respons kerana respons Hamba mungkin tidak selalu diterima dalam susunan yang sama seperti permintaan.

Pengecam Protokol: 2 bait ditetapkan oleh Master, akan sentiasa = 00 00, yang sepadan dengan protokol Modbus.

Panjang: 2 bait ditetapkan oleh Master, mengenal pasti bilangan bait dalam mesej yang mengikuti. Mengira dari Pengecam Unit hingga ke penghujung mesej.

Pengecam Unit: 1 bait ditetapkan kepada Master. Diulangi oleh peranti Slave untuk mengenal pasti peranti Slave secara unik.

Secara keseluruhan kami mendapat:

Modbus RTUID hambaPermintaanCRC
Modbus RTU 11 03 006B 0003 7687
0001 0000 0006 11 03 006B 0003
PDU
ADU Data Permohonan Unit

Sebagai tindak balas daripada Modbus TCP Peranti hamba kita akan dapat:

0001 0000 0009 11 03 06 022B 0064 007F

0001 ID Transaksi Pengecam Transaksi
0000 ID Protokol Pengecam Protokol
0009 Panjang(9 bait mengikuti)Panjang Mesej
11 Alamat peranti(17 = 11 hex)Pengecam Unit
03 Kod fungsi(baca Daftar Pegangan Output Analog)Kod Fungsi
06 Bilangan bait lagi(6 bait mengikuti)Kiraan Bait
02 (02 hex)Daftar nilai Hi (AO0)
2B (2B hex)Daftar nilai Lo (AO0)
00 Nilai bit paling ketara daftar(00 hex)Daftar nilai Hi (AO1)
64 Daftar nilai LSB(64 hex)Daftar nilai Lo (AO1)
00 Nilai bit paling ketara daftar(00 hex)Daftar nilai Hi (AO2)
7F Daftar nilai LSB(7F hex)Daftar nilai Lo (AO2)

Daftar keluaran analog AO0 mempunyai nilai 02 2B HEX atau 555 dalam perpuluhan.

Daftar keluaran analog AO1 mempunyai nilai 00 64 HEX atau 100 dalam sistem perpuluhan.

Daftar keluaran analog AO2 mempunyai nilai 00 7F HEX atau 127 dalam sistem perpuluhan.

Jenis Perintah Modbus TCP

Berikut ialah jadual dengan kod fungsi untuk membaca dan menulis daftar Modbus TCP.

Kod fungsiApakah fungsinyaJenis nilaiJenis akses
01 (0x01)Membaca DOBaca Status GegelungdiskretMembaca
02 (0x02)Membaca DIBaca Status InputdiskretMembaca
03 (0x03)Membaca AOBaca Daftar Pegangan16 bitMembaca
04 (0x04)Membaca AIBaca Daftar Input16 bitMembaca
05 (0x05)Tulis satu DOPaksa Gegelung TunggaldiskretRekod
06 (0x06)Merakam satu AODaftar Tunggal Pratetap16 bitRekod
15 (0x0F)Rakaman DO berbilangPaksa Berbilang GegelungdiskretRekod
16 (0x10)Merakam berbilang AOPratetap Berbilang Daftar16 bitRekod

Bagaimana untuk menghantar arahan Modbus TCP untuk membaca output diskret? Perintah 0x01

Perintah ini digunakan untuk membaca nilai output digital DO.

Permintaan PDU menentukan alamat permulaan daftar DO pertama dan bilangan nilai DO berikutnya yang diperlukan. Dalam PDU, nilai DO ditangani bermula dari sifar.

Nilai DO dalam tindak balas adalah dalam satu bait dan sepadan dengan makna bit.

Nilai bit ditakrifkan sebagai 1 = ON dan 0 = OFF.

Bit paling tidak ketara bagi bait data pertama mengandungi nilai DO yang alamatnya ditentukan dalam permintaan. Baki nilai DO diteruskan dalam tertib menaik kepada nilai bait yang paling ketara. Itu. dari kanan ke kiri.

Jika kurang daripada lapan nilai DO diminta, baki bit dalam respons akan diisi dengan sifar (bait rendah ke arah bait tinggi). Medan Kiraan Bait Bilangan bait lagi menunjukkan bilangan bait lengkap data dalam respons.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 04
01 Alamat peranti01 Alamat peranti
01 Kod fungsi01 Kod fungsi
00 01 Bilangan bait lagi
00 02 nilai daftar DO 0-1
00 Bilangan daftar Hi bait
02 Bilangan daftar Lo bait

Keadaan output DO0-1 ditunjukkan sebagai nilai bait 02 hex, atau dalam sistem binari 0000 0010.

Nilai DO1 akan menjadi kedua dari kanan, dan nilai DO0 akan menjadi yang pertama dari kanan (LSB).

Baki enam bit diisi dengan sifar hingga bait penuh, kerana mereka tidak diminta.

Modul Output Diskret: ioLogik E1211, ET-7060, ADAM-6060

Bagaimana untuk menghantar arahan Modbus TCP untuk membaca input diskret? Perintah 0x02

Perintah ini digunakan untuk membaca nilai DI.

Permintaan dan respons untuk DI adalah serupa dengan permintaan untuk DO.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 04
01 Alamat peranti01 Alamat peranti
02 Kod fungsi02 Kod fungsi
00 Alamat daftar pertama Hi byte01 Bilangan bait lagi
00 Alamat daftar pertama Lo byte03 Nilai daftar DI 0-1
00 Bilangan daftar Hi bait
02 Bilangan daftar Lo bait

Keadaan output DI 0-1 ditunjukkan sebagai nilai bait 03 hex, atau dalam binari 0000 0011.

Nilai DI1 akan menjadi kedua dari kanan, dan nilai DI0 akan menjadi pertama dari kanan (LSB).

Baki enam bit diisi dengan sifar.

Modul input diskret: ioLogik E1210, ET-7053, ADAM-6050

Bagaimana untuk menghantar arahan Modbus TCP untuk membaca output analog? Perintah 0x03

Perintah ini digunakan untuk membaca nilai output analog AO.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 07
01 Alamat peranti01 Alamat peranti
03 Kod fungsi03 Kod fungsi
00 Alamat daftar pertama Hi byte04 Bilangan bait lagi
00 Alamat daftar pertama Lo byte02 Nilai daftar hai (AO0)
00 Bilangan daftar Hi bait2BNilai daftar Lo (AO0)
02 Bilangan daftar Lo bait00 Hi daftar nilai (AO1)
64 Nilai daftar Lo (AO1)

Keadaan keluaran AO0 ditunjukkan sebagai nilai bait 02 2B hex, atau 555 perpuluhan.

Keadaan keluaran AO1 ditunjukkan sebagai nilai bait 00 64 hex, atau 100 perpuluhan.

Modul input diskret: ioLogik E1210, ET-7053, ADAM-6050

Bagaimana untuk menghantar arahan Modbus TCP untuk membaca input analog? Perintah 0x04

Perintah ini digunakan untuk membaca nilai input analog AI.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 07
01 Alamat peranti01 Alamat peranti
04 Kod fungsi04 Kod fungsi
00 Alamat daftar pertama Hi byte04 Bilangan bait lagi
00 Alamat daftar pertama Lo byte00 Nilai daftar hai (AI0)
00 Bilangan daftar Hi bait0ANilai daftar Lo (AI0)
02 Bilangan daftar Lo bait00 Nilai daftar hai (AI1)
64 Nilai daftar Lo (AI1)

Keadaan keluaran AI0 ditunjukkan sebagai nilai bait 00 0A hex, atau 10 perpuluhan.

Keadaan keluaran AI1 ditunjukkan sebagai nilai bait 00 64 hex, atau 100 perpuluhan.

Modul input analog: ioLogik E1240, ET-7017-10, ADAM-6217

Bagaimana untuk menghantar arahan Modbus TCP untuk menulis output diskret? Perintah 0x05

Perintah ini digunakan untuk menulis satu nilai DO.

Nilai FF 00 hex menetapkan output kepada ON.

Nilai 00 00 hex menetapkan output kepada MATI.

Semua nilai lain adalah tidak sah dan tidak akan menjejaskan status output.

Sambutan biasa untuk permintaan sedemikian ialah gema (mengulangi permintaan dalam respons), dikembalikan selepas keadaan DO diubah.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 06
01 Alamat peranti01 Alamat peranti
05 Kod fungsi05 Kod fungsi
00 Hai daftar bait alamat00 Hai daftar bait alamat
01 Daftar alamat Lo byte01 Daftar alamat Lo byte
FFNilai bait haiFFNilai bait hai
00 Nilai bait Lo00 Nilai bait Lo

Modul Output Diskret: ioLogik E1211, ET-7060, ADAM-6060

Bagaimana untuk menghantar arahan Modbus TCP untuk menulis output analog? Perintah 0x06

Perintah ini digunakan untuk menulis satu nilai keluaran analog AO.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
06 06
01 Alamat peranti01 Alamat peranti
06 Kod fungsi06 Kod fungsi
00 Hai daftar bait alamat00 Hai daftar bait alamat
01 Daftar alamat Lo byte01 Daftar alamat Lo byte
55 Nilai bait hai55 Nilai bait hai
FFNilai bait LoFFNilai bait Lo

Status output AO0 telah berubah kepada 55 FF hex, atau 22015 dalam perpuluhan.

Modul Output Analog: ioLogik E1241, ET-7028, ADAM-6224

Bagaimana untuk menghantar arahan Modbus TCP untuk menulis berbilang pin digital? Perintah 0x0F

Perintah ini digunakan untuk menulis berbilang nilai DO.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
08 06
01 Alamat peranti01 Alamat peranti
0FKod fungsi0FKod fungsi
00 Alamat daftar pertama Hi byte00 Alamat daftar pertama Hi byte
00 Alamat daftar pertama Lo byte00 Alamat daftar pertama Lo byte
00 Bilangan daftar Hi bait00
02 Bilangan daftar Lo bait02
01 Bilangan bait lagi
02 Nilai bait

Status output DO1 ditukar daripada MATI kepada HIDUP.

Status output DO0 kekal MATI.

Modul Output Diskret: ioLogik E1211, ET-7060, ADAM-6060

Bagaimana untuk menghantar arahan Modbus TCP untuk menulis berbilang pin analog? Perintah 0x10

Perintah ini digunakan untuk menulis berbilang nilai output analog AO.

BaitPermintaanBaitJawab
(Hex)Nama medan(Hex)Nama medan
01 ID Transaksi 01 ID Transaksi
02 02
00 ID Protokol 00 ID Protokol
00 00
00 Panjang mesej 00 Panjang mesej
0B06
01 Alamat peranti01 Alamat peranti
10 Kod fungsi10 Kod fungsi
00 Alamat daftar pertama Hi byte00 Alamat daftar pertama Hi byte
00 Alamat daftar pertama Lo byte00 Alamat daftar pertama Lo byte
00 Bilangan daftar Hi bait00 Bilangan reg. Hai bait
02 Bilangan daftar Lo bait02 Bilangan reg. Lo bait
04 Bilangan bait lagi
00 Hi nilai AO0 bait
0ALo nilai AO0 bait
01 Hi nilai AO1 bait
02 Lo nilai AO1 bait

Status output AO0 telah berubah kepada 00 0A hex, atau 10 dalam perpuluhan.

Dalam Pelajaran 48, saya menunjukkan contoh protokol pertukaran data bukan standard melalui antara muka UART. Seperti biasa, semua yang tidak standard membolehkan anda mengoptimumkan pelaksanaan tugas, dan segala-galanya yang universal memudahkan pembangunan tugas.

Terdapat protokol komunikasi ModBus universal yang mudah di mana data dan lebihan fungsi dikekalkan pada tahap minimum. Ini mungkin protokol yang paling biasa untuk mengatur sistem teragih kecil. Dalam pelajaran seterusnya saya akan melaksanakan pertukaran data antara peranti menggunakan protokol ini.

Penerangan umum protokol.

ModBus protokol terbuka pertukaran data dalam rangkaian tempatan yang kecil. Sebagai peraturan, ia digunakan untuk menghantar data melalui antara muka RS-232, RS-485, RS-422, dalam rangkaian TCP/IP, UDP. Disebabkan kesederhanaan dan serba boleh, ModBus telah meluas dan telah menjadi standard de facto dalam sistem pengkomputeran teragih kecil. Hampir semua pengawal moden menyokong rangkaian ModBus.

Dalam rangkaian ModBus, pengawal biasanya disambungkan menggunakan topologi "Common Bus". Interaksi pengawal berlaku mengikut model tuan-hamba (master-slave).

Terdapat peranti utama dalam rangkaian - tuan. Dan juga beberapa peranti hamba - hamba. Pertukaran hanya boleh dimulakan oleh peranti induk.

Transaksi (urutan operasi semasa pertukaran data) terdiri daripada permintaan dan respons.

Peranti induk boleh menangani permintaan kepada mana-mana pengawal hamba atau memulakan siaran mesej, untuk semua peranti hamba secara serentak.

Peranti hamba, setelah menentukan alamatnya dalam permintaan, menghasilkan respons.

Permintaan daripada peranti induk mesti mengandungi kod fungsi, i.e. Apa nak buat. Juga, bergantung pada fungsi, permintaan mungkin mengandungi data.

Terdapat 3 varian protokol ModBus.

  • ModBus ASCII – protokol teks. Ia hanya menggunakan aksara ASCII. Setiap bait dihantar sebagai dua aksara heksadesimal.
  • ModBus RTU ialah protokol berangka. Data dipindahkan ke binari. Bait yang dihantar melalui rangkaian ialah nombor protokol.
  • ModBus TCP ialah protokol untuk penghantaran data dalam rangkaian TCP/IP.

berangka dan protokol teks Saya membandingkan kembali dalam. Dari segi prestasi dan kelajuan pertukaran, protokol berangka pastinya mempunyai kelebihan. Dalam pelajaran yang akan datang kami akan menggunakan ModBus RTU. Maklumat berikut dalam pelajaran ini dikhaskan untuk pilihan ini.

Protokol RTU ModBus.

Peranti (pengawal) disambungkan ke rangkaian menggunakan topologi "Common Bus". Standard ModBus membenarkan bekerjasama sehingga 247 pengawal.

Setiap pengawal mengandungi data, sebenarnya, yang ditukar oleh peranti.

Standard ModBus mentakrifkan 4 jenis data.

Jenis data Saiz Operasi yang Sah
Daftar bendera (Gegelung) 1 bit Tulis dan baca
Input Diskret 1 bit Membaca
Memegang Daftar 16 bit Tulis dan baca
Daftar Masukan 16 bit Membaca

Pengasingan data berfungsi ini telah dipadamkan dan boleh dikatakan tidak digunakan. Semua data akhirnya dibaca dari ingatan pengawal dan ia tidak begitu penting di mana mereka masuk ke dalamnya daripada input atau dari daftar input.

Dalam amalan, hanya Daftar Pegangan ini digunakan. Data diakses melalui alamat 16-bit. Akhirnya:

  • data dalam setiap pengawal ialah jadual daftar 16-bit;
  • jadual data boleh mempunyai sehingga 65536 elemen;
  • penomboran unsur bermula dari 0.

Peranti induk memulakan transaksi - pertukaran data. Transaksi boleh menjadi individu (permintaan-tindak balas) atau siaran (semua peranti hamba ditangani secara serentak). Transaksi terdiri daripada satu bingkai permintaan dan satu bingkai respons. Dalam transaksi penyiaran, hanya bingkai permintaan digunakan.

Data bingkai dihantar sebagai aliran berterusan. Jeda antara penghantaran data tidak boleh melebihi masa penghantaran 1.5 aksara. Tanda bingkai baharu ialah ketiadaan pertukaran dalam rangkaian (senyap) semasa masa yang diperlukan untuk penghantaran 3.5 aksara. Jika pada masa ini talian rangkaian berada dalam keadaan tidak aktif, maka peranti hamba menganggap data pertama yang diterima sebagai permulaan bingkai.

Secara umum, bingkai permintaan mempunyai format berikut.


Alamat (8 bit).

Bingkai bermula dengan medan alamat, yang terdiri daripada 8 bit. Mengandungi alamat peranti hamba yang mesej daripada tuan dimaksudkan. Setiap peranti hamba mesti mempunyai alamat unik dari 1 hingga 247. Dan hanya peranti hamba boleh dialamatkan mesti bertindak balas kepada permintaan tuan. Jawapannya memberitahu tuan hamba yang sedang berkomunikasi.

Alamat 0 digunakan dalam mod siaran. Semua hamba melaksanakan fungsi yang dinyatakan dalam permintaan, tetapi tidak menghantar pengakuan.

Fungsi (8 bit).

Medan fungsi memberitahu hamba yang dialamatkan operasi yang perlu dilakukan.

Bit yang paling ketara bagi bait fungsi ditetapkan kepada 1 dalam respons hamba untuk memberitahu tuan bahawa operasi telah disiapkan dalam kesilapan. Jika operasi berjaya, bit yang paling ketara ialah 0.

  • Perintah standard. Kod yang ditakrifkan oleh standard protokol ModBus.
  • Perintah tersuai. Untuk kod 65...72 dan 100...110, pengguna boleh menetapkan fungsi arbitrari.
  • Pasukan simpanan. Ini adalah kod yang pada asalnya tidak ditakrifkan oleh standard, tetapi telah digunakan dalam peranti daripada pengeluar yang berbeza.

Sebilangan besar pengawal ModBus hanya menggunakan 3 fungsi.

Format respons bergantung pada fungsi. Dalam kebanyakan kes, respons biasa mengulangi permintaan secara keseluruhan atau sebahagian.

Data (N * 8 bit).

Medan data mengandungi maklumat yang diperlukan oleh pengawal hamba untuk melaksanakan fungsi yang diberikan atau medan mengandungi data yang dihantar oleh peranti hamba atas permintaan tuan. Panjang dan format medan data bergantung pada kod fungsi. Sesetengah mesej mungkin mempunyai data yang hilang.

Setiap data mempunyai 16 bit (2 bait). Data dihantar bait paling penting terlebih dahulu. Sebagai contoh, pemindahan berurutan daftar dengan alamat 0 dan 1 harus berlaku seperti berikut:

  • bait tinggi daftar 0 ->
  • bait rendah daftar 0 ->
  • bait tinggi daftar 1 ->
  • bait rendah daftar 1 ->.

Apabila menghantar nombor 4-bait, sebagai contoh, dengan titik terapung, urutannya adalah sama. Nombor itu dibahagikan kepada dua daftar 16-bit dan dalam setiap daripadanya bait yang paling ketara dihantar terlebih dahulu (1-> 0-> 3-> 2->).

Checksum (16 bit).

Medan kawalan integriti data mesej. Membolehkan anda menyemak bingkai untuk ralat. Ia mengenai tentang ralat yang muncul semasa pemindahan data.

saya akan cuba yang terbaik garis besar umum bercakap tentang kod kawalan. Lebih baik langkau perenggan ini. Kepala anda mungkin retak. Apabila saya menyentuh topik ini, saya selalu sakit kepala. Dalam pelajaran seterusnya saya akan memperkenalkan pelaksanaan praktikal Pengiraan kod kawalan ModBus.

Kod redundansi kitaran (CRC) digunakan sebagai jumlah semak. Semua bit bingkai penghantaran dikumpul menjadi besar nombor binari. Ia dibahagikan dengan kod polinomial penjanaan. Baki bahagian adalah kod kawalan.

Modulo aritmetik polinomial 2 digunakan. Ini bermakna semua tindakan semasa mengira CRC adalah operasi aritmetik tiada pemindahan. Penolakan dan penambahan berlaku bitwise, tanpa mengambil kira bawa, itulah sebabnya operasi ini memberikan hasil yang sama dan boleh digantikan dengan operasi "eksklusif atau". Apabila membahagi, bukannya menolak pembahagi daripada dividen, operasi "eksklusif atau" juga digunakan. ini prinsip umum pengiraan CRC. Dalam amalan, pengiraan dilakukan menggunakan algoritma yang lebih cekap.

Checksum menamatkan bingkai penghantaran. Setelah menerima bingkai, peranti hamba, menggunakan algoritma yang sama, mengira jumlah semak untuk data yang diterima dan membandingkannya dengan kod semak yang dihantar di hujung bingkai. Akibatnya, integriti data bingkai disahkan.

ModBus RTU standard menggunakan standard kod kitaran CRC-16 dengan menjana polinomial X 16 +X 15 +X 2 +1. Ini ialah kod 16-bit, pekali binari ialah 1 1000 0000 0000 0101 (8005h dalam perenambelasan).

Mesej itu dianggap sebagai satu nombor perduaan berjujukan di mana bit paling ketara dihantar terlebih dahulu. Nombor ini didarab dengan X 16 (dianjak ke kiri dengan 16 tempat), dan dibahagikan dengan X 16 +X 15 +X 2 +1 (1 1000 0000 0000 0101). Baki 16-bit (pra-dimulakan dengan semua yang lain) ialah kod kawalan mesej.

Mengendalikan ralat logik.

Selain ralat yang dikaitkan dengan rasuah data semasa penghantaran, mungkin terdapat ralat logik apabila permintaan diterima tanpa ralat, tetapi tidak boleh dilaksanakan. Biasanya, ralat tersebut dikaitkan dengan alamat, data, kod, dsb. Kebanyakan pengawal ModBus menyokong jenis ralat berikut.

Kod salah Nama Penerangan
01 FUNGSI HARAM Kod fungsi tidak disokong dalam pengawal
02 ALAMAT DATA HARAM Alamat data tidak sah
03 NILAI DATA HARAM Nilai data tidak sah
04 KEGAGALAN PERANTI HAMBA Ralat berlaku semasa menjalankan operasi

Jika ralat berlaku dalam respons, bit paling ketara ditetapkan dalam medan kod fungsi dan kemudian kod ralat dihantar dan bukannya data biasa.

Pemeriksaan terperinci fungsi.

Fungsi 03 – baca daftar pegangan.

Digunakan untuk membaca nilai beberapa daftar pegangan. Permintaan menghantar alamat elemen pertama jadual daftar, nilai yang mesti dibaca, dan bilangan daftar untuk dibaca. 16 digunakan untuk alamat dan kuantiti nombor bit. Bait yang paling ketara dihantar dahulu.

Data yang diminta terkandung dalam jawapan. Sebelum blok data, bait dihantar yang mengandungi bilangan data dibaca dalam bait.

Format permintaan untuk fungsi membaca daftar storan.

Nombor bait Nombor bait dalam parameter Parameter
0 0 Alamat pengawal 01 01
1 0 Fungsi 03 03
2 1 Alamat permulaan daftar 0008 00
3 0 08
4 1 Bilangan daftar 0002 00
5 0 02
6 1 Jumlah semak 45C9 45
7 0 C9

Respons (alamat hamba, kod fungsi, bilangan bait dibaca, nilai daftar).

Nombor bait Nombor bait dalam parameter Parameter Contoh daftar bacaan dengan alamat 8 dan 9
0 0 Alamat pengawal 01 01
1 0 Fungsi 03 03
2 0 Bilangan bait dibaca 04 04
3 1 Nilai daftar 8 12A5 12
4 0 A5
5 1 Nilai daftar 9 E020 E0
6 0 20
7 1 Jumlah semak A770 A7
8 0 70

Fungsi 06 – tulis kepada satu daftar pegangan.

Digunakan untuk menulis kepada satu daftar. Permintaan itu melepasi alamat daftar dan nilai untuknya. Jika berjaya, pengawal hamba membalas dengan salinan permintaan.

Format permintaan fungsi tulis daftar pegangan tunggal.

Nombor bait Nombor bait dalam parameter Parameter
0 0 Alamat pengawal 01 01
1 0 Fungsi 06 06
2 1 Daftar alamat 0009 00
3 0 09
4 1 Daftar nilai 12A5 12
5 0 A5
6 1 Jumlah semak 9513 95
7 0 13

Balas (mengulang permintaan).

Nombor bait Nombor bait dalam parameter Parameter Contoh menulis nilai 12A5 untuk mendaftar 9
0 0 Alamat pengawal 01 01
1 0 Fungsi 06 06
2 1 Daftar alamat 0009 00
3 0 09
4 1 Daftar nilai 12A5 12
5 0 A5
6 1 Jumlah semak 9513 95
7 0 13

Fungsi 16 – menulis nilai pada daftar simpanan.

Digunakan untuk menulis kepada beberapa daftar yang terletak secara berurutan dalam jadual.

Permintaan menghantar alamat daftar pertama, bilangan daftar dan nilai untuk mereka.

Respons mengembalikan alamat permulaan dan bilangan daftar yang diubah suai.

Format permintaan untuk fungsi tulis daftar storan.

Nombor bait Nombor bait dalam parameter Parameter
0 0 Alamat pengawal 01 01
1 0 Fungsi 10 10
2 1 Alamat permulaan daftar 0008 00
3 0 08
4 1 Bilangan daftar 0002 00
5 0 02
6 0 Kaunter bait 04 04
7 1 Nilai daftar 8 12A5 12
8 0 A5
9 1 Nilai daftar 9 E020 E0
10 0 20
11 1 Jumlah semak AF4A A.F.
12 0 4A

Respons (alamat hamba, kod fungsi, alamat mula dan bilangan daftar).

Nombor bait Nombor bait dalam parameter Parameter Contoh menulis daftar dengan alamat 8 dan 9
0 0 Alamat pengawal 01 01
1 0 Fungsi 10 10
2 1 Alamat permulaan daftar 0008 00
3 0 08
4 1 Bilangan daftar 0002 00
5 0 02
6 1 Jumlah semak C00A C0
7 0 0A

ModBus dan protokol khusus.

Kini anda boleh membandingkan protokol ModBus dengan protokol khusus daripada .

Nombor bait Format nombor Tujuan
0 … 3 terapung Suhu
4 … 7 terapung voltan
8 bait Keadaan butang
9 bait Rizab
10, 11 int Jumlah semak (jumlah bait 0 ... 9 ^ 0xa1e3)

Berbanding dengan protokol khusus:

  • ModBus lebih perlahan dan mempunyai prestasi yang lebih rendah. Untuk mendapatkan jumlah maklumat yang sama, lebih banyak data dihantar melalui rangkaian.
  • Pelaksanaannya lebih sukar. Memerlukan lebih banyak mikropengawal dan sumber rangkaian.

Tetapi kelebihannya dalam banyak kes lebih ketara.

  • Disebabkan oleh checksum yang lebih kompleks dan maklumat yang berlebihan, ralat rangkaian ditentukan dengan lebih pasti dan kebolehpercayaan data lebih tinggi.
  • Rangkaian mudah dikembangkan. Sangat mudah untuk menambah peranti baharu.
  • ModBus ialah protokol standard. Banyak pengawal daripada pengeluar yang berbeza menyokongnya.

mungkin, sebab utama penggunaan protokol bukan standard bermakna sumber pengkomputeran sistem yang tidak mencukupi.

Benar, ada sebab lain untuk menggunakan protokol bukan standard. Termasuk, terima kasih kepada syarikat kami memenangi tender utama. Tiada sesiapa selain pembangun akan dapat menyambung ke peranti dengan protokol khusus dan mengawalnya. Itu. agak berlawanan protokol standard kualiti. Undang-undang falsafah perpaduan yang bertentangan berlaku.

Dalam pelajaran seterusnya kita akan melaksanakan komunikasi antara papan Arduino dan komputer menggunakan protokol ModBus.

Kategori: . Anda boleh menanda bukunya.