|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
doraalan
註冊時間: 2009-09-14 文章: 3
第 1 樓
|
發表於: 星期一 九月 14, 2009 11:37 am 文章主題: 讀取RS232, mscomm32.portopen 的問題 |
|
|
我需要從RS232讀取電子天秤的數據, 經在論壇搜尋後, 大致可以做到
但經常會發生一個問題, 就是打開 form 時經常會說發生錯誤說 port 本身已經 open, 然後便讀取不到數據
form 的 Init
if thisform.mscomm1.portopen=.t.
thisform.mscomm1.portOpen=.f.
endif
thisform.MSComm1.CommPort = 1
thisform.MSComm1.Settings = ”2400,E,7,1”
thisform.MSComm1.InputLen = 0
thisform.mscomm1.PortOpen = .t. <----- 經常在這發生錯誤
試過把這句再加一個檢查
if thisform.mscomm1.portopen=.f.
thisform.mscomm1.portopen=.t.
endif
但結果一樣
希望能有大大幫忙解決這問題, 萬二分感激 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 2 樓
|
發表於: 星期一 九月 14, 2009 4:14 pm 文章主題: |
|
|
如果你每次在第一次執行時都正確,
但以後就會發生錯誤,
是否因為是你沒有正常結束你的程式(在測試程式階段),
而造成同一個port已經被前一個程式開啟了,
你現在要再執行的程式就不能再做portopen一次.
因為這個portopen一開始都是.f., 它是不能知道誰曾經開過同一個commport的.
所以你須quit VFP再進來一次才行. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
doraalan
註冊時間: 2009-09-14 文章: 3
第 3 樓
|
發表於: 星期二 九月 15, 2009 12:19 pm 文章主題: |
|
|
garfield 寫到: | 如果你每次在第一次執行時都正確,
但以後就會發生錯誤,
是否因為是你沒有正常結束你的程式(在測試程式階段),
而造成同一個port已經被前一個程式開啟了,
你現在要再執行的程式就不能再做portopen一次.
因為這個portopen一開始都是.f., 它是不能知道誰曾經開過同一個commport的.
所以你須quit VFP再進來一次才行. |
但我不是在一開始已先把 port 關閉了嗎?
而且我在執行 portopen 前亦先作出檢查, 在 portopen=.f. 時才執行
所以我才不了解為何還會有錯誤
祈為指正! |
|
回頂端 |
|
|
andywilliams
註冊時間: 2004-10-23 文章: 111
第 4 樓
|
發表於: 星期二 九月 15, 2009 1:16 pm 文章主題: |
|
|
COM1 被其它程式使用中 |
|
回頂端 |
|
|
doraalan
註冊時間: 2009-09-14 文章: 3
第 5 樓
|
發表於: 星期二 九月 15, 2009 4:39 pm 文章主題: |
|
|
andywilliams 寫到: | COM1 被其它程式使用中 |
已確定沒有其他程式使用 COM PORT |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 6 樓
|
發表於: 星期二 九月 15, 2009 6:08 pm 文章主題: |
|
|
請仔細推敲我說的.
是否在結束form時忘了做 .PortOpen = .F. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
spfrk
註冊時間: 2004-11-08 文章: 161
第 7 樓
|
發表於: 星期二 九月 15, 2009 10:30 pm 文章主題: RS232 COM PORT |
|
|
試試我寫的 WP.DLL 這是我好幾年前幫熒埔科技寫的RS232函數庫,當然裡面有
一堆 發票機,收據機,客顯器的函數,也有 RS232 COM PORT 的控制函數,使用這些函數就沒有問題了,請放心沒有版權的問題. |
|
回頂端 |
|
|
guku1101
註冊時間: 2006-07-03 文章: 84 來自: 高雄
第 8 樓
|
發表於: 星期三 十二月 23, 2009 8:27 am 文章主題: |
|
|
spfrk 前輩我用您所是供的wp.dll 去檢查印表機,但還是偵測不到印表機的狀態,以下是我照範例寫的請前輩指導一下我哪裡出錯了
declare integer WPOpenPort in C:\windows\wp.dll integer, string
declare integer WPSendPort in C:\windows\wp.dll integer, string, integer
declare integer WPSendByte in wp.dll integer, short
declare integer WPReadPort in C:\windows\wp.dll integer, string @, integer
declare integer WPClosePort in C:\windows\wp.dll integer
vok = wpopenport(10,"") && 10 Lpt1
if vok < 1
messagebox("Can't open com port")
return 0
endif
vwrtlen = wpsendport(10,chr(27)+"VB"+chr(13),4)
if vwrtlen <> 4
messagebox("Bad Send"+str(vwrtlen,3))
return 0
endif
vok = wpcloseport(10) _________________ BB |
|
回頂端 |
|
|
spfrk
註冊時間: 2004-11-08 文章: 161
第 9 樓
|
發表於: 星期三 十二月 23, 2009 11:03 pm 文章主題: |
|
|
LPT PORT 是無法被檢知是否OK,只要開啟成功,作業系統就永遠回答OK,因為
pirnt spool 是自動處理,AP 只管送資料到 spool, 因此永遠是OK的,除非使用
RS232 全部由自己控制印表機,自己抓字型,自己送圖形,那就很累,除非您的 C++
學得不錯, 而且電腦母語是 C++ |
|
回頂端 |
|
|
Taikey
註冊時間: 2004-09-20 文章: 5
第 10 樓
|
發表於: 星期五 三月 15, 2013 4:44 pm 文章主題: |
|
|
declare integer WPReadPort in C:\windows\wp.dll integer, string @, integer
declare integer WPReadByte in C:\windows\wp.dll integer
WPReadByte 功能正常
但
WPReadPort string @
ReadPort 資料 string @
要如何宣告才能讀String
可以給範例 ?
感謝 |
|
回頂端 |
|
|
spfrk
註冊時間: 2004-11-08 文章: 161
第 11 樓
|
發表於: 星期五 三月 15, 2013 11:21 pm 文章主題: |
|
|
Int WPReadPort(Int_port, *Chr_str, Int_len)
由通訊埠接收任意字元 (chr(0)∼chr(255)
Int_port 整數值 先前已開啟之通訊埠號。
Chr_str 字串 要接收的字串空間,必須傳址
Int_len 整數值 要接收字串的長度,此長度不可大於接收空間的長度,
否則將危害到系統,切記 !
回應整數 接收的長度,如為 0 表示失敗 |
|
回頂端 |
|
|
Taikey
註冊時間: 2004-09-20 文章: 5
第 12 樓
|
發表於: 星期六 三月 16, 2013 9:11 am 文章主題: |
|
|
Int WPReadPort(Int_port, *Chr_str, Int_len)
請問
在 visual foxpro *chr_str, 變數及位置如何宣告, 可以給範例
感謝 |
|
回頂端 |
|
|
spfrk
註冊時間: 2004-11-08 文章: 161
第 13 樓
|
發表於: 星期六 三月 16, 2013 10:41 am 文章主題: |
|
|
*///
*/ 通訊接收
*/ vCom 通訊埠 vchr 跳離字串符號 vtime 等待秒數
*///
func ComPotRcv
para vCom, vchr, vtime, vChkLen
local vstr, vPort, vCntNow, vsec, vok, vspace, vkey
if vCom < 1
retu ''
endif
vstr = ''
vCntNow = 0
if type("vchr") <> 'C'
vchr = ''
endif
if type("vtime") <> 'N'
vtime = 0.2
endif
if type("vChkLen") <> 'N'
vChkLen = 0
endif
vsec = second()
ComPotEsc = .N.
vspace = space(512)
do while .Y.
if IsEscPrs()
ComPotEsc = .Y.
exit
endif
vok = WPReadPort(vCom, @vspace, 256)
if vok = 0
if int(second()) = 0 && 防止午夜歸零
vsec = second()
endif
if abs(second() - vsec) > vtime
exit
else
loop
endif
else
vstr = vstr + substr(vspace,1,vok)
vspace = space(512)
endif
if vChkLen = 0
if len(vchr) > 0
if vchr $ vstr
exit
endif
else
if len(vstr) > 0
exit
endif
endif
else
if len(vstr) >= vChkLen
exit
endif
endif
enddo
retu vstr |
|
回頂端 |
|
|
Taikey
註冊時間: 2004-09-20 文章: 5
第 14 樓
|
發表於: 星期一 三月 18, 2013 10:00 am 文章主題: |
|
|
沒用過 $
請問何用意
if vchr $ vstr |
|
回頂端 |
|
|
elleryq
註冊時間: 2007-06-21 文章: 768
第 15 樓
|
發表於: 星期一 三月 18, 2013 10:35 am 文章主題: |
|
|
沒記錯的話,是檢查 vstr 裡是否有 vchr 的字串
例如:
vchr="23"
vstr="123456"
那麼 vchr $ vstr 會是 True |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|