跳轉到內容

Futurebasic/語言/參考/open

來自華夏公益教科書,自由的教科書
(+) 外觀 (+) 標準 (+) 控制檯

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) =&gt; 1000<br>
&nbsp;&nbsp;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

華夏公益教科書