OPEN "C",portID,baud ¬ [,[parity][,[stopbit][,[wordLength][,buffer]]]]
2001 年 3 月 2 日(版本 5)
此語句開啟一個序列通訊埠(調變解調器埠或印表機埠),以便您的程式可以寫入或讀取序列裝置。各種引數的最佳值取決於裝置和所需的通訊協議;有關更多資訊,請參閱裝置手冊。引數解釋如下 ¥ portID 將其設定為 _modemPort 或 _printerPort 或設定為任何指定的埠,最大值為 -8。(埠從印表機埠的 -1 到 -8 編號。)_modemPort 值通常也適用於與內建調變解調器通訊。某些 Macintosh 計算機提供不同的值。Powerbook 通常使用 _modemPort 作為紅外埠,並使用 _printerPort 作為內部調變解調器。如果在啟動之前連線裝置,則諸如 Keyspan 介面卡之類的 USB 介面卡將提供不同的值,而與在計算機執行後插入裝置相比。 ¥ baud 將其設定為以下值之一:110;300;1200;1800;2400;3600;4800;7200;9600;19200;38400;57600, 115200, 230400。 ¥ parity 將其設定為以下值之一:_noParity;_oddParity;_evenParity。預設值為 _noParity。 ¥ stopbit 將其設定為以下值之一:_oneStopBit;_twoStopBits;_halfStopBit(1.5 個停止位)。預設值為 _oneStopBit。 ¥ wordLength 將其設定為以下值之一:_fiveBits;_sixBits;_sevenBits;_eightBits。預設值為 _sevenBits。注意:不要將此引數設定為值 5、6、7 或 8:這些值與符號常量的值不同。 ¥ buffer 將其設定為 1 到 32,768 之間的數字。此引數指示為輸入緩衝區分配多少位元組。輸入緩衝區儲存正在接收的資料,即使程式未讀取它也是如此,這使得程式可以在後臺接收資料的同時處理資料。buffer 的預設值為 4096 位元組。要確定緩衝區中當前未讀字元的數量,請使用 LOF(portID,1)。 讀取資料 要從開啟的序列埠讀取傳入資料,請使用與讀取檔案資料時相同的命令;例如,INPUT#、READ# 等。由於很難預測資料何時(如果曾經)到達,因此最好設計您的程式,使其不會在單個語句上“卡住”以等待傳入資料。相反,您應該執行一個迴圈,該迴圈定期檢查是否有資料可讀。這將使您的程式能夠在等待時進行其他活動;或者如果等待時間過長則停止等待。 基本上有三種方法可以檢查緩衝區中是否有可用資料
- 您可以檢查
LOF(portID,1) 的值。如果沒有任何資料可讀,它將返回零;否則,它將返回等待讀取的位元組數。 - 您可以使用
READ# portID,stringVar$;0 語句。透過指定“;0”,您指示 READ# 語句如果沒有任何資料可用,則立即返回;如果存在資料,則該語句將讀取輸入緩衝區中當前的所有字元(直到 stringVar$ 的最大允許長度),並將它們放入 stringVar$ 中。您可以在 READ# 語句之後使用 LEN(stringVar$) 來確定讀取了多少(如果有)個字元。 - 您可以使用
INKEY$(portID) 函式。它將從緩衝區返回一個字元,或者如果緩衝區為空,則返回一個空字串。
寫入資料 要將資料寫入開啟的序列埠,請使用與寫入檔案資料時相同的命令;例如,PRINT#、WRITE# 等。 FB 執行時全域性變數 FB 有幾個保留的全域性變數。(請參閱 Header 資料夾中的 Subs Files.Incl) gFBHasComTB%<spacer type="horizontal" size="105">//如果使用通訊工具箱,則為 true... gFBSerialPortCount%<spacer type="horizontal" size="36">//通訊埠數量 gFBSerialName$(n)<spacer type="horizontal" size="55">//通訊埠名稱 gFBSerialInName$(n)<spacer type="horizontal" size="36">//輸入緩衝區名稱 gFBSerialOutName$(n)<spacer type="horizontal" size="28">//輸出緩衝區名稱 gOSXSerialInited<spacer type="horizontal" size="66">//[!]0 如果通訊在 OS X 下初始化
在任何通訊埠開啟後或您自己呼叫執行時 FN FBInitSerialPorts 之後,您可以參考 gFBSerialPortCount% 來檢視裝置的總數(最大 8 個)。gFBSerialOutName$(n) 包含裝置的名稱。考慮到這一點,在存在多個埠或使用 USB 裝置模擬序列埠時,最好按名稱而不是按數字引用序列埠。 要搜尋所有可用的通訊埠,請使用以下幾行程式碼。如果在程式啟動後插入 USB/序列埠介面卡,這尤其重要。
gFBSerialportCount% = 0<br>
//<spacer type="horizontal" size="58">This is for OS X<br>
<b>LONG IF</b> SYSTEM(_sysVers) => 1000<br>
gOSXSerialInited = _false<br>
<b>END IF</b>
示例: <img src="res/cd.gif" alt="" width="20" height="19" border="0"> CD 示例:CTB 演示
CLOSE; HANDSHAKE; LOC; LOF; INPUT#; READ#; READ FILE; READ FIELD; INKEY$; PRINT#; WRITE#; WRITE FILE; WRITE FIELD
|