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
|