OPEN "C",portID,baud ¬ [,[parity][,[stopbit][,[wordLength][,buffer]]]]
2001年3月2日(版本5)
此語句開啟一個序列通訊埠(調變解調器埠或印表機埠),以便您的程式可以寫入或讀取序列裝置。各種引數的最佳值取決於裝置和所需的通訊協議;有關更多資訊,請參見裝置的手冊。引數的解釋如下 ¥ portID 將其設定為 _modemPort 或 _printerPort 或設定為任何指定的埠,最大值 -8。(埠從印表機埠的 -1 到 -8 編號。)_modemPort 值通常也適用於與內建調變解調器通訊。某些 Macintosh 計算機提供不同的值。Powerbook 通常將 _modemPort 用作紅外埠,並將 _printerPort 用作內部調變解調器。如果在啟動之前連線裝置,USB 介面卡(如 Keyspan 介面卡)將提供不同的值,而不是在計算機執行後插入裝置。 ¥ 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 有幾個保留的全域性變數。(請參見標題資料夾中的 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"> 示例:CTB 演示
CLOSE; HANDSHAKE; LOC; LOF; INPUT#; READ#; READ FILE; READ FIELD; INKEY$; PRINT#; WRITE#; WRITE FILE; WRITE FIELD
|