1樓:萍水e相逢
你這個 不難 吧
2方約定好
傳送 4次,前2次是整數部分,後2次是小數部分那麼以後 不管傳送什麼資料 都 沒有問題了,如 3145 個數 就是 31.45
串列埠通訊的 重點 就是 傳送方 和 接收方 要 協商好資料如何傳送,如何接收、識別 等等
vb 裡字元處理等函式很多
關鍵是 靈活應用
祝你順利
2樓:匿名使用者
vb6.0可使用mscomm控制項實現串列埠通訊。按通訊協議和資料幀規約接收和處理資料。
mscomm 控制項通過串列埠傳輸和接收資料,為應用程式提供序列通訊功能。
mscomm 控制項提供下列兩種處理通訊的方式:
事件驅動通訊是處理序列端**互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在 carrier detect (cd) 或
request to send (rts) 線上乙個字元到達或乙個變化發生時。在這些情況下,可以利用 mscomm 控制項的 oncomm
事件捕獲並處理這些通訊事件。oncomm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 commevent
屬性。在程式的每個關鍵功能之後,可以通過檢查 commevent 屬性的值來查詢事件和錯誤。如果應用程式較小,並且是自保持的,這種方法可能是更可取的。
例如,如果寫乙個簡單的**撥號程式,則沒有必要對每接收乙個字元都產生事件,因為唯一等待接收的字元是數據機的「確定」響應。
儘管 mscomm 控制項有很多重要的屬性,但首先必須熟悉幾個屬性。
3樓:匿名使用者
建議傳送1583,然後上位機除以100
vb如何連續讀取串列埠資料
4樓:匿名使用者
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
5樓:萍水e相逢
設定 mscomm1.rthreshold 為10在 oncomm 事件中 處理!
當 rthreshold 為10 時 就接收詳細 請看 msdn 吧
6樓:匿名使用者
通訊突然停住的有幾個原因:
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
怎麼用matlab讀取串列埠資料?
7樓:碧血玉葉花
s=serial('com1');//設定串列埠
set(s,'baudrate',9600,'stopbits',1,'parity','none','databits',8,'inputbuffersize',255);
//串列埠的一些設定,注意,'none'有引號,有些值如inputbuffersize只能在串列埠關閉時才能設定,
//所以不建議先開啟串列埠
fopen(s)//開啟串列埠
fwrite(s,100);//打100(十進位制)寫入串列埠也可以是一維陣列,可以用示波器測com的第3個引腳
a=fread(s);
//讀出串列埠資料,由於matlab是順序執行的,所以這裡讀不到100,
//程式會卡在這裡直到讀到資料為止,好像是存完buffer吧,這裡忘了。
//自己從com的第2個引腳給資料試試看就清楚了
fclose(s);//關閉串列埠
VB如何連續讀取串列埠資料,vb怎樣讀取串列埠資料並進行處理?
vb6.0mscomm控制元件可以利用oncomm事件連續獲取來自外設傳送的訊號。基於 1 mscomm控制元件的rthreshold 屬性不為0和恰當的接收 2 使用電腦主機板物理com口或pci多串列埠卡上的com口com,這樣的com口是全雙工的,傳送與接收不會衝突。3 高質量的接收 和符合通...
如何通過串列埠讀取plc的資料,怎麼用matlab讀取串列埠資料?
c 語言也帶有串列埠通訊控制項的。只要把微軟的串列埠通訊控制項新增進去,就可以簡單的程式設計了。 你在做資料接收的時候input返回是根據你需要的資料型別自動轉換的,如果你要位元組陣列那麼返回位元組陣列,你要long返回long,但要注意的是,返回位元組陣列的時候你不能把位元組陣列定義成固定大小的陣...
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...