本文以聚英电子的JY-DAMAIAO模拟量测控模块为例,讲解如何使用EPICS modbus模块实现对模拟设备读写控制。由于对设备施加电压以及测量电压都较电流容易,本人选择的这个模块能够读取6路0-10V的输入电压以及产生6路0-10V的输出电压。

程序安装过程与EPICS modbus模块驱动程序示例1(数字量)_yuyuyuliang00的博客-CSDN博客中讲解的类似,不同之处为这里使用的模板文件和启动文件不同。

1)编写模板文件:

在damaiao/damaiaoApp/Db路径下添加四个模板文件longinInt32.template,longoutInt32.template,aoWrite.template和aiRead.template并且修改Makefile文件。

a) longinInt32.template:这个记录能够读取寄存器的输入和保持寄存器的输入

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

b ) longoutInt32.template:这个记录能够设置保持寄存器的值。

record(longout,"$(P)$(R)") {field(SCAN, "Passive")field(DTYP,"asynInt32")field(OUT,"@asyn($(PORT) $(OFFSET))$(DATA_TYPE)")field(INP, "$(P)$(R):SetVoltage")
}

c) aoWrite.template:这个记录把电压值转换成写入保持寄存器的整数。

record(ao, $(P)$(R):SetVoltage)
{field(SCAN, "Passive")field(DTYP, "Raw Soft Channel")field(OMSL, "supervisory")field(DRVH, "10")field(DRVL, "0")field(LINR, "NO CONVERSION")field(AOFF, "0")field(ASLO, "0.001")field(ROFF, "0")field(OUT, "$(P)$(R).VAL CA PP")
}

d) aiRead.template:这个记录把从寄存器输入或保持寄存器读取的输入值转成电压值。

record(ai, "$(P)$(R):Value_RBV")
{field(DTYP, "Raw Soft Channel")field(SCAN, "Passive")field(INP, "$(P)$(R).VAL")field(ROFF, "0")field(ASLO, "0.001")field(AOFF, "0")field(LINR, "NO CONVERSION")field(LOPR, "0")field(HOPR, "10")
}

e) 修改Makefile文件

TOP=../..
include $(TOP)/configure/CONFIG
#----------------------------------------
#  ADD MACRO DEFINITIONS AFTER THIS LINE#----------------------------------------------------
# Create and install (or just install) into <top>/db
# databases, templates, substitutions like this
# Add your new created template files here
DB += longinInt32.template
DB += longoutInt32.template
DB += aiRead.template
DB += aoWrite.template#----------------------------------------------------
# If <anyname>.db template is not named <anyname>*.template add
# <anyname>_template = <templatename>include $(TOP)/configure/RULES
#----------------------------------------
#  ADD RULES AFTER THIS LINE

2)  切换到这个IOC程序的顶层目录,即: damaiao下,执行make编译这个程序。

3) 切换到启动目录下,即:damaiao/iocBoot/iocdamaiao,创建一个数据库文件以及编辑启动文件st.cmd:

a) 创建一个数据库文件damaiao.substitutions,内容如下:

file "../../db/longinInt32.template" { pattern
{P,                             R,              PORT,           OFFSET,         DATA_TYP                                                   E,      SCAN}
{DAMAIAO:                       LHI1V           A0_In_Word,     0,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LHI2V           A0_In_Word,     1,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LHI3V           A0_In_Word,     2,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LHI4V           A0_In_Word,     3,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LHI5V           A0_In_Word,     4,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LHI6V           A0_In_Word,     5,              UINT16,"                                                   I/O Intr"}
}file "../../db/aiRead.template" { pattern
{P,             R}
{DAMAIAO:       LHI1V}
{DAMAIAO:       LHI2V}
{DAMAIAO:       LHI3V}
{DAMAIAO:       LHI4V}
{DAMAIAO:       LHI5V}
{DAMAIAO:       LHI6V}
}file "../../db/longinInt32.template" { pattern
{P,                             R,              PORT,           OFFSET,         DATA_TYP                                                   E,      SCAN}
{DAMAIAO:                       LII1V           A1_In_Word,     0,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LII2V           A1_In_Word,     1,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LII3V           A1_In_Word,     2,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LII4V           A1_In_Word,     3,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LII5V           A1_In_Word,     4,              UINT16,"                                                   I/O Intr"}
{DAMAIAO:                       LII6V           A1_In_Word,     5,              UINT16,"                                                   I/O Intr"}
}file "../../db/aiRead.template" { pattern
{P,             R}
{DAMAIAO:       LII1V}
{DAMAIAO:       LII2V}
{DAMAIAO:       LII3V}
{DAMAIAO:       LII4V}
{DAMAIAO:       LII5V}
{DAMAIAO:       LII6V}
}file "../../db/longoutInt32.template" { pattern
{P,                             R,              PORT,           OFFSET,         DATA_TYP                                                   E}
{DAMAIAO:                       LHO1V           A0_Out_Word,    0               UINT16}
{DAMAIAO:                       LHO2V           A0_Out_Word,    1               UINT16}
{DAMAIAO:                       LHO3V           A0_Out_Word,    2               UINT16}
{DAMAIAO:                       LHO4V           A0_Out_Word,    3               UINT16}
{DAMAIAO:                       LHO5V           A0_Out_Word,    4               UINT16}
{DAMAIAO:                       LHO6V           A0_Out_Word,    5               UINT16}
}file "../../db/aoWrite.template" { pattern
{P,                             R}
{DAMAIAO:                       LHO1V}
{DAMAIAO:                       LHO2V}
{DAMAIAO:                       LHO3V}
{DAMAIAO:                       LHO4V}
{DAMAIAO:                       LHO5V}
{DAMAIAO:                       LHO6V}
}

b) 编辑启动文件st.cmd:

#!../../bin/linux-x86_64/damaiao#- You may have to change damaiao to something else
#- everywhere it appears in this file< envPathscd "${TOP}"## Register all support components
dbLoadDatabase "dbd/damaiao.dbd"
damaiao_registerRecordDeviceDriver pdbbase# use the following commands for TCP/IP
drvAsynIPPortConfigure("damaiao", "192.168.3.82:10000",0,0,1)modbusInterposeConfig("damaiao", 0,2000, 0)# Access 6 words as outputs (holding registers)
drvModbusAsynConfigure("A0_Out_Word", "damaiao",1, 6, 0, 6, 0, 1, "damaiao")# Access 6 words as inputs (holding registers)
drvModbusAsynConfigure("A0_In_Word",  "damaiao",1, 3, 0, 6, 0, 100, "damaiao")# Access 6 words as inputs (input registers)
drvModbusAsynConfigure("A1_In_Word",  "damaiao",1, 4, 0, 6, 0, 100, "damaiao")cd "${TOP}/iocBoot/${IOC}"
dbLoadTemplate("damaiao.substitutions")
iocInit

4) 用以下命令启动这个IOC程序,并且查看加载的记录:

[blctrl@main-machine iocdamaiao]$ ../../bin/linux-x86_64/damaiao st.cmd
epics> dbl
DAMAIAO:LHI1V
DAMAIAO:LHI2V
DAMAIAO:LHI3V
DAMAIAO:LHI4V
DAMAIAO:LHI5V
DAMAIAO:LHI6V
DAMAIAO:LII1V
DAMAIAO:LII2V
DAMAIAO:LII3V
DAMAIAO:LII4V
DAMAIAO:LII5V
DAMAIAO:LII6V
DAMAIAO:LHI1V:Value_RBV
DAMAIAO:LHI2V:Value_RBV
DAMAIAO:LHI3V:Value_RBV
DAMAIAO:LHI4V:Value_RBV
DAMAIAO:LHI5V:Value_RBV
DAMAIAO:LHI6V:Value_RBV
DAMAIAO:LII1V:Value_RBV
DAMAIAO:LII2V:Value_RBV
DAMAIAO:LII3V:Value_RBV
DAMAIAO:LII4V:Value_RBV
DAMAIAO:LII5V:Value_RBV
DAMAIAO:LII6V:Value_RBV
DAMAIAO:LHO1V
DAMAIAO:LHO2V
DAMAIAO:LHO3V
DAMAIAO:LHO4V
DAMAIAO:LHO5V
DAMAIAO:LHO6V
DAMAIAO:LHO1V:SetVoltage
DAMAIAO:LHO2V:SetVoltage
DAMAIAO:LHO3V:SetVoltage
DAMAIAO:LHO4V:SetVoltage
DAMAIAO:LHO5V:SetVoltage
DAMAIAO:LHO6V:SetVoltage

5) 启动CSS图形界面,可以查看这个设备中6个模拟输入通道的输入电压,设置6个模拟输出电压并且回读这个输出电压。

EPICS modbus模块驱动程序示例2(模拟量)相关推荐

  1. EPICS modbus模块驱动程序示例1(数字量)

    本文以Moxa ioLogik E2210(Moxa官网对这种设备的详细介绍ioLogik E2210 - 通用控制器和远程 I/O ioLogik E2200 系列 | MOXA)通用控制器和远程I ...

  2. 西门子PLc程序,博途V16 V17版1200与多台G120变频器通过过modbus RTU485 通讯控制,模拟量转

    西门子PLc程序,博途V16 V17版1200与多台G120变频器通过过modbus RTU485 通讯控制,模拟量转换,温度转换,压力Pid控制,西门子KTP700 HMi 含电路图,G120变频器 ...

  3. modbus通讯失败_技成周报38期 | SMART PLC Modbus通讯、组态、模拟量等常见问题

    西门子S7-200SMART PLC 问:ET200是什么? 答:SIMATIC (西门子) ET200 是分布式远程I/O系统,支持PN通讯 问:西门子S7-200SMART PLC能不能控制两个步 ...

  4. 无线数据采集DTU、无线io模块、无线4-20ma模拟量采集模块在工厂信息化MES系统DCS系统SCADA系统智慧工厂看板系统中的应用

    工厂信息化MES系统DCS系统SCADA系统智慧工厂看板系统工业4.0控制方案 项目背景 MES系统广泛用于各类制造.装配行业,可以同时为生产.质检.设备.工艺.物流.仓库.计划等部门提供实时信息服务 ...

  5. EPICS -- autosave模块使用示例

    Autosave自动保存EPICS过程变量(PVs)的值到一台文件服务器上文件中,并且在IOC(输入输出控制器--EPICS业务端)被重启时,恢复那些值. 以下展示一个如何使用这个autosave模块 ...

  6. EPICS stream模块使用示例 -- 基于字符串协议的通信

    1.按如下步骤,建立IOC应用程序框架: [blctrl@bjAli exer37]$ makeBaseApp.pl -t ioc streamTest [blctrl@bjAli exer37]$ ...

  7. 模拟量的输入和输出问题及选型

    1.选择模块时应注意模拟量有电压和电流之分. 有一个项目中用到了一个室温测量的小程序.看手册选择了S7-224 XP CPU,本体带两路模拟量输入,满足要求.采购变送器时没做要求,厂家发货全是0-20 ...

  8. 4-20ma和0-5v模拟量无线传输点对点无线采集控制解决方案io开关量信号无线远程控制解决方案

    ZKA-4088-LORA: 4路模拟量输入+8路开关量输入+8路开关量输出. ZKA-8088-LORA: 8路模拟量输入+8路开关量输入+8路开关量输出. ZKA-4488-LORA: 4路模拟量 ...

  9. 西门子S7-200模拟量编程

    西门子S7-200模拟量编程 本文以EM235为例讲解S7-200模拟量编程,主要包括以下内容: 1.模拟量扩展模块接线图及模块设置 2.模拟量扩展模块的寻址 3.模拟量值和A/D转换值的转换 4.编 ...

最新文章

  1. 如何上手深度学习中的图像处理?有这个代码资源库就够了
  2. ANDROID_NDK的path,如何在Android Studio中设置NDK_PROJECT_PATH
  3. Spring Data(二)查询
  4. 机器人学习--路径规划算法
  5. Docker最全教程之MySQL容器化 (二十五)
  6. android 横盘方向传感器,横盘震荡选择方向!
  7. ajax:dataType
  8. 泰克示波器时频多域信号频谱谐波分析
  9. 2015蓝桥真题(A组省赛)
  10. 北斗通讯协议4.0 java_北斗一串口协议4.0.pdf
  11. python爬虫app步骤_Python爬虫之App爬虫视频下载的实现
  12. 学习OpenCV——grabcut
  13. 人脸表情数据集集合整理——数据集构建新的体会
  14. 2022年最新NFT 开发平台解决方案
  15. 英语口语(英语流利说)笔记
  16. 英语专业 计算机语言学,SFU专业合集 | 语言学(Linguistic)专业一览
  17. 狗为什么吃屎?真相男默女泪,但看完后你也会流口水......
  18. Linux网络管理—brctl命令
  19. Cobar的使用与心得(持续更新)
  20. JQuery入门手册(学习笔记整理)

热门文章

  1. pyecharts制作3d地图加柱状图
  2. 阿里云centos镜像下载
  3. 练习:随机点名器案例
  4. 【职场篇】游戏开发社招求职面试指南③——面试总结
  5. Linux 分区、挂盘
  6. 《一个投资家的20年》读书笔记
  7. Lua 报错 PANIC: unprotected error in call to Lua API (no calling environment) 解决办法
  8. 云课堂计算机课病毒及安全设置答案,智慧职教云课堂PC端
  9. 微生物组-宏基因组分析第8期 (报名直播课免费参加线下2020.7)
  10. 渗透测试-红队从资产收集到打点