Cara mengirim dan menerima data biner dengan menggunakan kontrol VFP MSComm32

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 154741 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menggambarkan beberapa teknik yang menggunakan Visual FoxPro 3.0 Komunikasi (MSComm) kontrol untuk menerima dan mengirimkan data biner atas kabel RS-232 (tanpa modem).

INFORMASI LEBIH LANJUT

Kontrol komunikasi, MSCOMM32.OCX, menyediakan komunikasi serial untuk aplikasi Anda dengan memungkinkan transmisi dan penerimaan data melalui serial port di mana hanya serangkaian karakter untuk transmisi penyangga diperbolehkan. Fitur ini membatasi Anda untuk transmisi hanya teks- file berbasis.

Artikel ini menunjukkan bagaimana untuk menggunakan kontrol MSComm untuk mengirimkan dan menerima data biner yang menggunakan kabel RS-232. (Teknik dalam artikel ini juga akan bekerja dengan modem.) Data biner harus dikonversi satu byte pada waktu untuk sebuah karakter yang kemudian diteruskan. Ketika menerima, data harus dikonversi dari karakter kembali ke data biner satu byte pada suatu waktu.

Pada sistem operasi diaktifkan DBCS (menjalankan perangkat lunak sistem operasi yang menggunakan salah satu rangkaian karakter ganda-byte), data biner akan rusak Jika salah satu nilai-nilai biner pertandingan tokoh utama DBCS. MSComm kontrol akan menafsirkan byte ini dan byte berikut sebagai satu byte ganda karakter dan kembali hanya satu byte untuk karakter ASCII setara. Pada mengatasi masalah ini, Anda perlu mengkonversi satu byte ke ASCII ukuran tiga karakter untuk melestarikan tokoh utama.

Kode sampel

Kode berikut menggambarkan proses ini.

Warning PENGGUNAAN KODE CONTOH YANG TERSEDIA DI DALAM ARTIKEL INI ADALAH PADA ANDA RISIKO SENDIRI. Microsoft menyediakan kode contoh ini "sebagaimana mestinya" tanpa jaminan apapun, baik tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan tersirat mengenai keadaan yang dapat diperjualbelikan dan/atau kebugaran untuk tujuan tertentu.
* Transmitter Code.

* INIT event of Comm OLE control
* 28800 baud, no parity, 8 data, and 1 stop bit.
* In RS-232, maximum speed of 28800 baud can be used

   This.Settings = "28800,N,8,1"
   This.InputLen = 1
   This.CommPort = 1
   This.PortOpen = .T.

* ONCOMM event of Comm OLE Control
* The following code is needed to make sure that next set of characters
* can be transmitted (CommEvent = 2 is triggered from the receiver side)

   IF This.CommEvent = 2
      This.input
       IF gnTop <= gnEnd
         gcString = FREAD(gnFileHandle, 1)  && Store to memory
         q=asc(gcstring)
         * change ASCII to character (size of 3) to preserve the lead char
    thisform.olecontrol1.output = str(q,3)
    gnTop = gnTop + 1
       ENDIF
   ENDIF

* INIT event of form

   PUBLIC gnFileHandle
   PUBLIC gnEnd
   PUBLIC gnTop
   PUBLIC q

   * You should replace 'c:\sample.hlp' with your own binary file
   STORE FOPEN('c:\sample.hlp') TO gnFileHandle    && Open the file
   STORE FSEEK(gnFileHandle, 0, 2) TO gnEnd  && Move pointer to EOF
   STORE FSEEK(gnFileHandle, 0) TO gnTop  && Move pointer to BOF
   gntop=1
   q=""

-----------------------

Property of OleControl1

RThreshold = 1     * triggers when at least one char is on the buffer
SThreshold = 3

-----------------------

* Receiver Code.

* INIT event of OleControl1
* 28800 baud, no parity, 8 data, and 1 stop bit.

   This.Settings = "28800,N,8,1"
   This.InputLen = 3
   This.CommPort = 1
   This.PortOpen = .T.

* OnComm event

   IF This.CommEvent = 2 AND This.InBufferCount > 0
      qq=CHR(VAL(This.Input))
      =FWRITE(gnFileHandle,qq)
      this.output = CHR(26)
   ENDIF

* INIT event of form

   PUBLIC gnFileHandle

   * You should replace 'c:\sample.hlp' with your own file name
   IF FILE('c:\sample.hlp')  && Does file exist?
      gnErrFile = FOPEN('c:\sample.hlp',12)  && If so, open read-write
   ELSE
      gnErrFile = FCREATE('c:\sample.hlp')  && If not, create it
   ENDIF

   = FCLOSE(gnErrFile)  && Close the file

   STORE FOPEN('c:\sample.hlp',1) TO gnFileHandle     && Open the file

* CLICK event of button

   *This tells the transmitting side to start sending the file
   Thisform.Olecontrol1.output = CHR(26)

-----------------------

Property of OleControl1

RThreshold = 3

-----------------------
				
Event-driven teknik menghasilkan acara OnComm ketika ada karakter yang menunggu di buffer masukan. Juga, properti CommEvent akan berisi 2 numerik. OnComm acara dipicu, Anda harus mengatur Rthreshold properti nilai lain dari nol (nilai). Yang paling umum pengaturan untuk properti RThreshold adalah 1, berarti bahwa OnComm acara yang dipicu jika minimal satu karakter menunggu pada input buffer. Pada artikel ini, 3 sedang digunakan sebagai nilai properti RThreshold karena 3 karakter pada satu waktu yang sedang dikirim.

Properti

ID Artikel: 154741 - Kajian Terakhir: 15 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
Kata kunci: 
kbmt KB154741 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:154741

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com