Pada tahun berapa - hitung, di negeri apa - tebak, pertanyaan yang diajukan. Seberapa cepat ARM daripada AVR? Protokol Modbus mana yang "lebih cepat"? ASCII atau RTU?
Dengan "kecepatan", dalam kasus ini, yang kami maksud adalah jumlah siklus mesin prosesor yang diperlukan untuk menjalankan semua tindakan protokol.
Studi kinerja akan dilakukan pada pustaka ModBus Slave RTU / ASCII , yang dikenal luas dalam lingkaran sempit , yang diporting ke mikrokontroler ATMega48 dan STM32L052. Kami akan menampilkan informasi melalui protokol Modbus ke emulator panel Weintek. Pengujian akan dilakukan pada contoh demo . Selain hasil pengujian, panel menampilkan status register Modbus: input diskrit, output diskrit, register untuk membaca dan register untuk membaca / menulis. Panel tersebut juga menghitung banyaknya kesalahan dalam pertukaran data dengan mikrokontroler. Jendela tes ditunjukkan pada gambar.
Kami akan mengevaluasi kinerja dengan mengukur waktu pelaksanaan fungsi pemrosesan pesan protokol. Kami akan mengukur waktu eksekusi menggunakan metode buruh-tani. Sebelum memulai fungsinya, kita reset timer hardware yang frekuensi penghitungannya sama dengan frekuensi clock mikrokontroler, setelah menjalankan fungsinya, kita membaca nilai timer dan memproses hasil pengukuran. Kami menghitung nilai minimum, maksimum dan rata-rata waktu eksekusi fungsi pemrosesan pesan dari protokol Modbus.
while(1)
{
TIM6->CNT=0;
ModBusRTU();
//ModBusASCII();
tcurent=TIM6->CNT;
if(tcurent<tmin)tmin=tcurent;
if(tcurent>tmax)tmax=tcurent;
avg32=avg32-(avg32>>16)+tcurent;
tavg=avg32>>alfa;
...
Hasil penelitian dirangkum dalam tabel. Penelitian dilakukan dengan berbagai pilihan perpustakaan:
- ModBusUseTableCRC - Gunakan perhitungan CRC tabel;
- ModBusUseErrMes - Gunakan pesan tentang kesalahan protokol logis;
Dan juga dengan strategi pengoptimalan kompiler yang berbeda.
Pustaka ModBus Slave RTU / ASCII mendukung, dalam beberapa kasus, fungsi penting - jeda antara menerima permintaan dari Modbus Master dan respons Modbus Slave. Penelitian dilakukan dengan nilai jeda 2 milidetik dan 0 (yaitu, tanpa jeda), nilai-nilai ini ditunjukkan pada kolom tabel "Pause P / P". Kolom "Ukuran" menunjukkan ukuran modul, yang mencakup kedua fungsi untuk memproses pesan Modbus (ModBusRTU (), ModBusASCII ()).
Menurut penulis, yang paling bijaksana adalah mengevaluasi kinerja menurut kasus terburuk, yaitu sesuai dengan waktu eksekusi maksimum dari fungsi tersebut.
Setelah memikirkan secara mendalam hasil penelitian tersebut, maka dapat ditarik kesimpulan sebagai berikut:
- AVR tidak terlalu lambat !!! Rata-rata, ini satu setengah kali lebih lambat dari ARM pada kecepatan jam yang sama. Dan dalam kasus pengoptimalan ukuran (misalnya, varian 13 dan 15), secara praktis mendekati ARM.
- Protokol ASCII, dibandingkan dengan RTU, tidak hanya lebih lambat dalam kecepatan transmisi, tetapi juga membutuhkan lebih banyak sumber daya mikrokontroler.
- Penggunaan pesan tentang kesalahan logika dari protokol tidak mempengaruhi kinerja dengan cara apapun.
- Metode tabel untuk menghitung CRC memungkinkan lebih dari satu setengah kali untuk mengurangi penggunaan sumber daya komputasi mikrokontroler.
- Menggunakan jeda antara menerima permintaan dan mengirimkan respons memungkinkan tidak hanya untuk menghindari konflik pada bus RS-485, tetapi juga untuk mengurangi fungsi pemblokiran pemrosesan pesan dari protokol Modbus.
Kesimpulan lain apa yang bisa ditarik?