http://www.corxnet.com/product/showproduct.php?id=36

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-21473915904.22.6e3c5ed08NWExp&id=520395007720

推荐这款可网络控制的继电器,16路继电器,16路IN,折腾了好几天在几位同事的帮助下终于把IOC调通了。基本的通过PV控制继电器的开关都调试成功,点控还没做,以后有空再做吧,如果看到的愿意做的可以继续做下去,不过labview程序把点控做好了,欢迎去下载:

https://gitee.com/lup9304/tuning-tools/blob/master/netio1.0.llb

这东西用起来很方便,比plc、西门子模块等方式搭建IO控制省事多了,一般的使用足够了,如果大电流大功率使用,可以自己外加继电器,用这个网络继电器控制外加的继电器即可。

具体怎么编译IOC,可以参看下面链接:

https://epics.anl.gov/modules/soft/asyn/R4-24/HowToDoSerial/HowToDoSerial_StreamDevice.html

需要socket通信,在上面链接里加dbd这一步时:HPE3631Atest_DBD += drvAsynSerialPort.dbd,换成:drvAsynIPPort.dbd就好了。

之后就是编写db、proto、st.cmd文件了。附上相关的文件,写的很不专业,欢迎大家下载使用并请修改的更简洁:

[ioc@localhost iocJDQ016]$ cat st.cmd 
#!../../bin/linux-x86_64/JDQ016

#- You may have to change JDQ016 to something else
#- everywhere it appears in this file

< envPaths

epicsEnvSet "P" "HALF:BD:"
epicsEnvSet "R" "IO:"
epicsEnvSet("ETHER","192.168.1.18:50000")

cd "${TOP}"

## Register all support components
dbLoadDatabase "dbd/JDQ016.dbd"
JDQ016_registerRecordDeviceDriver pdbbase

epicsEnvSet "STREAM_PROTOCOL_PATH" "$(TOP)/db"

# Set up ASYN ports
#vxi11Configure("L0", "$(ETHER)", 0, 0.0, "inst0", 0)
drvAsynIPPortConfigure("L0", "$(ETHER)", 0, 0, 0)

## Load record instances
#dbLoadRecords("db/xxx.db","user=ioc")
dbLoadTemplate "db/bo.substitutions"
#dbLoadRecords("db/devJDQ016.db","P=$(P),R=$(R),PORT=L0,A=0")

cd "${TOP}/iocBoot/${IOC}"
iocInit

#var streamDebug 1
## Start any sequence programs
#seq sncxxx,"user=ioc"
[ioc@localhost iocJDQ016]$

[ioc@localhost db]$ cat bo.substitutions
# Example substitutions file

file "db/devJDQ016.db" {
   pattern { P, R, PORT, A }
        { "HALF:", "BD:NetIO:", "L0", 0 }
}

file db/devJDQ016-bo.db {
    pattern { P, R, Chan, Next, PORT, A }
        { "HALF:", "BD:NetIO:", 0, 1, "L0", 0 }
        { "HALF:", "BD:NetIO:", 1, 2, "L0", 0 }
        { "HALF:", "BD:NetIO:", 2, 3, "L0", 0 }
        { "HALF:", "BD:NetIO:", 3, 4, "L0", 0 }
        { "HALF:", "BD:NetIO:", 4, 5, "L0", 0 }
        { "HALF:", "BD:NetIO:", 5, 6, "L0", 0 }
        { "HALF:", "BD:NetIO:", 6, 7, "L0", 0 }
        { "HALF:", "BD:NetIO:", 7, 8, "L0", 0 }
        { "HALF:", "BD:NetIO:", 8, 9, "L0", 0 }
        { "HALF:", "BD:NetIO:", 9, A, "L0", 0 }
        { "HALF:", "BD:NetIO:", A, B, "L0", 0 }
        { "HALF:", "BD:NetIO:", B, C, "L0", 0 }
        { "HALF:", "BD:NetIO:", C, D, "L0", 0 }
        { "HALF:", "BD:NetIO:", D, E, "L0", 0 }
        { "HALF:", "BD:NetIO:", E, F, "L0", 0 }
        { "HALF:", "BD:NetIO:", F, 0, "L0", 0 }
}

[ioc@localhost db]$

[ioc@localhost db]$ cat devJDQ016.db
#
# Simple database and stream protocol file for basic SCPI (IEEE488.2) commands
#

#
# Short and long form of identification string
#

record(mbbiDirect, "$(P)$(R)Relay:mbbiD")
{
        field(SCAN, "2 second")
        field(DESC, "Relay open or close state")
        field(DTYP, "stream")
        field(INP, "@devJDQ016.proto readRelayState $(PORT)")
        field(FLNK, "$(P)$(R)R1:bi")
}

record(mbbiDirect, "$(P)$(R)IN:mbbiD")
{
        field(SCAN, "2 second")
        field(DESC, "Input open or close state")
        field(DTYP, "stream")
        field(INP, "@devJDQ016.proto readInState $(PORT)")
        field(FLNK, "$(P)$(R)IN0:bi")
}

record(bo, "$(P)$(R)Relay:SetAll")
{
        field(DESC, "Control Relay open all")
        field(DTYP, "stream")
        field(OUT, "@devJDQ016.proto setAll $(PORT)")
        field(ZNAM,"closeAll")
        field(ONAM,"openAll")
        field(FLNK, "$(P)$(R)Relay:mbbiD")
}

[ioc@localhost db]$

[ioc@localhost db]$ cat devJDQ016-bo.db 
## Simple database and stream protocol file for basic SCPI (IEEE488.2) commands
#

#
# Short and long form of identification string
#

record(bi, "$(P)$(R)R$(Chan):bi")
{
        field(DESC, "lost phase state")
        field(INP,  "$(P)$(R)Relay:mbbiD.B$(Chan) NPP")
        field(ZNAM,"off")
        field(ONAM,"on")
        field(FLNK, "$(P)$(R)R$(Next):bi")
}

record(bi, "$(P)$(R)IN$(Chan):bi")
{
        field(DESC, "lost phase state")
        field(INP,  "$(P)$(R)IN:mbbiD.B$(Chan) NPP")
        field(ZNAM,"off")
        field(ONAM,"on")
        field(FLNK, "$(P)$(R)IN$(Next):bi")
}

record(bo, "$(P)$(R)R$(Chan):bo")
{
    field(DESC, "Set Relay Chan$(Chan)")
    field(DTYP, "stream")
    field(ZNAM,"close")
    field(ONAM,"open")
    field(OUT,  "@devJDQ016.proto setRelay$(Chan) $(PORT) $(A)")
    field(FLNK, "$(P)$(R)Relay:mbbiD")
}
[ioc@localhost db]$

[ioc@localhost db]$ cat devJDQ016.proto 
InTerminator = "";
OutTerminator = "";
setRelay0 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x01|\x00\x01\x00\x01}%2<sum>%2<sum>";
    in "%s";
}
setRelay1 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x02|\x00\x02\x00\x02}%2<sum>%2<sum>";
    in "%s";
}

setRelay2 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x04|\x00\x04\x00\x04}%2<sum>%2<sum>";
    in "%s";
}

setRelay3 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x08|\x00\x08\x00\x08}%2<sum>%2<sum>";
    in "%s";
}

setRelay4 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x10|\x00\x10\x00\x10}%2<sum>%2<sum>";
    in "%s";
}

setRelay5 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x20|\x00\x20\x00\x20}%2<sum>%2<sum>";
    in "%s";
}

setRelay6 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x40|\x00\x40\x00\x40}%2<sum>%2<sum>";
    in "%s";
}

setRelay7 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x00\x80|\x00\x80\x00\x80}%2<sum>%2<sum>";
    in "%s";
}

setRelay8 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x01\x00|\x01\x00\x01\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelay9 {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x02\x00|\x02\x00\x02\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayA {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x04\x00|\x04\x00\x04\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayB {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x08\x00|\x08\x00\x08\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayC {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x10\x00|\x10\x00\x10\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayD {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x20\x00|\x20\x00\x20\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayE {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x40\x00|\x40\x00\x40\x00}%2<sum>%2<sum>";
    in "%s";
}

setRelayF {
    out "\xCC\xDD\xA1\x01%{\x00\x00\x80\x00|\x80\x00\x80\x00}%2<sum>%2<sum>";
    in "%s";
}

set {
    out "\xCC\xDD\xA1\x01\$1%2<sum>%2<sum>";
    in "%s";
}

setAll {
    out "\xCC\xDD\xA1\x01%{\x00\x00\xFF\xFF|\xFF\xFF\xFF\xFF}%2<sum>%2<sum>";
    in "%s";
}

readRelayState {
    wait 50;
    out "\xCC\xDD\xB0\x01\x00\x00\x0D\xBE\x7C";
    in "%*4c%2r[^\x0D]";
#    in "\xAA\xBB\xB0\x01%2r\x0D%2<sum>%2<sum>";
}

readInState {
    wait 50;
    out "\xCC\xDD\xC0\x01\x00\x00\x0D\xCE\x9C";
#    in "\xAA\xBB\xC0\x01%2x\x0D%2<sum>%2<sum>";
    in "%*4c%2r[^\x0D]";
}
[ioc@localhost db]$

网络继电器的EPICS IOC搭建相关推荐

  1. EPICS IOC Shell

    1 介绍 EPICS IOC是一个简单的命令解释器,其提供了一个vxWorks shell功能的子集.它被用于解释启动脚本(st.cmd)和在console终端输入的命令.在大多数情况中,vxWork ...

  2. 《剑侠情缘V5.0》网络单机版烽火诸侯私服搭建

    <剑侠情缘V5.0>网络单机版烽火诸侯私服搭建 <剑侠情缘V5.0>私服单机架设 搭建环境: 1.winXP 2.虚拟机 3. SQL2000+SP4升级补丁 4.服务端Ser ...

  3. 一个基于stream的EPICS IOC应用程序

    本文将介绍如何开发一个基于stream的EPICS IOC应用程序,其将作为一个简单的基于消息的设备(用于EPICS stream练习的设备模拟程序_yuyuyuliang00的博客-CSDN博客中最 ...

  4. 鼎阳SDS6204示波器的EPICS IOC调试

    经过雷雷师弟的努力,该款示波器终于调试成功,相关文件现放在gitee仓库里: https://gitee.com/lup9304/siglent/commit/99ce00d195facd87fa1c ...

  5. 将xscj指定为当前数据库_通过网络连接数据库模式Hive的搭建过程详解

    最近在搭建通过网络直接连接数据库模式的Hive时总是在启动的时候报各种错误,所以今天,我们来总结一下这种模式的Hive的搭建过程. [数据库安装] 安装mysql yum install mysql- ...

  6. 五路DI五路DO,网络继电器,Modbus TCP远程IO模块 WJ95

    产品特点: ● 五路开关量输入,五路继电器输出 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过网页查询电平状态 ● 可以通过网页设定继电器输出状态 ●  DI信号输入,DO输出及电 ...

  7. VGGNet网络详解与模型搭建

    文章目录 1 模型介绍 2 模型结构 3 模型特性 4 Pytorch模型搭建代码 1 模型介绍 ​ VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的 ...

  8. 网络继电器控制器(32 路):Y1-Y32继电器的开关

    模块通讯协议-自定义协议 通过技术文档,下载相应的软件(网络IO控制板控制软件). 使用调试软件SocketTool V4 ,和下载的软件做匹配调试,搜索设备里的网络协议,连接好调试器后,理解技术文档 ...

  9. VM虚拟机网络配置,集群搭建

    VMware Workstation虚拟机安装Linux系统不做介绍, 主要记录宿主机与虚拟机的网络配置 目录 基础 安装VMware后,宿主机本地网络会出现两个网卡 编辑VMware虚拟网络 虚拟机 ...

  10. GoogLeNet网络详解与模型搭建

    文章目录 1 模型介绍 2 GoogLeNet详解 Inception模块 辅助分类器 3 GoogLeNet网络结构 4 Pytorch模型搭建代码 1 模型介绍 GoogLeNet是2014年Ch ...

最新文章

  1. web 平台搭建-LAMP-源码包(CentOS-6)
  2. 2d的公式_钢筋下料计算公式分享,助你提高施工效率!
  3. Spark 0.8 集群(CentOS6.4)-简单统计测试
  4. jsp:include page= /路径
  5. MFC添加背景图片方法
  6. php退出登录后不能再登录了,php怎么实现退出登录功能?
  7. 【转】开发人员一定要加入收藏夹的网站
  8. ASIHTTPRequest源码简单分析
  9. 我的python之行
  10. 帧中继的基本配置(Basic FrameRealy)
  11. 在html语言中读取txt文件中的内容,Javascript写入txt和读取txt文件示例详解
  12. 流媒体服务器之 ZLMediaKit介绍
  13. 什么是数据运营?数据运营是做什么的?
  14. UI设计培训之用户画像-带你认清的你的用户
  15. 《你坏-大冰》阅读笔记
  16. 阿里云服务器 云监控 API 调用示例
  17. ewb文件用multisim打开_EWB的使用
  18. 微信小程序(uniapp)获取用户位置信息及选择位置
  19. Layer 图层圆角、边框 、底纹其他常用操作
  20. springCloud openFeign返回数据转型问题

热门文章

  1. 2022年投影仪推荐 家用投影仪推荐一下哪款比较好2022
  2. 操盘软件富赢版V7 2016正式版
  3. GoldVideo-基于Web Assembly的H265播放器实现
  4. H264 encode and decode
  5. CNCF:Kubernetes 已“跨越鸿沟”,逆袭成为主流
  6. 1047: 对数表 ZZULIOJ
  7. java 游戏编程 (一)
  8. html 转换 swf文件怎么打开,修改网页中的FlashSWF文件的方法
  9. 计算机病毒是软攻击,计算机病毒攻击战是指将什么植入_常见问题解析
  10. 计算机安全中心无法启动,win10无法启动安全中心服务的解决方法