SwisTrack/SwisTrack 接口
SwisTrack 充当 TCP 服务器(默认端口:3000),因此可以轻松连接到其他程序以进一步处理结果。文本格式的 NMEA 0183 协议(可选校验和)用于对数据进行编码。
如果你在系统上安装了 netcat,请键入
nc HOSTNAME 3000
打开与 SwisTrack 的 TCP 连接。Netcat 将在你的终端上打印来自 SwisTrack 的消息,并将你键入的所有内容发送回 SwisTrack。(你也可以使用 telnet,尽管 telnet 不仅打开 TCP 连接。)
如果你使用的是最新版本的 bash,你也可以在 bash shell 上键入
cat < /dev/tcp/HOSTNAME/3000
读取来自 SwisTrack 的所有消息。请注意,这只会将来自 SwisTrack 的消息打印到你的终端,但不会发送你键入的内容。
要连接到 SwisTrack,请启动 HyperTerminal 并在“连接到”对话框中选择“TCP / IP Winsock”。将主机地址设置为“localhost”,或 SwisTrack 运行的计算机的主机名/IP 地址,并将端口号设置为 3000。当你单击“确定”时,HyperTerminal 将建立与 SwisTrack 的连接。(请注意,SwisTrack 目前不会显示连接是否打开。)
如果你从另一台计算机连接,你可能需要配置 SwisTrack 运行的计算机上的防火墙以允许端口 3000 上的传入连接。
如果你现在在 SwisTrack 中执行一个步骤,并且至少有一个输出组件(例如 Output Particles 组件)处于活动状态,你将在 HyperTerminal 窗口中看到几行出现。
SwisTrack 使用 NMEA 0183 消息与其他程序交换数据。(请注意,NMEA 0183 不仅是消息格式,但 SwisTrack 不使用协议的其他部分。)此类消息如下所示
$MESSAGE_TYPE,FIELD1,FIELD2,...FIELDn*XX
其中 XX 表示校验和,通过对 $ 和 * 之间的每个字节进行异或运算并以两位十六进制数形式写出结果来获得。SwisTrack 始终将校验和添加到传出消息,但不要求传入消息上的校验和。没有校验和或校验和正确的消息将被接受,而校验和不正确的消息将被丢弃。
所有消息都以 $ 符号开头,并以 <CR><LF>(字符 13 或 0xD,后跟字符 10 或 0xA)结束。数据字段以逗号分隔,小数用点表示。消息类型是不区分大小写且长度任意的字符串(与标准不同,标准将其限制为 5 个字符)。
在 SwisTrack SVN 树的 Examples/OutputProcessing 文件夹中提供了用于以各种编程语言解析 NMEA 消息的示例代码。
输出组件可以自由定义自己的消息类型。这些类型的文档可在相应的 输出组件描述 中获得。
此外,SwisTrack 还提供一些内置消息类型
- SUBSCRIBE
- 告诉 SwisTrack 仅发送特定类型的消息,而不是所有消息。例如,要仅接收 STEP_START 和 STEP_STOP 消息,请向 SwisTrack 发送以下消息
$SUBSCRIBE,STEP_START,STEP_STOP
- 要再次接收所有消息,请发送
$SUBSCRIBE
- STEP
- 执行一个步骤,就像你在工具栏中单击了 步骤 按钮一样。示例
$STEP
- RUN
- 设置运行模式。示例
$RUN,true or $RUN,false
- START
- 在测试或生产模式下启动管道。示例
$START or $START,production
- STOP
- 停止管道。示例
$STOP
- RELOADCONFIGURATION
- 重新加载配置。示例
$RELOADCONFIGURATION
- BROADCAST
- 将消息广播到所有 SwisTrack 客户端。第一个参数将成为广播消息的消息类型。如果你想插入来自另一个程序的信息(例如状态信息),这将很有用。例如,你的主要实验控制程序可能会使用以下内容广播实验的开始
$BROADCAST,EXPERIMENT_START,some_parameters
记录或处理来自 SwisTrack 的数据的最简单方法是将输出管道到 Perl 或 Python 脚本(或你喜欢的任何其他脚本语言)。如果你的 bash 版本支持 /dev/tcp,那么你可以编写
./my-filter-script.pl < /dev/tcp/HOSTNAME/3000
你也可以使用 netcat
nc HOSTNAME 3000 | ./my-filter-script.pl
有时,将所有数据同时写入日志文件非常有用。为此,你可以使用 tee
nc HOSTNAME 3000 | tee mylogfile.txt | ./my-filter-script.pl
如果你还需要向 SwisTrack 发送命令,那么你必须从你的脚本打开你自己的 TCP 连接。
示例脚本可在 SwisTrack SVN 树的 Examples/OutputProcessing 文件夹中找到。
在 Windows 上,你必须编写一个专用程序来打开与 SwisTrack 的 TCP 连接。解析 NMEA 消息的示例代码可在 SwisTrack SVN 树的 Examples/OutputProcessing 文件夹中找到。