ASCII untuk Data PLC: Desimal, Heksadesimal, dan Kode Kontrol
Pelajari bagaimana karakter ASCII, nilai desimal, byte heksadesimal, dan kode kontrol muncul dalam string PLC dan pesan serial, dengan metode praktis untuk mendiagnosis gangguan pembingkaian dan pe...
ASCII tetap umum digunakan dalam proyek PLC karena banyak perangkat industri bertukar teks satu byte pada satu waktu. Pembaca barcode, printer label, timbangan, drive, gateway serial, dan terminal operator sering merepresentasikan perintah serta pengukuran sebagai kode karakter. Teknisi yang dapat berpindah antara karakter, nilai desimal, dan byte heksadesimal dapat memecahkan masalah pada koneksi ini dengan lebih cepat.
Yang didefinisikan ASCII
American Standard Code for Information Interchange asli adalah kumpulan karakter tujuh bit. Kumpulan ini mendefinisikan 128 nilai, bernomor 0 hingga 127. Nilai 0 hingga 31 dan 127 adalah karakter kontrol. Nilai 32 hingga 126 adalah karakter yang dapat dicetak, termasuk huruf, angka, tanda baca, dan spasi.
Spesifikasi RFC 20 yang dihosting IETF mendokumentasikan posisi kode dan makna yang dimaksud. Sistem modern biasanya menyimpan karakter ASCII dalam byte delapan bit. Bit tertinggi tetap nol untuk ASCII standar.
Desimal, heksadesimal, dan biner adalah byte yang sama
Tag PLC dapat menampilkan nilai yang sama dalam beberapa format angka. Huruf kapital A adalah desimal 65, heksadesimal 41, dan biner 01000001. Digit 0 adalah desimal 48 atau heksadesimal 30. Ini bukan karakter yang berbeda. Ini adalah tampilan berbeda dari pola numerik yang sama.
Heksadesimal berguna selama commissioning karena satu byte dapat direpresentasikan dalam dua digit heksadesimal. Penangkapan paket, monitor serial, dan manual perangkat juga cenderung menampilkan nilai byte dalam heksadesimal. Desimal sering kali lebih mudah digunakan ketika instruksi PLC mengharuskan konstanta bilangan bulat.
Kode kontrol penting dalam pesan industri
Banyak protokol serial menggunakan karakter kontrol sebagai pembatas. Carriage return adalah desimal 13 atau heksadesimal 0D. Line feed adalah desimal 10 atau heksadesimal 0A. Start of Text adalah heksadesimal 02, sedangkan End of Text adalah heksadesimal 03. Perangkat dapat mengabaikan perintah yang valid jika terminator yang diwajibkan tidak ada.
Jangan berasumsi bahwa setiap perangkat menggunakan CR/LF. Beberapa perangkat hanya memerlukan CR. Perangkat lain menggunakan pembatas yang dapat dicetak, panjang pesan tetap, atau byte checksum. Pastikan frame yang tepat dalam manual protokol dari produsen.
Bagaimana string PLC menjadi array byte
Platform PLC menyimpan string dengan cara yang berbeda. Beberapa menempatkan panjang saat ini sebelum data karakter. Yang lain menyediakan array berukuran tetap dan mengakhiri teks dengan byte nol. Ketika data melintasi batas protokol, perangkat penerima melihat byte, bukan tipe string internal pengontrol.
Periksa panjang string yang dideklarasikan dan buffer yang mendasarinya. Byte lama setelah panjang saat ini dapat muncul dalam data yang dikirim jika suatu rutin mengirim seluruh buffer. Bersihkan tujuan atau kirim hanya jumlah karakter aktif.
Metode diagnosis praktis
- Rekam byte yang benar-benar dikirim menggunakan monitor serial, penganalisis protokol, atau halaman diagnosis gateway.
- Tulis setiap byte dalam heksadesimal dan petakan kembali nilai yang dapat dicetak ke karakter.
- Tandai byte pembingkaian, terminator, pemisah, bidang panjang, dan checksum.
- Bandingkan rekaman dengan manual perangkat, termasuk spasi dan kapitalisasi huruf.
- Ulangi perekaman untuk pesan yang diketahui berfungsi dengan baik dan bandingkan posisi byte.
Pendekatan tingkat byte ini memisahkan kesalahan pemformatan dari masalah kabel, laju baud, dan paritas. Jika rekaman menunjukkan teks yang dapat dibaca tetapi tidak lengkap, fokuskan pemeriksaan pada penyusunan string. Jika setiap byte salah, verifikasi pengaturan fisik dan serial terlebih dahulu.
Kesalahan implementasi umum
Menyamakan digit dengan nilai numeriknya
Karakter “5” adalah ASCII desimal 53, bukan nilai bilangan bulat 5. Mengonversi angka hasil pengukuran menjadi teks memerlukan rutin pemformatan. Menyalin bilangan bulat mentah ke buffer karakter akan menghasilkan byte kontrol.
Mencampur teks heksadesimal dengan byte biner
Teks “41” berisi dua karakter: heksadesimal 34 dan heksadesimal 31. Satu byte dengan nilai heksadesimal 41 merepresentasikan huruf A. Tentukan apakah protokol mengharapkan teks heksadesimal yang dapat dibaca manusia atau data biner mentah.
Mengabaikan pengodean di luar ASCII
ASCII mencakup huruf bahasa Inggris dan kumpulan simbol yang terbatas. UTF-8 menggunakan nilai byte yang sama untuk 128 karakter pertama, tetapi karakter non-ASCII menggunakan beberapa byte. Perangkat lama dapat menolak byte tersebut atau menghitungnya secara keliru.
Panduan desain untuk kode PLC yang mudah dipelihara
Simpan pemformatan protokol dalam satu rutin. Beri nama konstanta untuk kode kontrol, alih-alih menyebarkan literal numerik di seluruh logika ladder atau teks terstruktur. Catat buffer pengiriman akhir dalam heksadesimal selama commissioning. Sertakan contoh dalam dokumentasi proyek.
Ketika protokol berkembang melampaui pembingkaian teks sederhana, gunakan mesin keadaan yang terdefinisi. Lacak posisi penerimaan, batas waktu, keadaan frame, dan hasil validasi secara terpisah. Hal ini mempermudah diagnosis percobaan ulang dan pesan yang tidak valid.
Untuk pola penanganan data yang lebih luas, lihat perulangan melalui array dalam sistem PLC. Untuk perangkat berjaringan, panduan menerapkan perangkat Modbus TCP menambahkan konteks pembingkaian dan commissioning.
Daftar periksa commissioning
- Pastikan kumpulan karakter dan urutan byte.
- Verifikasi pembatas dan terminator dalam heksadesimal.
- Periksa apakah pesan memiliki panjang tetap atau diawali panjang.
- Bedakan teks heksadesimal yang dapat dicetak dari data biner mentah.
- Validasi perilaku batas waktu, percobaan ulang, dan penghapusan buffer.
- Arsipkan rekaman byte yang diketahui berfungsi dengan baik bersama berkas proyek.
ASCII sederhana, tetapi kegagalan industri sering tersembunyi dalam satu byte yang hilang atau salah dibaca. Perlakukan pesan sebagai urutan nilai numerik terlebih dahulu. Konversikan kembali ke teks hanya setelah frame dipahami.