PB串口編程資料

原文地址:PB串口編程資料幾則(轉)    原文作者:notbig

PB串口編程資料
----MSCOMM32參數基本介紹
MSComm 控件通過串行端口傳輸和接收數據,爲應用程序提供串行通訊功能。MSComm控件在串口編程時非常方便,程序員不必去花時間去了解較爲複雜的API函數,而且在VC、VB、Delphi等語言中均可使用。 Microsoft Communications Control(以下簡稱MSComm)是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件,它爲應用程序提供了通過串行接口收發數據的簡便方法。具體的來說,它提供了兩種處理通信問題的方法:一是事件驅動(Event-driven)方法,一是查詢法。
1.MSComm控件兩種處理通訊的方式
MSComm控件提供下列兩種處理通訊的方式:事件驅動方式和查詢方式。 
1.1 事件驅動方式
事件驅動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在串口接收緩衝區中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 線上一個字符到達或一個變化發生時。在這些情況下,可以利用 MSComm 控件的 OnComm 事件捕獲並處理這些通訊事件。OnComm 事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 CommEvent 屬性。在編程過程中,就可以在OnComm事件處理函數中加入自己的處理代碼。這種方法的優點是程序響應及時,可靠性高。每個MSComm 控件對應着一個串行端口。如果應用程序需要訪問多個串行端口,必須使用多個 MSComm 控件。
1.2 查詢方式
查詢方式實質上還是事件驅動,但在有些情況下,這種方式顯得更爲便捷。在程序的每個關鍵功能之後,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應用程序較小,並且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產生事件,因爲唯一等待接收的字符是調制解調器的“確定”響應。
2.MSComm 控件的常用屬性
MSComm 控件有很多重要的屬性,但首先必須熟悉幾個屬性。
CommPort 設置並返回通訊端口號。 
Settings 以字符串的形式設置並返回波特率、奇偶校驗、數據位、停止位。 
PortOpen 設置並返回通訊端口的狀態。也可以打開和關閉端口。 
Input 從接收緩衝區返回和刪除字符。 
Output 向傳輸緩衝區寫一個字符串。
下面分別描述:
CommPort屬性 設置並返回通訊端口號。
語法: object.CommPort[value ] (value 一整型值,說明端口號。) 
說明:在設計時,value 可以設置成從 1 到 16 的任何數(缺省值爲 1)。但是如果用 PortOpen 屬性打開一個並不存在的端口時,MSComm 控件會產生錯誤 68(設備無效)。
注意:必須在打開端口之前設置 CommPort 屬性。
RThreshold 屬性:在 MSComm 控件設置 CommEvent 屬性爲 comEvReceive 併產生 OnComm 之前,設置並返回的要接收的字符數。
語法 object.Rthreshold [ = value ](value 整型表達式,說明在產生 OnComm 事件之前要接收的字符數。 )
說明 當接收字符後,若 Rthreshold 屬性設置爲 0(缺省值)則不產生 OnComm 事件。例如,設置 Rthreshold 爲 1,接收緩衝區收到每一個字符都會使 MSComm 控件產生 OnComm 事件。
CTSHolding 屬性:確定是否可通過查詢 Clear To Send (CTS) 線的狀態發送數據。Clear To Send 是調制解調器發送到相聯計算機的信號,指示傳輸可以進行。該屬性在設計時無效,在運行時爲只讀。
語法: object.CTSHolding(Boolean)
Mscomm 控件的 CTSHolding 屬性設置值:
True      Clear To Send 線爲高電平。 
False     Clear To Send 線爲低電平。
說明:如果 Clear To Send 線爲低電平 (CTSHolding = False) 並且超時時,MSComm 控件設置 CommEvent 屬性爲 comEventCTSTO (Clear To Send Timeout) 併產生 OnComm 事件。
Clear To Send 線用於 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要確定 Clear To Send 線的狀態,CTSHolding 屬性給出一種手工查詢的方法。
詳細信息 有關握手協議,請參閱 Handshaking 屬性。
SThreshold 屬性: MSComm 控件設置 CommEvent 屬性爲 comEvSend 併產生 OnComm 事件之前,設置並返回傳輸緩衝區中允許的最小字符數。
語法 object.SThreshold [ = value ]
value 整形表達式,代表在 OnComm 事件產生之前在傳輸緩衝區中的最小字符數。
說明:若設置 Sthreshold 屬性爲 0(缺省值),數據傳輸事件不會產生 OnComm 事件。若設置 Sthreshold 屬性爲 1,當傳輸緩衝區完全空時,MSComm 控件產生 OnComm 事件。如果在傳輸緩衝區中的字符數小於 value,CommEvent 屬性設置爲 comEvSend,併產生 OnComm 事件。comEvSend 事件僅當字符數與 Sthreshold 交叉時被激活一次。例如,如果 Sthreshold 等於 5,僅當在輸出隊列中字符數從 5 降到 4 時,comEvSend 才發生。如果在輸出隊列中從沒有比 Sthreshold 多的字符,comEvSend 事件將絕不會發生。
Handshake 常數
常數          值          描述 
comNone       0           無握手。 
comXonXoff    1           XOn/Xoff 握手。 
comRTS        2           Request-to-send/clear-to-send 握手。 
comRTSXOnXOff 3           Request-to-send 和 clear-to-send 握手皆可。
OnComm 常數
常數          值       描述 
comEvSend     1        發送事件。 
comEvReceive 2        接收事件。 
comEvCTS      3        clear-to-send 線變化。 
comEvDSR      4        data-set ready 線變化。 
comEvCD       5        carrier detect 線變化。 
comEvRing     6        振鈴檢測。 
comEvEOF      7        文件結束。
Error 常數
常數             值        描述 
comEventBreak    1001   接收到中斷信號 
comEventCTSTO    1002   Clear-to-send 超時 
comEventDSRTO    1003   Data-set ready 超時 
comEventFrame    1004   幀錯誤 
comEventOverrun 1006   端口超速 
comEventCDTO     1007   Carrier detect 超時 
comEventRxOver   1008   接收緩衝區溢出 
comEventRxParity 1009   Parity 錯誤 
comEventTxFull   1010   傳輸緩衝區滿 
comEventDCB      1011   檢索端口 設備控制塊 (DCB) 時的意外錯誤
InputMode 常數
常數               值    描述 
comInputModeText   0    (缺省)通過 Input 屬性以文本方式取回數據。 
comInputModeBinary 1     通過 Input 屬性以二進制方式檢取回數據。
CDHolding 屬性:通過查詢 Carrier Detect (CD) 線的狀態確定當前是否有傳輸。Carrier Detect 是從調制解調器發送到相聯計算機的一個信號,指示調制解調器正在聯機。該屬性在設計時無效,在運行時爲只讀。
語法 object.CDHolding
設置值:CDHolding 屬性的設置值爲:
設置    描述 
True    Carrier Detect 線爲高電平 
False   Carrier Detect 線爲低電平 
說明:注意當 Carrier Detect 線爲高電平 (CDHolding = True) 且超時時,MSComm 控件設置CommEvent 屬性爲 comEventCDTO(Carrier Detect 超時錯誤),併產生 OnComm 事件。
注意: 在主機應用程序中捕獲一個丟失的傳輸是特別重要的,例如一個公告板,因爲呼叫者可以隨時掛起(放棄傳輸)。
Carrier Detect 也被稱爲 Receive Line Signal Detect (RLSD)。
數據類型 Boolean
DSRHolding 屬性:確定 Data Set Ready (DSR) 線的狀態。Data Set Ready 信號由調制解調器發送到相連計算機,指示作好操作準備。該屬性在設計時無效,在運行時爲只讀。
語法:object.DSRHolding
object 所在處表示對象表達式,其值是“應用於”列表中的對象。
DSRHolding 屬性返回以下值:
值     描述 
True   Data Set Ready 線高 
False Data Set Ready 線低 
說明:當 Data Set Ready 線爲高電平 (DSRHolding = True) 且超時時,MSComm 控件設置 CommEvent 屬性爲 comEventDSRTO(數據準備超時)併產生 OnComm 事件。當爲 Data Terminal Equipment (DTE) 機器寫 Data Set Ready/Data Terminal Ready 握手例程時該屬性是十分有用的。
數據類型:Boolean
Settings 屬性: 設置並返回波特率、奇偶校驗、數據位、停止位參數。
語法: object.Settings[ = value]
說明:當端口打開時,如果 value 非法,則 MSComm 控件產生錯誤 380(非法屬性值)。
Value 由四個設置值組成,有如下的格式:
"BBBB,P,D,S"
BBBB 爲波特率,P 爲奇偶校驗,D 爲數據位數,S 爲停止位數。
value 的缺省值是:"9600,N,8,1"
InputLen 屬性:設置並返回 Input 屬性從接收緩衝區讀取的字符數。
語法 object.InputLen [ = value]
InputLen 屬性語法包括下列部分:
value 整型表達式,說明 Input 屬性從接收緩衝區中讀取的字符數。 
說明:InputLen 屬性的缺省值是 0。設置 InputLen 爲 0 時,使用 Input 將使 MSComm 控件讀取接收緩衝區中全部的內容。
若接收緩衝區中 InputLen 字符無效,Input 屬性返回一個零長度字符串 ("")。在使用 Input 前,用戶可以選擇檢查 InBufferCount 屬性來確定緩衝區中是否已有需要數目的字符。該屬性在從輸出格式爲定長數據的機器讀取數據時非常有用。
EOFEnable 屬性:確定在輸入過程中 MSComm 控件是否尋找文件結尾 (EOF) 字符。如果找到 EOF 字符,將停止輸入並激活 OnComm 事件,此時 CommEvent 屬性設置爲 comEvEOF,
語法:object.EOFEnable [ = value ]
EOFEnable 屬性語法包括下列部分:
value 布爾表達式,確定當找到 EOF 字符時,OnComm 事件是否被激活,如“設置值”中所描述。 
value 的設置值:
True 當 EOF 字符找到時 OnComm 事件被激活。 
False (缺省)當 EOF 字符找到時 OnComm 事件不被激活。 
說明:當 EOFEnable 屬性設置爲 False,OnComm 控件將不在輸入流中尋找 EOF 字符。
錯誤消息(MS Comm 控件)
下表列出 MSComm 控件可以捕獲的錯誤:
值    描述 
380   無效屬性值 comInvalidPropertyValue
383   屬性爲只讀 comSetNotSupported
394   屬性爲只讀 comGetNotSupported 
8000 端口打開時操作不合法 comPortOpen
8001 超時值必須大於 0 
8002 無效端口號 comPortInvalid
8003 屬性只在運行時有效 
8004 屬性在運行時爲只讀 
8005 端口已經打開 comPortAlreadyOpen
8006 設備標識符無效或不支持該標識符 
8007 不支持設備的波特率 
8008 指定的字節大小無效 
8009 缺省參數錯誤 
8010 硬件不可用(被其它設備鎖定) 
8011 函數不能分配隊列 
8012 設備沒有打開 comNoOpen 
8013 設備已經打開 
8014 不能使用 comm 通知 
8015 不能設置 comm 狀態 comSetCommStateFailed
8016 不能設置 comm 事件屏蔽 
8018 僅當端口打開時操作纔有效 comPortNotOpen 
8019 設備忙 
8020 讀 comm 設備錯誤 comReadError
8021 爲該端口檢索設備控制塊時的內部錯誤 comDCBError

PowerBuilder中串行通信編程技術研究

 摘要:介紹了在PowerBuilder 中調用Win32 API函數、使用Mscomm32.ocx通信控件、利用VCL通信組件和調用DLL(動態鏈接庫)中的函數來實現串行通信的方法,分析總結了各種方法的優缺點。 

  關鍵詞:串行通信;事件驅動;應用程序接口;動態鏈接庫 

  0 引言 

  在自動控制中,用PC機對工程實現實時監控,通常要求PC機能在用戶界面上具有數據採集、數據處理以及控制信號的產生與傳輸等功能。在這種情況下,PC機要與過程控制的信號相聯繫,就要求能實現對PC機的串行端口直接操作。串行通信具有傳輸距離長、連接簡單、使用靈活方便、數據傳輸可靠性高等特點,在工業監控、數據採集和實時控制系統中得到了廣泛應用。 

  PowerBuilder(簡稱PB)是一種可視化的、面向對象的快速交互式應用開發工具。PB以其簡潔高效的集成開發環境、強大的數據窗口技術、便捷的報表生成及打印功能,越來越受到廣大開發人員的青睞。在各種開發軟件中,PB對於數據庫的上層編程支持是名列前茅的,但是,PB對計算機的底層支持略顯薄弱,沒有提供串行通信的命令、函數或控件,與其它設備之間進行數據通信較爲困難,筆者根據自己在PB編程中積累的經驗,介紹了幾種在PB中實現串行通信的方法。 

  1 串行數據通信 

  1.1 工作原理 

  Windows是一個事件驅動的與設備無關的多用戶操作系統,它禁止應用程序直接和硬件交互,程序員只能通過Windows提供的各類驅動程序來管理硬件。Windows系統函數包含了通信支持中斷功能,Windows系統爲每個通信設備開闢了用戶定義的輸入輸出緩衝區(即讀寫緩衝區),數據進出通信口均由系統後臺來完成。應用程序只需完成對輸入輸出緩衝區操作就可以了。實際過程是每接收一個數據就產生一個低級硬件中斷,Windows系統中的串行驅動程序就取得了控制權,並將接收到的數據放入輸入數據緩衝區,然後將控制權返還正在運行的應用程序。如果緩衝區數據已滿,串行驅動程序用當前定義的流控制機制通知發送方停止發送數據。隊列中的數據按“先進先出”的次序處理。 

  1.2 通信方式 

  串行通信的數據是一位接一位順序地傳送下去,通信方式有以下幾種: 

  (1)異步通信方式 

  異步通信方式中,數據是一幀一幀(包括一個字符或一字節數據)傳送的,每一串行幀的數據由起始位、數據位、奇偶校驗位和停止位組成。 

  (2)同步通信方式 

  同步通信方式中,數據開始傳送前用同步字符來指示(常約定1-2個),並由時鐘來實現發送端和接收端同步,即檢測到規定的同步字符後,就連續按順序傳送數據,直到通信告一段落。 

  (3)查詢方式 

  查詢方式是定時地查詢串口的接收緩衝區,如果接收緩衝區有數據,就讀取數據;若緩衝區中沒有數據,繼續執行,因此會佔用大量的CPU時間,它實際上是同步方式的一種派生。 

  (4)事件驅動方式 

  事件驅動方式通過設置事件通知,當所希望的事件發生時,Windows發出通知,這與DOS環境下的中斷方式很相似。 

  採用異步方式可以提高系統的整體性能,在對系統強壯性要求較高的場合,建議採用這種方式。查詢方式是一種最直接的讀串口方式,但定時查詢存在一個致命的弱點,即查詢是定時發生的,可能發生得過早或過晚。在數據變化較快的情況下,特別是主控計算機的串口通過擴展板擴展到多個時,需定時地對所有串口輪流查詢,此時容易發生數據的丟失。雖然定時間隔越小,數據的實時性越高,但系統的資源也被佔去越多。事件驅動方式是一種高效的串口讀方式,這種方式的實時性較高,特別是對於擴展了多個串口的情況,只有當設定的事件發生時,應用程序得到消息後,才進行相應的處理,避免了數據丟失。事件驅動方式能夠更好地處理串行端口通信交互,其優點是程序響應及時,可靠性高。在實時性要求較高的場合建議採用事件驅動方式。 

  1.3 實現步驟 

  利用PC機的串口實現串行通信的一般步驟如下: 

  (1) 打開並配置串口 

  在應用程序中要使用串口進行通信,必須在使用前向操作系統提出資源申請,要求打開串口,爲了保證串口通信數據傳輸的可靠性,串口打開時一般都設置爲非共享模式,串口一旦被打開,其他的應用程序將無法打開或使用它。 

  在使用串口進行數據通信前必須對其進行配置,串口配置主要包括波特率、數據位數、停止位數、奇偶校驗、發送緩衝區大小、接收緩衝區大小等。 

  (2) 數據讀寫和超時設置 

  串口打開並配置好後即可對其進行讀寫操作了,對串口的讀寫操作可採用查詢、同步、異步和事件驅動等方式。 

  在串口通信時如果數據傳輸突然中斷,對串口的讀寫操作可能會進入無限期的等待狀態,爲避免這種情況發生,必須設置串口讀寫操作的等待時間,等待時間超過後,串口的讀寫操作將被主動放棄,這樣即使數據傳輸突然中斷,程序也不會被掛起或阻塞。 

  (3) 關閉串口 

  在串口使用完後應將其關閉,否則如果沒有關閉串口,該串口將始終處於打開狀態,其他的應用程序就無法打開或使用它。 

  2 PowerBuilder編程中實現串行通信的方法 

  利用PowerBuilder實現串行通信常用的方法主要有四種:一是使用通信控件,如MSComm控件;二是調用Win32 API函數;三是利用串行通信組件;四是調用DLL(動態連接庫)實現串行通信編程,下面就四種方法分別加以討論。 

  2.1 使用MSComm通信控件實現串行通信編程 

  2.1.1 MSComm 控件 

  在PowerBuilder中可採用Mscomm32.ocx控件實現串行通信編程。串行通信控件Mscomm32.ocx(簡稱MSComm)是Microsoft公司提供的Windows下串行通信編程的32位ActiveX控件。該控件將串行通信的大部分操作都封裝到控件的內部,提供了一系列通信命令的接口屬性和事件,它允許建立串行口連接,可以連接到其他通信設備(如Modem)、還可以發送命令、進行數據交換以及監視和響應在通信過程中可能發生的各種錯誤和事件,從而可以用它創建全雙工的事件驅動的通信程序。 

  MSComm控件提供兩種處理通信的方式:事件驅動方式和查詢方式。查詢方式通過檢查CommEvent屬性值來確定通訊事件和錯誤。事件驅動方式在串口接收到或發送完指定數量的數據時或狀態發生改變時,MSComm通信控件捕獲到這些事件和錯誤,觸發OnComm事件,通過檢查MSComm控件的CommEvent屬性的值來獲得所發生的事件和錯誤代碼值,從而執行相應的處理。

2.1.2 MSComm 控件主要屬性和事件 

  CommPort:設置並返回通信端口號,選COM1時值爲1。 

  Setting:以字符串的形式設置並返回串口通信參數,格式爲“波特率、奇偶校驗、數據位、停止位”。 

  PortOpen:設置並返回通信端口的狀態,屬性爲True打開串口,爲False關閉串口並清除接收和傳輸緩衝區。 

  InputMode:設置從緩衝區讀取數據的格式,0文本形式,1二進制形式; 

  Input:從接收緩衝區讀取數據; 

  Output:向發送緩衝區寫入數據; 

  InBufferCount:設置接收緩衝區中的字節數; 

  OutBufferCount:設置發送緩衝區中的字節數; 

  InputLen :設置並返回Input屬性從接收緩衝區讀取的字節數; 

  Rthreshold :當CommEvent 屬性爲ComEvReceive併產生OnComm之前設置並返回要接收的字符數 

  CommEvent:返回最近的通信事件或錯誤; 

  OnComm事件:無論何時當 CommEvent 屬性的值變化時,就產生 TYPE="audio/mpeg"> 

powerbuilder串口編程的實現

因公司軟件產品需要和POS機進行通信,所以筆者研究了一下PB串口編程的實現方式。

PB是一個非常好的數據庫管理系統的開發工具,但在web和計算機接口通信等方面PB就不是很好用了。幸好我們有ole和com這些很牛的技術,可以讓我們非常容易的使用一些組件的功能,而不用自己去開發去關心底層的業務邏輯。使用PB進行串口編程有兩種途徑,一種是使用微軟提供的通信控件(MScomm控件),另一種是用Win32 API函數。下面主要講解使用MScomm控件實現串口編程的方法。

串行通信控件Mscomm32.ocx(簡稱MSComm)是 Microsoft公司提供的Windows下串行通信編程的32位ActiveX控件。該控件將串行通信的大部分操作都封裝到控件的內部,提供了一系列通信命令的接口屬性和事件,它允許建立串行口連接,可以連接到其他通信設備(如Modem)、還可以發送命令、進行數據交換以及監視和響應在通信過程中可能發生的各種錯誤和事件,從而可以用它創建全雙工的事件驅動的通信程序。MSComm控件提供兩種處理通信的方式:事件驅動方式和查詢方式。查詢方式通過檢查CommEvent屬性值來確定通訊事件和錯誤。事件驅動方式在串口接收到或發送完指定數量的數據時或狀態發生改變時,MSComm通信控件捕獲到這些事件和錯誤,觸發OnComm事件,通過檢查MSComm控件的 CommEvent屬性的值來獲得所發生的事件和錯誤代碼值,從而執行相應的處理。

1、Mscomm32.ocx的註冊

我們可以單獨製做一個註冊程序,並打包到您的應用程序中。如果需要安裝的目標計算機已經有“Mscomm”控件,則不需要進行任何工作。如果沒有“Mscomm”控件,則需要運行這個註冊程序。


程序的PB編碼如下:
RegistrySet(“HKEY_CLASSES_ROOT/Licenses/4250E830-6AC2-11cf-8ADB-00AA00C00905″,”",RegString!,”kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”) 
run(“regsvr32   mscomm32.ocx”) 
messagebox(‘提示’,'請重新啓動計算機’) 
這只是簡單的編碼,並且mscomm32.ocx文件在當前運行目錄,註冊成功即出現系統消息。爲了使界面更友好,您可以做一步修飾,例如“run(“regsvr32/s   mscomm32.ocx”)”,這樣就可以使屏幕上不出現系統消息了。
您還可以利用API函數,通過“ExitWindowsEx”函數(user32.dll)可以實現重新啓動Windows系統。
2、使用Mscomm32控件進行串口通信
Mscomm32控件的常用屬性如下:
CommPort:設置或返回串行端口號,缺省爲1 
Setting:設置或返回串行端的波特率、奇偶校驗位、 數據位數、停止位。缺省值爲“9600,N,8,1″。 
PortOpen:設置它爲True則打開端口,設置它爲False則關閉端口。 
InBufferSize:設置或返回接收緩衝區的大小,缺省爲1024 字 節。 
InBufferCount:返回接收緩衝區內的等代讀取的字節個數,設屬性爲0清除接收緩衝區。 
OutBufferSize:設置或返回發送緩衝區,缺省爲512字節。 
OutBufferCounter:返回發送緩衝區內等待發送的字符數,可用0來清空緩衝區。 
Output:向發送緩衝區傳送數據 
RThreshold: 該屬性確定當接收緩衝區內字節個數達或超過該值後就產生代碼爲ComEventReceive 
的OnComm事件,設置位0,則不產生OnComm事件。 
CommEvent:有通訊錯誤或事件發生時產生OnComm事件,CommEvent事件的值可以用來確定引 
發OnComm事件的具體的錯誤或事件常用的有以下幾種(更詳細的資料可參考MSComm控件幫助文件) 
ComEventbreak:接受到中斷信號 
ComEventFrame:硬件檢測到幀錯誤。 
ComEventRxOver:接收緩衝區溢出。 
ComEventTxFull:發送緩衝區溢出。 
ComEventReceive:接受到規定的字符數。 
InputLen:設置或返回接收緩衝區內用Input讀入的個數。若取0,則讀取整個緩衝區的內容。 
Input:返回並刪除接受緩衝區的數據。 

 

3、pb的實例代碼

我們可以根據我們程序的需要來設置上面的屬性。Mscomm控件提供下列兩種處理通訊的方式:事件驅動方式和查詢方式。由於筆者只需要和POS機進行簡單的通信,所以我使用比較簡單的查詢方式。對於查詢方式,我們只要使用PB操作Mscomm32的output和input兩個屬性就可以了。下面是示例代碼:

 

oleobject i_ole_comm  //聲明ole對象,用來連接Mscomm控件

i_ole_comm=create oleobject

vresult=i_ole_comm.connecttonewobject(‘mscommlib.mscomm’)

//下面初始化mscomm32的參數,並打開串口

if p_comport=1 then

i_ole_comm.CommPort = 1 //1代表com1口,2代表com2口

elseif p_comport=2 then

i_ole_comm.CommPort = 2

else

i_errcode=-1

i_errtext=’uo_rs232ld.f_setdevice:打開串口com’+string(p_comport)+’端口出錯,請確認此端口存在且沒有被其他程序使用’

return i_errcode

end if

i_ole_comm.Settings=”9600,n,8,1″    //波特率這裏設置成了9600,這個要與pos機設置的波特率一直

i_ole_comm.InputLen=0

i_ole_comm.InBufferSize=90

i_ole_comm.OutBufferSize=60

i_ole_comm.SThreshold=0

i_ole_comm.RThreshold=9

i_ole_comm.Handshaking=0

i_ole_comm.InBufferCount=0

i_ole_comm.DTREnable=true

if not i_ole_comm.PortOpen then

i_ole_comm.PortOpen=True

end if

//向串口發送報文

i_ole_comm.OutPut=“Hello world”

//接受串口報文,循環等待接收pos機上傳的報文,超時則返回

Do while true

Yield()

sleep(20)

vinput +=i_ole_comm.Input  //從Com端口取數據

if Pos(vinput,vend) > 0 then exit //如果存在消息結束符,則推出循環

loop

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章