VB如何連續讀取串列埠資料,vb怎樣讀取串列埠資料並進行處理?

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

1樓:匿名使用者

vb6.0mscomm控制元件可以利用oncomm事件連續獲取來自外設傳送的訊號。

基於:1)mscomm控制元件的rthreshold 屬性不為0和恰當的接收**。

2)使用電腦主機板物理com口或pci多串列埠卡上的com口com,這樣的com口是全雙工的,傳送與接收不會衝突。

3)高質量的接收**和符合通訊協議和資料幀規約的接收處理**。

例項**:

private sub form_load()

mscomm1.inputmode = cominputmodebinary      '採用二進位制傳輸

mscomm1.inbuffercount = 0   '清空接受緩衝區

mscomm1.outbuffercount = 0  '清空傳輸緩衝區

mscomm1.rthreshold = 1      '產生mscomm事件

mscomm1.inbuffersize = 1024

txtsend = ""

txtsend = ""

txtreceive = ""

text2 = ""

end sub

private sub mscomm1_oncomm() '接收資料

dim strbuff as string

select case mscomm1.commevent

case 2

mscomm1.inputlen = 0

strbuff = mscomm1.input

bytreceived() = strbuff

jieshou

leninput = len(strdata)

text2 = leninput \ 2

'資料處理**

end select

end sub

public function jieshou() '接收資料處理為16進位制

dim i as integer

for i = 0 to ubound(bytreceived)

if len(hex(bytreceived(i))) = 1 then

strdata = strdata & "0" & hex(bytreceived(i))

else

strdata = strdata & hex(bytreceived(i))

end if

next

txtreceive = strdata

end function

2樓:萍水e相逢

設定 mscomm1.rthreshold 為10在 oncomm 事件中 處理!

當 rthreshold 為10 時 就接收詳細 請看 msdn 吧

3樓:匿名使用者

通訊突然停住的有幾個原因:

1 串列埠設定了接收長度產生中斷,但長時間內接收緩衝區沒達到產生中斷的資料;

2 文字框字串的總長度超過了64k,文字框不再更新;

3 串列埠引數配置不正確。

試試我下面的程式看還會不會停住吧,我的程式是不間斷接收資料的,不會有停住的可能。

private sub command1_click()

timer1.enabled = true

command1.backcolor = vbgreen

end sub

private sub command2_click()

text1.text = ""

end sub

private sub form_load()

'通訊口初始化:

with mscomm1

.settings = "9600,n,8,2"

.commport = 3

.inputmode = cominputmodebinary

.inbuffercount = 0

.outbuffercount = 0

.rthreshold = 0

.sthreshold = 0

.portopen = true

end with

text1.text = ""

end sub

private sub text1_change()

if len(text1.text) > 10000 then text1.text = ""

end sub

private sub timer1_timer()

'採用輪循法採集資料

dim inx() as byte

dim strtemp as string

dim strtemp1 as string

dim receivedlen as integer

timer1.enabled = false '關閉定時器

if mscomm1.inbuffercount > 0 then

receivedlen = mscomm1.inbuffercount

inx = mscomm1.input

for i = 0 to ubound(inx)

strtemp1 = hex(inx(i))

if len(strtemp1) > 1 then

strtemp = strtemp & strtemp1 & " "

else

strtemp = strtemp & "0" & strtemp1 & " "

end if

next i

text1.text = text1.text & format(second(now), "00") & right(format(str(timer), "0.

00"), 3) & " " & strtemp & vbcrlf

text1.selstart = len(text1.text)

end if

timer1.enabled = true '開啟定時器

label1.caption = now()

end sub

vb怎樣讀取串列埠資料並進行處理?

4樓:萍水e相逢

你這個 不難 吧

2方約定好

傳送 4次,前2次是整數部分,後2次是小數部分那麼以後 不管傳送什麼資料 都 沒有問題了,如 3145 個數 就是 31.45

串列埠通訊的 重點 就是 傳送方 和 接收方 要 協商好資料如何傳送,如何接收、識別 等等

vb 裡字元處理等函式很多

關鍵是 靈活應用

祝你順利

5樓:匿名使用者

vb6.0可使用mscomm控制元件實現串列埠通訊。按通訊協議和資料幀規約接收和處理資料。

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

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

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

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

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

屬性。在程式的每個關鍵功能之後,可以通過檢查 commevent 屬性的值來查詢事件和錯誤。如果應用程式較小,並且是自保持的,這種方法可能是更可取的。

例如,如果寫一個簡單的**撥號程式,則沒有必要對每接收一個字元都產生事件,因為唯一等待接收的字元是調變解調器的“確定”響應。

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

6樓:匿名使用者

建議傳送1583,然後上位機除以100

用vb中的mscomm編個程式讀取串列埠資料

7樓:匿名使用者

option explicit'強制變數宣告

private sub command1_click() '傳送

dim number as integer'定義整型

dim outbyte(0) as byte '定義位元組陣列

number = val(text1.text)'轉為數值型

outbyte(0) = cbyte(number) '轉化為位元組型

mscomm1.outbuffercount = 0 '清空傳送緩衝區

mscomm1.output = outbyte '傳送

end sub'結束

private sub command2_click()'按鈕單擊事件

mscomm1.portopen = false'關閉串列埠

unload form1'解除安裝form1

end sub

private sub form_load()'窗體載入事件

mscomm1.commport = 1 '設定串列埠為com1

mscomm1.settings = "9600,n,8,1" '通訊引數 波特率 奇偶校驗 資料位 停止位

mscomm1.inputmode = cominputmodebinary '二進位制接收

mscomm1.portopen = true '開啟串列埠

mscomm1.inbuffercount = 0 '清空接收緩衝區

mscomm1.rthreshold = 1 '緩衝區中接收到一個字元,就產生一次oncomm事件

end sub

private sub mscomm1_oncomm() '有資料傳送時觸發

dim indata as variant'定義變數

dim arr(0) as byte'定義位元組陣列

select case mscomm1.commevent ''commevent屬性:返回最近的通訊事件或錯誤。

通過對它具體屬性值的查詢,我們就可以獲得通訊事件和通 訊錯誤的完整資訊。當其值是comevreceive時表示接收到資料。

case comevreceive '有接收事件

indata = mscomm1.input '接收到的資料存放到indata裡

arr(0) = ascb(indata) '返回indata的值

text2.text = arr(0)'在text2中顯示資料

mscomm1.inbuffercount = 0' 清空接收緩衝區

end select

end sub

在窗體中新增

text1顯示傳送資料,

text2顯示接收資料,

command1傳送按鈕,

mscomm1通訊控制元件,

該看懂了吧,再看不懂我沒辦法了,

vb怎樣讀取串列埠資料並進行處理,VB如何連續讀取串列埠資料

萍水e相逢 你這個 不難 吧 2方約定好 傳送 4次,前2次是整數部分,後2次是小數部分那麼以後 不管傳送什麼資料 都 沒有問題了,如 3145 個數 就是 31.45 串列埠通訊的 重點 就是 傳送方 和 接收方 要 協商好資料如何傳送,如何接收 識別 等等 vb 裡字元處理等函式很多 關鍵是 靈...

VB讀取資料庫多條資料賦值給陣列

dim pubconn as new adodb.connection dim strconn as string with pubconn if state adstateclosed then strconn provider sqloledb user id sa password sa da...

如何通過串列埠讀取plc的資料,怎麼用matlab讀取串列埠資料?

c 語言也帶有串列埠通訊控制項的。只要把微軟的串列埠通訊控制項新增進去,就可以簡單的程式設計了。 你在做資料接收的時候input返回是根據你需要的資料型別自動轉換的,如果你要位元組陣列那麼返回位元組陣列,你要long返回long,但要注意的是,返回位元組陣列的時候你不能把位元組陣列定義成固定大小的陣...