VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

讀取RS232, mscomm32.portopen 的問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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
回頂端
檢視會員個人資料 發送私人訊息 雅虎訊息通 MSN Messenger
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
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作