跳轉到內容

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 作為內部調變解調器。如果在啟動之前連線裝置,則諸如 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) =&gt; 1000<br>
&nbsp;&nbsp;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

華夏公益教科書