Delphi adalah alat pengembangan aplikasi visual yang cepat dengan keunggulan fungsi yang kuat, kemudahan penggunaan dan eksekusi kode yang cepat. Delphi memainkan peran yang semakin penting dalam membangun sistem informasi perusahaan. Banyak pemrogram yang bersedia memilih Delphi sebagai alat pengembangan program . Namun, yang menarik adalah Delphi tidak memiliki kontrol komunikasi serialnya sendiri, dan komunikasi serial tidak disebutkan dalam dokumentasi bantuannya, yang membawa banyak ketidaknyamanan bagi pengembang yang mengkompilasi program komunikasi.
Saat ini, ada tiga metode yang umum digunakan untuk mengimplementasikan komunikasi serial menggunakan Delphi: satu adalah dengan menggunakan kontrol, seperti kontrol MSCOMM dan kontrol SPCOMM; yang lainnya adalah dengan menggunakan fungsi API; Diantaranya, penggunaan API untuk menulis program komunikasi serial lebih rumit dan membutuhkan banyak pengetahuan komunikasi. Sebagai perbandingan, penggunaan kontrol SPCOMM relatif sederhana, dan kontrol tersebut memiliki properti dan peristiwa yang kaya yang terkait erat dengan komunikasi port serial, menyediakan berbagai operasi pada port serial, dan juga mendukung multi-threading. Artikel berikut memperkenalkan penggunaan kontrol SPCOMM secara rinci dengan contoh.
instalasi SPCOMM
1. Pilih opsi Instal Komponen di menu tarik-turun Komponen, isi jalur di mana kontrol SPCOMM berada di nama file Unit, nilai default dapat digunakan untuk item lain, dan klik tombol OK.
2. Setelah instalasi, COM kontrol merah akan muncul di panel kontrol Sistem. Sekarang Anda dapat menggunakan kontrol COM seperti kontrol Delphi sendiri.
Properti, metode, dan peristiwa SPCOMM
1.Atribut
●CommName: Menunjukkan nama port serial seperti COM1 dan COM2;
●BaudRate: Baud rate yang diatur sesuai dengan kebutuhan sebenarnya. Nilai ini juga dapat diubah setelah port serial dibuka, dan baud rate aktual akan berubah;
●ParityCheck: Menunjukkan apakah pemeriksaan paritas diperlukan;
●ByteSize: Panjang byte yang diatur sesuai dengan situasi sebenarnya;
●Paritas: bit paritas;
●StopBits: menghentikan bit;
●SendDataEmpty: Ini adalah atribut Boolean. Jika benar, berarti buffer pengiriman kosong, atau tidak ada informasi dalam antrian pengiriman, jika salah, berarti buffer pengiriman tidak kosong, atau ada adalah informasi dalam antrian pengiriman.
2. metode
●Metode Startcomm digunakan untuk membuka port serial. Jika pembukaan gagal, biasanya dilaporkan kesalahan. Ada tujuh jenis kesalahan utama: ⑴ Port serial telah dibuka; ⑵ Kesalahan dalam membuka port serial; ⑶ Pegangan file bukan pegangan komunikasi; ⑷ Cache komunikasi tidak dapat diinstal ⑸ Peristiwa tidak dapat dibuat; Proses membaca tidak dapat dihasilkan; ⑺ Proses menulis tidak dapat dihasilkan;
●Metode StopComm digunakan untuk menutup port serial dan tidak memiliki nilai kembalian;
●Metode WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word) adalah fungsi dengan nilai kembalian Boolean. Metode ini digunakan untuk mengirim string ke proses penulisan. Fungsi ini mengembalikan nilai true jika pengiriman berhasil dan false jika pengiriman gagal. Menjalankan fungsi ini akan segera mendapatkan nilai kembalian, dan operasi pengiriman akan dijalankan selanjutnya. Fungsi ini memiliki dua parameter, dimana pDataToWrite adalah string yang akan dikirim, dan dwSizeofDataToWrite adalah panjang string yang akan dikirim.
3. peristiwa
●OnReceiveData :PROcedure (Pengirim: TObject;Buffer: Pointer;BufferLength: Word) objek
Event ini akan dipicu ketika data dimasukkan ke buffer, dimana data yang diterima dari port serial dapat diproses. Buffer berisi data yang diterima, dan BufferLength adalah panjang data yang diterima.
●OnReceiveError: procedure(Pengirim: TObject; EventMask: DWORD)
Event ini dipicu ketika terjadi kesalahan dalam penerimaan data.
Penggunaan SPCOMM
Berikut contoh komunikasi serial dengan menggunakan kendali SPCOMM.
Mengambil contoh komunikasi antara PC dan mikrokontroler 8051, pertama-tama kita harus mengatur sinyal jabat tangan di antara keduanya. Asumsikan protokol komunikasi antar keduanya adalah: Satu frame data dari PC ke 8051 berukuran 6 byte, dan satu frame data dari 8051 ke PC juga berukuran 6 byte. Ketika PC mengirim (F0,01,FF,FF,01,F0), 8051 dapat menerima frame (F0,01,FF,FF,01,F0), yang menunjukkan bahwa jabat tangan komunikasi data berhasil, dan keduanya dapat mengikuti Protokol mentransfer data satu sama lain.
Buat proyek baru COMM.DPR, atur properti NAME formulir menjadi FCOMM, tentukan judul formulir sebagai Test Communication, dan tambahkan kontrol yang sesuai.
1. Tetapkan atribut COMM1:
●Tingkat baud: 4800;
●Bit paritas: Tidak ada;
●Panjang byte: 8;
●Berhenti sedikit: 1;
●Port serial: COM1.
Data yang dikirim dan diterima akan ditampilkan di Memo1. Simpan formulir baru sebagai Comm.pas.
2.Tulis kode sumber
//Deskripsi variabel
var
fcomm:TFCOMM;
tali tampilan:string;
saya: bilangan bulat;
rbuf,sbuf:array[16] byte;
//Buka port serial
prosedur TFCOMM.FormShow(Pengirim: TObject);
mulai
comm1.StartComm;
akhir;
//Tutup port serial
prosedur TFCOMM.FormClose(Pengirim: TObject; var Action: TCloseAction);
mulai
comm1.StopComm;
akhir;
//Sesuaikan proses pengiriman data
prosedur pengiriman data;
var
saya: bilangan bulat;
commflg:boolean;
mulai
tali tampilan:='';
commflg:=benar;
untuk i:=1 sampai 6 lakukan
mulai
jika bukan fcomm.comm1.writecommdata(@sbuf[i],1) maka
mulai
commflg:=salah;
merusak;
akhir;
//Penundaan antar byte saat pengiriman
tidur(2);
string tampilan:=string tampilan+intttohex(sbuf[i],2)+'';
viewstring:='Kirim'+viewstring;
fcomm.memo1.lines.add(string tampilan);
fcomm.memo1.lines.add('' );
jika tidak commflg maka messagedlg('Pengiriman gagal!',mterror,[mbyes],0);
akhir;
//Kirim acara klik tombol
prosedur TFCOMM.Btn_sendClick(Pengirim: TObject);
mulai
sbuf[1]:=byte($ f0); //Tajuk bingkai
sbuf[2]:=byte($01); //Nomor perintah
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=bita($01);
sbuf[6]:=byte($ f0); //Akhir bingkai
senddata;//Panggil fungsi kirim
akhir;
//proses penerimaan
prosedur TFCOMM.Comm1ReceiveData(Pengirim: TObject; Buffer: Pointer;BufferLength: Word);
var
saya: bilangan bulat;
mulai
tali tampilan:='';
pindah(buffer^,pchar(@rbuf^),bufferlength);
untuk i:=1 ke bufferlength lakukan
string tampilan:=string tampilan+intttohex(rbuf[i],2)+'';
string tampilan:='terima'+string tampilan;
memo1.lines.add(viewstring);
memo1.garis.tambahkan('' );
akhir;
Jika memo1 menampilkan pengiriman F0 01 FF FF 01 F0 dan penerimaan F0 01 FF FF 01 F0, berarti port serial telah mengirim data dengan benar dan menerima data dengan benar, serta komunikasi serial berhasil.