EPICS IOC 使用 SNCSEQ

IOC 配置SNCSEQ: 1 2 3 4 5 6 # example/configure/RELEASE.local EPICS_BASE = /path/to/your/build/of/epics-base SUPPORT = ${EPICS_BASE}/../epics-modules PVXS = ${SUPPORT}/pvxs # 添加 SNCSEQ SNCSEQ = ${SUPPORT}/sequencer example工程中相关的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 # example/iocExampleApp/src/Makefile ... # Link in the code from our support library iocExample_LIBS += iocExampleSupport # To build SNL programs, SNCSEQ must be defined # in the <top>/configure/RELEASE file ifneq ($(SNCSEQ),) # Build sncExample into iocExampleSupport sncExample_SNCFLAGS += +r iocExample_DBD += sncExample.dbd # A .stt sequence program is *not* pre-processed: iocExampleSupport_SRCS += sncExample.stt iocExampleSupport_LIBS += seq pv iocExample_LIBS += seq pv # Build sncProgram as a standalone program PROD_HOST += sncProgram sncProgram_SNCFLAGS += +m # A .st sequence program *is* pre-processed: sncProgram_SRCS += sncProgram.st sncProgram_LIBS += seq pv sncProgram_LIBS += $(EPICS_BASE_HOST_LIBS) endif ... 1 2 3 4 5 6 7 # sncExample.dbd # The name below is derived from the name of the SNL program # inside the source file, not from its filename. Here the # program is called sncExample, but is compiled in both the # sncExample.stt and sncProgram.st source files. registrar(sncExampleRegistrar) 1 2 3 # sncProgram.st #include "../sncExample.stt" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # sncExample.stt program sncExample double v; assign v to "{user}:aiExample"; monitor v; ss ss1 { state init { when (delay(10)) { printf("sncExample: Startup delay over\n"); } state low } state low { when (v > 5.0) { printf("sncExample: Changing to high\n"); } state high } state high { when (v <= 5.0) { printf("sncExample: Changing to low\n"); } state low } } 修改启动脚本,在IOC启动时运行SNL程序: ...

一月 13, 2025 · 2 分钟 · 316 字

ecmc构建指南

软件包 epics-base/epics-base: The C/C++ core of the EPICS Base control system toolkit epics-modules/ecmc: EPICS Support for EtherCAT Motion Controller (ECMC) and Generic IO Controller paulscherrerinstitute/exprtk-ecmc: ESS Customized exprtk : C++ Mathematical Expression Parsing And Evaluation Library paulscherrerinstitute/ecmccfg: Module to handle configuration scripts for EtherCATMotion Controller (ECMC) epics-modules/asyn: EPICS module for driver and device support EuropeanSpallationSource/motor: APS BCDA synApps module: motor pantor/ruckig: Motion Generation for Robots and Machines. EtherLab / EtherCAT Master · GitLab 构建顺序 epics-base asyn motor etherlab ruckig ecmc epics-base 正常交叉编译。 ...

十一月 26, 2024 · 7 分钟 · 1384 字

Hugo Diagrams

Hugo原生支持GoAT,可以直接使用goat代码块。 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · a b a b a b a b & A M S i o i q f b B x u j o e a ( - x d r a > e f R > c o C n u o b ( n r ) ) d n e e J d r o s i n N o R D t o i u a a n g d d l o i t n e D i a g o n a l s C V u e r r v t e i d c a l n o t A N C : o u l d r r i A a / I v n s i n e e h s t d - e - t r l B i h i i s i o n ' s r e q n . u * o o b t t o e l a s d ' * l i n e D o n S e e ? a r c 3 h 本博客还支持Mermaid.js作图。 ...

一月 30, 2024 · 2 分钟 · 393 字

交叉编译 ACAI

关于 ACAI ACAI 是一个C++封装的Channel Access协议应用开发接口(API),提供异步通道访问接口。 ACAI Channel Access Interface EPICS Qt依赖ACAI提供的Channel Access接口。 前置步骤 这篇笔记是交叉编译EPICS和IOC内容的补充。 在进行下面步骤前,请完成配置交叉编译环境和编译 EPICS Base。 这里依旧以龙芯架构为例。 EPICS base 编译完成后,可以看到bin目录下有linux-loong64、linux-x86_64两个目录,linux-x86_64目录下比linux-loong64目录多出了许多perl脚本,我们需要把这些脚本复制到龙架构的目录下,下面编译需要用到。 1 $ cp ./bin/linux-x86_64/*.pl ./bin/linux-loong64/ 编译 在EPICS-Qt安装中已经介绍过编译ACAI。这次是使用交叉编译方式,步骤略有不同。 1 2 3 4 5 6 7 8 9 10 11 12 13 cd ~/loongson/ git clone https://github.com/andrewstarritt/acai.git cd acai vi configure/RELEASE.local # 修改交叉编译的目标架构,和EPICS base中保持一致 # EPICS_HOST_ARCH=linux-loong64 # 修改EPICS_BASE路径,例: EPICS_BASE=/home/ubuntu/loongson/base-7.0.8 # make LD=loongarch64-linux-gnu-ld CC=loongarch64-linux-gnu-gcc CCC=loongarch64-linux-gnu-g++ make # 等待编译完成 编译完成后可以在lib/linux-loong64/目录下找到libacai.so。 ...

十二月 26, 2023 · 1 分钟 · 67 字

Windows上使用MinGW编译安装EPICS

需要使用的软件 Strawberry Perl for Windows EPICS Base 编译Base需要有gcc、g++、make、perl这些工具,但其实我们只需要安装Strawberry Perl就可以了,安装完成后就有了MinGW的编译环境,足够编译安装EPICS了。 这里使用MinGW环境编译EPICS,不使用MSVC编译器。 安装 Strawberry Perl 这里选择 Strawberry Perl 5.38.2.1。 直接安装即可,需要注意的是,安装路径不能有空格和中文,最好放在盘符的根目录下。 例:D:\Strawberry 安装完成后检查系统环境变量,查看系统Path环境变量是否有Strawberry Perl的路径。没有则手动添加,以安装在D盘为例。 1 2 3 D:\Strawberry\c\bin D:\Strawberry\perl\site\bin D:\Strawberry\perl\bin 其中D:\Strawberry\c\bin就是MinGW环境的路径。 查看Perl版本,检查一下是不是装好了。 1 2 3 4 5 6 7 8 9 10 11 12 > perl -v This is perl 5, version 38, subversion 2 (v5.38.2) built for MSWin32-x64-multi-thread Copyright 1987-2023, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at https://www.perl.org/, the Perl Home Page. 注意:perl 5.32.1.1 之后的版本可能会提示 ...

十一月 29, 2023 · 2 分钟 · 304 字

weston桌面系统截屏方法

使用weston-screenshooter 但必须启用weston桌面--debug选项,否则会出现以下错误: 1 2 3 [root@RK356X:/]# weston-screenshooter [02:41:05.145] libwayland: error in client communication (pid 776) weston_screenshooter@5: error 0: screenshooter failed: permission denied. Debug protocol must be enabled 以RK3568开发板,buildroot系统为例,修改/etc/init.d/S50launcher,找到weston所在行,添加--debug选项。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...... # Uncomment to disable mirror mode # unset WESTON_DRM_MIRROR export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/var/run} export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland} weston --tty=2 --debug --idle-time=0& { # Wait for weston ready while [ ! -e ${XDG_RUNTIME_DIR}/wayland-0 ]; do sleep .1 done /usr/bin/QLauncher & }& ...... forlinx开发板使用的yocto系统也类似,修改/lib/systemd/system/weston.service,在weston后添加--debug选项。 ...

二月 3, 2023 · 1 分钟 · 100 字

Calculate Spacing Between Slices

计算切片间距的方法: 对于CT扫描出的断层图像,没有存储Spacing Between Slices信息,但可以利用位置信息计算得到。 需要先读取相邻两层切片的位置信息,假设为pos1和pos2,然后计算两个位置的距离即为切片间距。 ...

四月 30, 2021 · 1 分钟 · 142 字

Running Dcm4chee Arc Light on Docker

首先需要安装Docker 安装完成后,拉取以下3个仓库 1 2 3 $ docker pull dcm4che/slapd-dcm4chee:2.4.56-23.1 $ docker pull dcm4che/postgres-dcm4chee:13.1-23 $ docker pull dcm4che/dcm4chee-arc-psql:5.23.1 拉取完成后,就可以启动服务了,这里有两种方式,一种是使用Docker命令行依次启动上面3个服务,不过比较麻烦,也容易出错,另一种是直接使用Docker Copmose,相对来说要简单很多。这里就直接使用 Docker Compose的方式。 ...

二月 3, 2021 · 1 分钟 · 380 字

GDI+绘制旋转的椭圆

GDI+绘制椭圆时只支持输入一个矩形范围,无法绘制倾斜的椭圆。 绘制椭圆的 API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 // 摘要: 绘制边界 System.Drawing.RectangleF 定义的椭圆。 // 参数: // pen: System.Drawing.Pen,它确定曲线的颜色、宽度和样式。 // rect: System.Drawing.RectangleF 结构,它定义椭圆的边界。 // 异常: // T:System.ArgumentNullException: pen 为 null。 public void DrawEllipse(Pen pen, RectangleF rect); // // 摘要: 绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。 // 参数: // pen: System.Drawing.Pen,它确定曲线的颜色、宽度和样式。 // x: 定义椭圆的边框的左上角的 X 坐标。 // y: 定义椭圆的边框的左上角的 Y 坐标。 // width: 定义椭圆的边框的宽度。 // height: 定义椭圆的边框的高度。 // 异常: // T:System.ArgumentNullException: pen 为 null。 public void DrawEllipse(Pen pen, float x, float y, float width, float height); // // 摘要: 绘制边界 System.Drawing.Rectangle 结构指定的椭圆。 // 参数: // pen: System.Drawing.Pen,它确定曲线的颜色、宽度和样式。 // rect: System.Drawing.Rectangle 结构,它定义椭圆的边界。 // 异常: // T:System.ArgumentNullException: pen 为 null。 public void DrawEllipse(Pen pen, Rectangle rect); // // 摘要: 绘制一个由边框定义的椭圆,该边框由矩形的左上角坐标、高度和宽度指定。 // 参数: // pen: System.Drawing.Pen,它确定曲线的颜色、宽度和样式。 // x: 定义椭圆的边框的左上角的 X 坐标。 // y: 定义椭圆的边框的左上角的 Y 坐标。 // width: 定义椭圆的边框的宽度。 // height: 定义椭圆的边框的高度。 // 异常: // T:System.ArgumentNullException: pen 为 null。 public void DrawEllipse(Pen pen, int x, int y, int width, int height); 可以看到,绘制椭圆的API,都只支持输入一个矩形区域,长和宽都只能是水平或者竖直的,因此,绘制出椭圆的长轴和短轴也是水平或竖直的,而无法绘制一个旋转过的椭圆,如下图: ...

一月 21, 2021 · 3 分钟 · 1429 字

Private Dicom Element

规则 私有 Tag (gggg, xxxx) Group number (gggg) 必须为奇数 (odd),并且 (0001, xxxx),(0003, xxxx),(0005, xxxx),(0007, xxxx),(FFFF, xxxx) 不允许使用。 ...

一月 21, 2021 · 1 分钟 · 298 字