跳转到内容

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

华夏公益教科书