  | 
				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 文章: 2160
 
  第 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 文章: 2160
 
  第 6 樓
  | 
		
			
				 發表於: 星期二 九月 15, 2009 6:08 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				請仔細推敲我說的.
 
是否在結束form時忘了做 .PortOpen = .F. _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		spfrk
 
 
  註冊時間: 2004-11-08 文章: 163
 
  第 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 文章: 163
 
  第 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 文章: 163
 
  第 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 文章: 163
 
  第 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 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |