ACQ4xx User Guide

引入

参考文档“4GUG”,全称为“D-TACQ 4G User Guide”

D-TACQ 4G 是一系列智能载体和模块化数据采集卡,它们共同配置成一个网络化的数据采集设备。

一般来说,“ACQ400 系统”由一个CARRIER和一个或多个MODULES组成。我们通常用“ACQ400”作为这种系统的简称。

术语

  • Modules:具有特定模拟功能的模拟输入模块。物理上,这些是“夹层模块”(mezzanine modules)。

  • Site:Modules在Carrier上安插的地方,一个Carrier有几个Sites就可以插几个Modules。类比于总线系统的模块插入槽位(slots);

  • Carrier:带有嵌入式计算机的母板,有一个或多个Sites,能够支持一个或多个Modules的负载。

  • UUT:是unit under test的缩写,意思是被测试模块

开机手册

打开电源

串口连接

系统Console访问通过一个微型 USB 端口提供。该 USB 端口在主机操作系统中表现为一个Console端口。使用终端仿真器连接到控制台端口,波特率为 115200,8 位数据位,无奇偶校验。

root 密码会随您的货物提供在一张打印的纸张上。

串口连接后需要登录,账号为root

网口连接

在启动时,ACQ4xx 的默认行为是使用 DHCP 通过 ETH0 请求一个 IP 地址。这对于大型安装来说是合适的,因为它允许集中控制;对于小型安装,也可以在网络中有 DHCP 服务器的路由器上启动。如果您这样做,请确保路由器具有千兆以太网端口!

MAC 地址打印在设备的外壳上。

如果您的配置中没有 DHCP,那么需要设置一个静态 IP 地址。

可以从 root 控制台按照以下方式指定一个静态 IP 地址:

set.static_ip PORT IP-ADDRESS

其中:

  • PORT:0|1
  • IP-ADDRESS:点分十进制表示法

例如:

acq1001_004> set.static_ip 0 192.168.1.4

这条命令会将设置写入文件 /mnt/local/network。该设置在断电后仍然有效。更复杂的网络场景可以通过直接编辑此文件来进行配置。

用网线连接网口后,可以使用ssh连接,目前在局域网中的ip地址为192.168.0.166

网页访问

当系统上电并联网后,可以在网页浏览器中指向该设备,此时嵌入式网页将会显示出来。网页服务器使用标准端口(端口 80)。

ssh连接

ACQ4xx 作为 SSH 服务器,可以使用 SSH 登录并运行命令。

配置备份

每个设备都提供了一个保存在 /mnt/local 的自定义配置。我们建议在首次接收设备时备份该配置,并在进行任何配置更改后再次备份。一个合适的备份命令如下:

cd BACKUPS
mkdir acq2106_123
scp -r root@acq2106_123:/mnt/local acq2106_123

D-TACQ 在发货时会对设备进行备份,因此如果您丢失了备份,请联系我们。这项指示主要是为了避免您丢失所做的任何自定义配置。/mnt/local 在固件更新时不会受到影响。

这样可以确保您的自定义配置得到妥善保存,即使在未来需要恢复时也能轻松找回。

GUI显示

ACQ4xx 包含了一个嵌入式的 EPICS IOC(Input Output Controller)。即使您目前没有计划使用 EPICS,结合 CSS GUI,它提供了一种非常方便的方式来控制和使用数据,至少在初始评估阶段推荐使用。

以下是设置步骤:

在主机端上(不是在zynq linux上)安装CSS

  1. 安装 CSS 4.5.9: Windows下载安装 Control System Studio(CSS)版本 4.5.9。
  2. 下载 D-TACQ CSS 支持: 下载 D-TACQ CSS 支持包 ACQ400CSS。 这是一个 GitHub 页面,建议直接git clone到一个目录下即可,然后再新建一个文件夹名为CSSWS(CSS Workspace),在CSSWS下创建文件夹acq2206_054,这个文件夹代表着我们的uut
  3. 运行 CSS 并导入项目: 启动 CSS,并从 ZIP 文件中导入项目。具体步骤参考acq1001_acq430_quickstart.pdf
  4. 重要提示: 始终从 Launcher 运行所有内容!还有CSS是通过Host Name来找到我们的uut的,所以必须要将参考文档将Host Name设置为主板上的Host Name,我们这台uut的Host Name为acq2206_054,将Max Array Size设置为500000(不然将看不到接收的图像)
  5. 编辑模式下打开 OPI: 在编辑模式下,选择 acq420_launcher.opi,右键点击,选择“Open with OPI Runtime”。

css_page

css_ca

Control System Studio

Control System Studio 是一套工具和应用程序的集合,用于监控和操作大规模控制系统,例如加速器社区中的控制系统。

Phoebus 是一个基于纯 Java/JavaFX 的实现,利用 Java 的 SPI 和模块特性提供了同样可扩展和模块化的架构。这是当前 CS-Studio 的实现。最初的 CS-Studio 实现是基于 Eclipse RCP 框架,该框架提供了可扩展和可插拔的架构。

Phoebus 和 CS-Studio 产品是由许多实验室和大学之间的合作开发和维护的。

下载页面:https://github.com/ControlSystemStudio/phoebus/releases/

工作空间(Workspace)的概念

  • 定义:工作空间持有所有临时数据。
  • 推荐做法:建议为每个 UUT(Unit Under Test)设置一个单独的工作空间。工作空间将在会话之间存储您的配置(如 UUT、图形布局等)。

项目(Project)的概念

  • 定义:项目是“代码”。ACQ400CSS 是您的项目。工作空间引用该项目。
  • 推荐做法:一个项目可以被多个工作空间以只读方式重用。不要将项目放在工作空间文件树下的位置!

推荐的文件布局

为了更好地组织和管理您的文件和项目,以下是一个推荐的文件布局示例:

  • 存储 cs-studio: 将 cs-studio 存储在 ./cs-studio 目录中。
  • 存储 OPI 项目: 将 OPI 项目存储在 ./PROJECTS/ACQ400CSS 目录中。 克隆 ACQ400CSS 仓库到 PROJECTS 目录下。
mkdir PROJECTS; cd PROJECTS; git clone https://github.com/D-TACQ/ACQ400CSS.git
  • 创建工作空间: 为每个 UUT 创建一个工作空间。例如,对于 ACQ1001_123:
mkdir CSSWS
cd CSSWS
mkdir ACQ1001_123
  • 添加项目到工作空间: 将目录 PROJECTS/ACQ400CSS/ACQ400 作为项目 ACQ400 添加到工作空间。
  • 设置工作空间偏好: 打开 Eclipse,进入 Edit | Preferences。

远程控制参考

ACQ4xx 设备分为多个sites {1, 2, ..., 6},每个site具有特定module的功能,以及site 0,即主板。每个site提供了一组“knobs”或控制项,这些控制项具有简单的键值设置。“knobs”设计为易于脚本化,并且可以从 ACQ4xx 本地以及通过专用的套接字连接远程访问。

Host API

HAPI Github

HAPI DOC

HAPI 使用标准的 DNS 进行名称解析。理想情况下,您的 UUT(Unit Under Test)应该有一个与主机名匹配的 DNS 名称。

如果没有 DNS 服务器,HAPI 也可以直接使用 IP 地址工作,但这不是最佳实践。最好是设置一个“本地 DNS”,这可以通过在系统的 hosts 文件中设置名称映射来实现。

  • Linux : /etc/hosts/
  • Windows : C:\Windows\System32\Drivers\etc\hosts

在文件末尾添加以下内容:

# D-TACQ 名称映射
192.168.0.001 acq2106_001
192.168.0.002 acq2106_002
192.168.0.003 acq2106_003

这样访问acq2106_001就是访问192.168.0.001

HAPI工作原理

acq400 类通过建立到 UUT(Unit Under Test)不同端口的套接字连接,使得每个“knob”都可以作为连接对象的属性可用,从而可以使用类似于 Bash 脚本的简单语法进行操作。

示例端口

  • 每个站点的端口:4220 + site编号
  • 状态监控线程端口:2235
  • 流数据端口:4210
  • Post-shot 数据端口:53000 + 通道编号

HAPI - 使用Netcat命令

什么是Netcat

nc(Netcat)是Linux上的一个强大的网络工具,用于读写网络连接。它可以执行多种网络相关的任务,可以用于创建 TCP 或 UDP 连接,并且可以在网络上发送和接收数据。由于其简单性和灵活性,nc 经常被用于网络调试和测试。

使用Netcat

Linux下一般自带nc

Windows下载这个:https://eternallybored.org/misc/netcat/,解压后将nc路径添加到环境变量中

使用nc建立一个socket连接:

nc 192.168.0.165 4221

其中192.168.0.165为acq400网口的ip地址,4221为acq400中site1对应的端口号

输入命令后,在输入

prompt on

会出现prompt

acq400.1 0 >

然后就可以对PVs进行读写了,具体输入help查询

HAPI - 使用Pyhton脚本

首先在某个目录下

git clone https://github.com/D-TACQ/acq400_hapi

然后新建一个环境变量,名为PYTHONPATH,值为acq400_hapi目录的地址

如果不添加环境变量的话,Windows的CMD下输入

set PYTHONPATH=E:\acq400_hapi

E:\acq400_hapi替换为你的acq400_hapi目录的地址,不过这样就只对当前控制台窗口有效了

添加Python路径的目的是编写Python脚本时import xxx可以找得到文件

然后就可以编写Python脚本了,这是一个例程

# example.py
from acq400_hapi import *
uut1=acq400.Acq400("192.168.0.165")

print(uut1.get_sys_info())

for ii in range(0,10):
	c1 = uut1.s1.SIG_SAMPLE_COUNT_COUNT.split(" ")[1]
	print("%s" % (c1))

后面发现再user_apps文件夹下有大量提供好的例程,直接用python运行即可,注意输入正确的参数

采集准备

定义采集条件

这一节描述了如何定义数据采集系统中的时钟和触发条件。虽然系统提供了合理的默认设置,但用户也可以根据需要进行自定义配置。以下是具体的命令和解释:

时钟和触发定义

设置时钟和触发器: set.site 1 clk=CLK:设置站点1的时钟源为CLK。

set.site 1 trg=TRG:设置站点1的触发源为TRG。

这些命令用于配置特定站点的时钟和触发器,默认情况下,系统已经提供了合理的设置,因此通常不需要进行更改。

定义AGGREGATOR SET

run0 命令用于配置参与数据采集的模块集合。这个命令允许用户指定哪些模块将参与数据采集过程

假设我们想要配置位于站点 1、2、3 和 4 的模块参与数据采集,可以使用以下命令:

run0 1,2,3,4

连续采集模式

端口 4210:Aggregator 流式数据端口

为了启动数据流,需要连接到端口 4210 并读取数据。在最简单的场景下,可以使用 streamtonowhere 命令来测试数据流

(通过ssh或串口连接 控制台中)

这条命令使用 pv 工具显示数据传输的速率,并将数据流丢弃

nc localhost 4210 | pv > /dev/null

通过以太网进行网络流式数据采集

通过以太网将数据流式传输到另一台主机。这种方法的有效数据传输速率最高可达 30 MB/s

(在一台主机上,将UUT替换为acq400的IP地址)

nc UUT 4210 | pv > mybigdatafile

这条命令等同于在cs_studio中Capture页面的Stream中点击Start

要满速率的流式传输,建议使用光纤传输

减少数据输入速率的策略

流式数据流可以类比为一个水箱在填充的同时进行排水。

当平均输入数据速率超过平均流式数据传输速率(AD采样速率大于网速)时,需要采取一些策略来减少数据传输速率

某些硬件模型(如 ACQ425 和 ACQ435)提供了硬件手段来减少通道数量,从而降低数据速率。硬件通道屏蔽是以banks的形式进行的,而不是针对单个通道。

另外,可以通过软件控制减少输出速率,方法是丢弃较高的通道计数(channels count)

举例

输入数据速率:8 个通道,每个通道 2.5 MSPS,每个样本 2 字节,输入速率为40 MB/s

内存缓冲区大小:512 MB

输出数据速率:32 MB/s

平均填充速率:8 MB/s = 40-32

缓冲区溢出时间:512 ÷ 8 = 64 秒

而标准瞬态采集情况下,输入数据速率为 40 MB/s,内存缓冲区大小为 512 MB。缓冲区填满时间为 12 秒

因此,与标准瞬态采集相比,流式数据采集的缓冲区溢出时间更长(64 秒 vs 12 秒),这是一个较好的结果

包含时间信息的数据流

当系统进行数据流传输时,通常会包含时间信息,以确保数据的准确性和可追溯性。时间信息的嵌入可以采用多种格式,具体取决于数据的位宽和传输需求。

时间信息的格式

假设系统需要包含时间信息,可以考虑以下几种格式:

  • 嵌入帧格式(Embedded Frame Format): 对于32位数据,可以使用嵌入帧格式,因为32位数据本身有足够的空间来容纳额外的时间戳信息。 例如,每个数据帧中包含一部分时间戳信息,确保数据和时间信息同步传输。
  • 独立时间戳文件(Separate Timestamp File): 对于16位数据,直接在数据中嵌入时间信息会增加数据量,不利于优化数据传输速率。 可以采用独立的时间戳文件,将时间信息与数据分开存储和传输。这种方法减少了数据流中的额外开销,同时保留了时间信息。

sob-sig

在ACQ400数据采集系统中,内存缓冲区被划分为较大的块,例如1MB或4MB(如ACQ480使用4MB块)。为了确保数据的连续性和完整性,系统在每个缓冲区块的开始位置插入一个“Start of Buffer Signature”(sob-sig),这是一种特殊的数据模式,用于标记缓冲区的起始位置,并显示缓冲区索引。

Burst Mode(重复门控模式,Repeating Gate Mode,RGM)

重复门控模式(RGM)是一种数据采集模式,其中数据采集是无限期进行的,但通过硬件门控信号(GATE信号)将其分割成多个短时间段的“爆发”(bursts)。这种模式经常与流式数据采集相结合,以适应需要在高数据速率下进行周期性数据采集的应用场景。

RGM 的工作原理

在 RGM 模式下,数据采集系统将持续不断地进行数据采集,但在每个周期内,采集会被硬件门控信号(GATE信号)打断,形成一个个独立的“爆发”。每个爆发期间,系统将高速采集数据,而在爆发之间,系统可以进行数据处理或其他操作。

瞬态数据采集模式(Transient Data Capture)

瞬态数据采集是一种基于SHOT的数据采集模式。在这种模式下,系统分配固定的内存(例如512MB)用于存储单次采集的数据。数据采集在触发信号到来时开始,并在采集预定数量的样本后结束。采集完成后,数据可以被上传或进一步处理。

瞬态数据采集完成后,数据可以通过以下方式进行访问和处理:

  • 直接访问原始数据:最快的方式,但对应用程序而言较为复杂。
  • 原地解复用(De-Mux):将数据解复用后,以虚拟文件的形式呈现。
/dev/acq400/data/$site/??

访问这些文件的最简单方法是安装"channel server"

make-ch-server

在运行“run0”之后执行此操作。现在,每个通道的数据在套接字53000+CC上显示为每个通道。

配置瞬态数据采集(Transient Capture)

瞬态数据采集是一种基于触发条件的数据采集模式,它在触发信号到来时开始采集,并在采集预定数量的样本后结束。以下是配置瞬态数据采集的具体步骤和命令。

配置步骤 设置瞬态采集参数: transient [PRE=N] [POST=N] [OSAM=1] [SOFT_TRIGGER=1] [DEMUX=1]

  • PRE=N:预触发(pre-trigger)采集长度(样本数)。
  • POST=N:后触发(post-trigger)采集长度(样本数)。
  • OSAM=1:开启重叠采样模式(Overlap Sample Mode)。
  • SOFT_TRIGGER=1:启用自动软触发。
  • DEMUX=1:启用解复用。

举例

transient PRE=1000 POST=2000 OSAM=1 SOFT_TRIGGER=1 DEMUX=1
set.site 1 trg=1,1,1
set.site 1 event0=1,0,1
set_arm

注意,CSS OPI提供的远程GUI与上面命令有相同的功能,点击Capture按钮进入页面,选择Transient一栏,点击"Default PRE/POST"按钮,确保下面TRG和EVENT0都设置为d1(软触发模式,如果是d0就改成d1),然后点击setMode,ARM,然后状态运行到"PRE_RUN"时,点击"PULSE_SOFT_TRIGGER"产生触发,之后状态继续变化,完成一次采集回到IDLE。

之后查看Post Shot可以看到刚才采集到的数据

post1

post2

另外可以使用HAPI同样完成相同功能的一次采集,经测试,HAPI在Windows下使用有问题,建议在Linux环境下使用

假设在Ubuntu环境下git clone了hapi_400,然后在hapi_400目录下执行这条命令,也能成功远程控制完成一次瞬态采集,并传回数据到Host并绘图

python3 ./user_apps/acq400/acq400_fullshot.py --post=100k --capture=1 --trace_upload=1 --plot_data=2 --channels=30,31 --trg=1,1,1 192.168.0.166

post3

post4

瞬态数据上传方法

在瞬态数据采集完成后,有多种方法可以访问和上传采集到的数据。以下是几种常见的数据上传方法及其优缺点

  1. 从端口加载
  2. 使用 scp(安全复制)
  3. 使用 curl 客户端
  4. 保存到 NFS 挂载点
  5. 保存到 CIFS 文件共享
  6. 直接上传到 MDSplus
  7. 保存到本地 USB 磁盘

RAW 数据与 COOKED 数据的区别及配置

在数据采集系统中,RAW 数据和 COOKED 数据分别指代了不同格式的数据组织方式。RAW 数据是从 FPGA 直接传输到本地 DRAM 或远程通信端口的多路复用数据,而 COOKED 数据则是经过解复用的数据,按通道顺序排列。

RAW 数据

RAW 数据是多路复用(multiplexed)的数据格式,格式为 [SAMPLE][CH],即数据按样本顺序排列,每个样本包含了所有通道的数据。RAW 数据的特点如下:

避免延迟:在采集结束后,避免了 ARM 处理器进行解复用处理所带来的延迟。 更快的数据卸载:所有通道的数据通过一个端口(例如端口 53000)进行流式传输,减少了开销并提高了 TCP/IP 效率。

注意:使用HUDP发送的数据都是RAW形式的

COOKED 数据

COOKED 数据是经过解复用的数据格式,格式为 [CH][SAMPLE],即数据按通道顺序排列,每个通道的数据连续存放。COOKED 数据的特点如下:

便于查看:大多数用户希望查看按时间序列排列的每个通道的数据。 适用于本地 DRAM:对于可以放入本地 DRAM 的瞬态数据,推荐使用 COOKED 数据格式。 配置方法 根据需求选择 RAW 数据或 COOKED 数据,可以通过修改配置文件来实现。

配置示例

要指定 COOKED 数据,可以在 /mnt/local/sysconfig/transient.init 文件中设置 COOKED=1

要指定 RAW 数据,可以在 /mnt/local/sysconfig/transient.init 文件中设置 COOKED=0

附录:关于EPICS和CSS

D-TACQ ACQ400 系列智能控制器集成了实验物理与工业控制系统的 EPICS IOC(输入输出控制器),用于管理运行时逻辑并展示数据值。此外,提供了 CSS(Control System Studio)屏幕以便能够远程监控和管理系统。

EPICS(Experimental Physics and Industrial Control System)是一种工业级控制系统,在许多大型科学装置如加速器、光源以及国际热核聚变实验堆(ITER)等设施中有广泛的应用。系统的核心是一个或多个运行在嵌入式计算机上的 IOC。每个 IOC 都包含一个由过程变量(PVs)组成的数据库。PVs 可以通过通道访问(Channel Access,简称 CA)被网络中的客户端看到。每一个 PV 代表了由 IOC 控制的系统中的一个控制点。PVs 可以是标量,例如“启动|停止”控制旋钮或温度读数,也可以是波形向量,例如 CH01 电压。

IOC 数据库可能包含了用于生成和展示 PVs 的逻辑,比如将原始模拟信号转换为电压值。IOC 可以通过网络上的通道访问客户端进行控制和监控。存在简单的客户端,也有像 Control System Studio(CSS)这样的图形化客户端,它能够创建功能丰富的跨平台操作员界面(OPI)。

关键概念总结

  • EPICS IOC: 控制系统的核心组件,负责处理输入输出,并且包含了一个过程变量的数据库。
  • 过程变量(PVs): 代表系统中的控制点,可以是标量或波形向量。
  • 通道访问(CA): 一种通信协议,允许网络上的客户端访问 IOC 中的过程变量。
  • Control System Studio (CSS): 图形化的客户端软件,用来创建复杂的操作员界面,支持跨平台使用。
  • Operator Interfaces (OPI): 通过 CSS 创建的用户界面,使操作员能够与系统交互。

本文章使用limfx的vscode插件快速发布