基于EPICS modbus模块的单通道电压监测项目

2024-01-01 05:52

本文主要是介绍基于EPICS modbus模块的单通道电压监测项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先介绍在本项目中使用到的硬件:

1)开发板:为香橙派Zero2,安装系统如下:

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy

2) USB转485模块:微雪工业级USB转RS485串口转换器

 3)485单通道电压测量模块:此模块默认通信参数

  • 波特率:9600
  • 数据位:8
  • 停止为:1
  • 校验:无

此模块的modbus rtu通信寄存器如下:

 以下是IOC软件部分:

以下是IOC控制程序的开发过程:

这个IOC程序需要以下模块支持:base, asyn和modbus。

1)用makeBaseApp构造IOC程序框架。

2)在configure/RELEASE下添加所需模块的路径:

SUPPORT=/usr/local/EPICS/synApps/supportASYN=$(SUPPORT)/asyn
MODBUS=$(SUPPORT)/modbus# EPICS_BASE should appear last so earlier modules can override stuff:
EPICS_BASE = /usr/local/EPICS/base

 3)在onevoltageApp/src目录下Makefile文件中添加,编译所需的模块以及库文件:

....
onevoltage_DBD += asyn.dbd
onevoltage_DBD += drvAsynSerialPort.dbd
onevoltage_DBD += modbusSupport.dbd# Add all the support libraries needed by this IOC
onevoltage_LIBS += asyn
onevoltage_LIBS += modbus...

4) 在onevoltageApp/Db文件中添加以下两个文件:

a) longinInt32.template用于从硬件读取原始电压表示的数值:

record(longin,"$(P)$(R)") {field(DTYP,"asynInt32")field(INP,"@asyn($(PORT) $(OFFSET))$(DATA_TYPE)")field(SCAN, "$(SCAN)")field(FLNK, "$(P)Digitals")field(EGU, "V")
}

b) calc_voltage.db:用于转换硬件原始电压表示格式为正常表示的电压格式:

record(calc, "$(P)Digitals") {field(SCAN, "Passive")field(FLNK, "$(P)Divsion")field(CALC, "FLOOR(A/B)")field(INPA, "$(P)RawV1")field(INPB, "10000")
}record(calc, "$(P)Divsion") {field(SCAN, "Passive")field(FLNK, "$(P)Voltage")field(CALC, "10^A")field(INPA, "$(P)Digitals")
}record(calc, "$(P)Voltage") {field(SCAN, "Passive")field(EGU, "V")field(CALC, "(A-C*10000)/B")field(INPA, "$(P)RawV1")field(INPB, "$(P)Divsion")field(INPC, "$(P)Digitals")
}

IOC数据库中记录之间关系图,设计如下:

将以下两个文件添加到Makefile中:

...
DB += longinInt32.template
DB += calc_voltage.db
...

5) 返回这个IOC的顶层目录并且执行Make,编译这个项目。

6)进入启动目录,创建一个模板实例化文件,然后编辑st.cmd文件:

a) onevoltage.substitutions

file "../../db/longinInt32.template" { pattern
{P,           R,                PORT,     OFFSET,   DATA_TYPE,      SCAN}
{ONEVOLTAGE:,    RawV1,        A0_In_Word,     0,     UINT16,       "I/O Intr"}
}

b) st.cmd 

#!../../bin/linux-aarch64/onevoltage#- You may have to change onevoltage to something else
#- everywhere it appears in this file< envPathscd "${TOP}"## Register all support components
dbLoadDatabase "dbd/onevoltage.dbd"
onevoltage_registerRecordDeviceDriver pdbbasedrvAsynSerialPortConfigure("onevoltage", "/dev/ttyUSB0", 0, 0, 0)
asynSetOption("onevoltage",0,"baud","9600")
asynSetOption("onevoltage",0,"parity","none")
asynSetOption("onevoltage",0,"bits","8")
asynSetOption("onevoltage",0,"stop","1")modbusInterposeConfig("onevoltage",1 ,2000,0)drvModbusAsynConfigure("A0_In_Word", "onevoltage", 1, 4,  0, 1, 0,  200, "onevoltage")## Load record instances
dbLoadRecords("db/calc_voltage.db","P=ONEVOLTAGE:")cd "${TOP}/iocBoot/${IOC}"
dbLoadTemplate("onevoltage.substitutions")iocInit

7) 在IOC启动目录中,执行以下命令../../bin/linux-aarch64/onevoltage st.cmd,并且用dbl查看加载的记录:

epics> dbl
ONEVOLTAGE:Digitals
ONEVOLTAGE:Divsion
ONEVOLTAGE:Voltage
ONEVOLTAGE:RawV1

8) 先用命令行测试:

root@orangepizero2:~#  caget ONEVOLTAGE:RawV1 # 测量电压的原始表示
ONEVOLTAGE:RawV1               32002
root@orangepizero2:~#  caget ONEVOLTAGE:Voltage # 转换后的电压值
ONEVOLTAGE:Voltage             2.005

9) 用CSS制作图形界面:

写在2023年12月31日,祝大家新年快乐,有工作的,工作顺利,想换工作的,来年都能找一个好工作。 

这篇关于基于EPICS modbus模块的单通道电压监测项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558327

相关文章

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.