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
|