怎樣用vb實現rs232介面通訊

時間 2021-09-06 02:07:32

1樓:匿名使用者

vb可以使用mscomm控制元件來實現串列埠通訊。

mscomm 控制元件通過串列埠傳輸和接收資料,為應用程式提供序列通訊功能。

mscomm 控制元件提供下列兩種處理通訊的方式:

事件驅動通訊是處理序列端**互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在 carrier detect (cd) 或

request to send (rts) 線上一個字元到達或一個變化發生時。在這些情況下,可以利用 mscomm 控制元件的 oncomm

事件捕獲並處理這些通訊事件。oncomm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 commevent

屬性。oncomm 事件

無論何時當 commevent 屬性的值變化時,就產生 oncomm 事件,標誌發生了一個通訊事件或一個錯誤。

oncomm 事件示例

下例說明如何處理通訊錯誤和事件。可以在相關的 case 語句之後插入**來處理特定的錯誤或事件。

private sub mscomm_oncomm()

select case mscomm1.commevent

' 錯誤

case comeventbreak   ' 收到 break。

case comeventcdto   ' cd (rlsd) 超時。

case comeventctsto   ' cts timeout。

case comeventdsrto   ' dsr timeout。

case comeventframe   ' framing error

case comeventoverrun   '資料丟失。

case comeventrxover '接收緩衝區溢位。

case comeventrxparity ' parity 錯誤。

case comeventtxfull   '傳輸緩衝區已滿。

case comeventdcb   '獲取 dcb] 時意外錯誤

' 事件

case comevcd   ' cd 線狀態變化。

case comevcts   ' cts 線狀態變化。

case comevdsr   ' dsr 線狀態變化。

case comevring   ' ring indicator 變化。

case comevreceive   ' 收到 rthreshold # of chars.

case comevsend   ' 傳輸緩衝區有 sthreshold 個字元

case comeveof   ' 輸入資料流中發現 eof 字元

end select

end sub

mscomm 控制元件有很多重要的屬性,但首先必須熟悉幾個屬性。

output 屬性,往傳輸緩衝區寫資料流。該屬性在設計時無效,在執行時為只讀。

說明output 屬性可以傳輸文字資料或二進位制資料。用 output 屬性傳輸文字資料,必須定義一個包含一個字串的

variant。傳送二進位制資料,必須傳遞一個包含位元組陣列的 variant 到

output 屬性。

正常情況下,如果傳送一個 ansi 字串到應用程式,可以以文字資料的形式傳送。如果傳送包含嵌入控制字元、null 字元等等的資料,要以二進位制形式傳送。

以下**是在開啟com口後,能以二進位制形式或字串傳送指令:

option explicit

dim sjbyt() as byte

private sub command1_click() '2進位制傳送

redim sjbyt(1 to 10) '設定為10個元素

sjbyt(1) = &h31

sjbyt(2) = &h32

sjbyt(3) = &h12

sjbyt(4) = &h31

sjbyt(5) = &h32

sjbyt(6) = &h33

sjbyt(7) = &h34

sjbyt(8) = &h35

sjbyt(9) = &h36

sjbyt(10) = &h37

mscomm1.output = sjbyt '此命令執行一次傳送10位元組

end sub

private sub command2_click()'文字字串傳送

dim sjstr as string

sjstr = "dim sjstr as string"

mscomm1.output = sjstr '此命令執行字串傳送

end sub

2樓:匿名使用者

其實很簡單,宣告一個變數陣列其型別為byte。然後將你要的資料逐一賦值到這個陣列,將mscomm控制元件序列模式屬性:inputmode 設為 二進位制模式,也就是值為1的那個,然後將這個變數陣列輸出到 output 就行了。

如:dim da(4) as byte

da(0)=&haa

da(1)=&haa

da(2)=&h04

da(3)=&h02

da(4)=.....

mscomm1.output=da()

*注意在vb中十六進位制要用 &h 開頭表示發接為二進位制傳送,自然接收也是一樣的,所以接收的也應該是一個byte型別的不定變數陣列,接收後可用 ubound 語句來獲取位元組數,接收的資料以 變數(下標) 形式取得,不能將陣列直接賦值於一個變數或控制元件的字元屬性中。如:

dim ad() as byte

dim ik as long

ad=mscomm.input

for ik=0 to ubound(ad)text1.text=text1.text & chr(ad(ik))

next

3樓:匿名使用者

用createfile等

4樓:串列埠通訊之家

微控制器+rs232通訊模組實現modbus rtu串列埠通訊

筆記本用rs232轉usb,開機不能自動識別此串列埠。需要重新拔插一下,才能識別。如果實現開機自動識別?謝謝

是軟體發現不了串列埠,還是在裝置管理器裡面看不到,如果裝置管理器看不到你可能是驅動問題 重灌驅動 微型usb高速光隔 rs 232 485 422 usb232gh3 高速光隔usb rs 232 485 422轉換器 ftdi驅動 世界上最小 usb232gh2 高速光隔usb rs 232 48...

如何利用裝置的rs232介面與三菱fx系列plc進行通訊

淋漓盡致的 通常情況下,三菱fx系列plc通過程式設計口 ps 2 與上位機軟體進行rs232模式通訊,此時plc中不需要做特殊配置,只需在webaccess中將plc對應的通訊引數匹配即可。個人計算機上的通訊介面之一,由電子工業協會 electronic industries associatio...

怎樣用MATLAB實現序列的相加

墨汁諾 對應項相加就是 a 1 2 3 4 b 1 1 1 1 c a b 但是兩個序列長度必須相同,若長度不同,先補零在相加。 matlab中兩個序列相加,是將大小相同的兩個序列對應位置上的元素相加,直接用 就可。例子 x1 rand 1,10 產生兩個隨機數列y1 rand 1,10 a x1 ...