EPICS 3.14通道访问手册(1)

配置

为什么重新配置通道访问

重新配置EPICS通道访问的代表性原因:

1、两个独立的控制系统必须共享一个不怕冲突的网络

2、一个测试系统不干扰一个运行的系统

3、为名称解析和服务器beacon使用地址列表替代广播

4、控制系统占据多个IP子网

5、非标准客户端超时断开或者服务器beacon间隔

EPICS环境变量

所有通道访问(CA)配置通过EPICS环境变量出现。当搜索一个EPICS环境变量时,EPICS首先使用ANSI C getenv()调用从环境中查找。如果没有匹配的变量存在,则使用在EPICS构建系统配置文件中指定的默认值。

根据在用的命令行shell,不同地设置环境变量。

通道访问CA和广域网

在局域网(LAN)环境中,CA通常通过广播包含一个通道名列表的帧(CA搜索消息)并且等待来自驻留被标识通道的服务器的响应来发现对于一个EPICS过程变量的主机的地址。同样,CA客户端通过从局域网周期地监视由服务器发送被广播的beacons有效地发现最近加入这个LAN或者断开地CA服务器。由于硬件广播需要特殊地硬件功能,当EPICS被扩展到在要给广域网上操作时需要我们提供更多配置信息。

IP网络管理背景信息

使用因特网协议(IP)实现了通道访问。IP地址被分成主机和网络地址部分。由IP子网掩码确定每个部分之间的边界。在子网掩码中IP地址对应0的部分指定一个IP子网内的主机地址。在子网掩码中IP地址对应1的部分指定一个主机的IP子网地址。一个广播帧的范围通常将被限制在一个IP子网。主机地址部分被设置为全0或全1的地址是特殊的。现代IP内核实现保留被设置成全1的主机部分的地址作为一个特定子网的寻址广播的目的。理论上,我们可以通过指定合适的子网地址和一个被设置成全1的主机部分在互联的Internet中任何能够广播的LAN上发送一个广播帧。在实际中,这些"直接的广播"经常被默认路由器配置限制。通过登录一台特定主机并且输入你本地操作环境所需的命令,可以获取到达这台主机所需的合适的直接广播地址。忽略环回地址并且使用一个连接到一个通过网络到你客户端的路径的网卡相关联的广播地址。一旦将只有一个以太网卡。

IP端口是正整数。IP地址,端口号,和协议类型唯一地标识了在计算机之间传递的一个特定帧的源和目的。服务器一般由一个已知端口寻址。客户端在初始化中被分配一个临时端口号。小于1024的IP端口被保留给提供诸如邮件或文件传输的标准功能的服务器。在1024和5000之间的端口号一般被保留给了临时端口号分配。

IP端口号

由通道访问使用的两个默认IP端口号可以被重新配置。当一个站点决定设立两个或者多个将共享相同网络的完全独立的控制系统时,这会发生。例如,一个站点可以在相同网络上设置一个运行的控制系统和一个测试控制系统。在这种情况下,需要测试系统和运行的系统使用相同的PV名称而不担心冲突。一个站点也可以由于某些其它设施已经使用了默认的端口号也配置CA端口号。已经向IANA注册的默认通道访问端口号。

目的       默认环境变量
CA服务器5064EPICS_CA_SERVER_PORT
CA Beacon(被发送给CA repeater守护进程)5065EPICS_CA_REPEATER_PORT

如果一个客户端需要与驻留在不同端口号上的两台服务器通信,可以对EPICS_CA_ADDR_LIST使用扩展语法。

防火墙

如果你想要在一台机器上的通道访问客户端能够看到beacons并且响应广播PV搜索搜索请求,你需要允许源端口EPICS_CA_SERVER_PORT(默认5064)或者目的端口EPICS_CA_REPEATER_PORT(默认5065)d的入站UDP数据包。在使用iptables的系统上,可以通过像这样的规则完成这件事:

-A INPUT -s 192.168.0.0/24 -p udp --sport 5064 -j ACCEPT

-A INPUT -s 192.168.0.0/24 -p udp --dport 5065 -j ACCEPT

如果你想要在一台机器上的通道访问服务器(例如"softIOCs")能够被客户端看到,你需要允许目的端口EPICS_CA_SERVER_PORT(默认5064)的入站TCP或UDP包。在使用iptables的系统上,通过像如下的规则完成这件事:

-A INPUT -s 192.168.0.0/24 -p udp --dport 5064 -j ACCEPT

-A INPUT -s 192.168.0.0/24 -p tcp --dport 5064 -j ACCPT

在所有情况中,"-s 192.168.0.0/24"指定你想要从哪些地址范围接收数据包。

WAN环境

当CA客户端库连接一个通道时,它必须首先确定这个通道过程变量所驻留的服务器的IP地址。要完成目的,客户端发送名称解析(搜索)请求给一张扶额u其目的地址列表。这些服务器目的地址可以是IP单播地址(独立的主机地址)或者IP广播地址。每个名称解析(搜索)请求包含一张过程变量名称的列表。如果这个地址列表可达的服务器中有一台知道一台可以提供一个或多个指定过程变量CA服务器的IP地址,则它发送回一个包含这个服务器的IP地址和端口号的响应。

在初始化过程中,在发送CA客户端名称解析(搜索)请求时,CA构建使用的服务器目的地址列表。通过检测连接到这台主机的网卡,初始化这个表格。对于找到的连接了一个能够广播的IP子网

的每个网卡,那个子网的广播地址被添加到了这个列表。对于被找到的每个点到点网卡,那个链接的目的地址被添加到了这个列表。如果EPICS环境变量EPICS_CA_AUTO_ADDR_LIST存在并且其其值不是"no"或"NO"。一般默认值是用EPICS_CA_AUTO_ADDR_LIST设置成"YES"或"yes"启用网卡检测驱动的初始化。

在网卡检测之后,在EPICS环境变量EPICS_CA_ADDR_LIST中指定的任何IP地址被添加到用于CA客户端名称解析请求的目的地址列表。在一个跨多个子网的EPICS系统中,除非安装了一个CA代理服务器(网关),否则EPICS_CA_ADDR_LIST必须被设置,使得CA名称解析(搜索请求)帧从CA服务器传递到目的CA服务器。在EPICS_CA_ADDR_LIST可以是点分IP地址或者(如果本地OS支持主机名到IP地址转换)主机名。当多个名称被添加到EPICS_CA_ADDR_LIST,它们必须被空白分隔。在EPICS_CA_ADDR_LIST中指定的地址不需要是广播地址,但这经常是最方便的选择。

对于在EPICS环境变量EPICS_CA_NAME_SERVERS中指定的任何IP地址,TCP连接被打开并且用于CA客户端名称解析请求。(因而,在EPICS_CA_NAME_SERVERS中不允许广播地址)。当组合一个空的EPICS_CA_ADDR_LIST和EPICS_CA_AUTO_ADDR_LIST设置成"NO",可以不使用用于名称解析的UDP运行通道访问。这样一个TCP-only模式允许用于通道访问运行,例如通过SSH通道。

如果一个客户端需要与驻留在不同端口号的两台服务器通信,则可以一种使用EPICS_CA_ADDR_LIST环境变量的扩展语法。在EPICS_CA_ADDR_LIST中每个主机名或IP地址后面立即跟不带空白的一个冒号和一个IP端口号。没有指定一个端口号的条目将默认尾EPICS_CA_SERVER_PORT。

在vxWorks系统上路由限制

vxWorks系统默认经常用路由只限本地子网启动。如果一个EPICS系统正在一个WAN环境中运行,需要像vxWorks系统配置路由,这使得一个基于vxWorks的CA服务器能够响应来自其子网之外的请求。这些路由限制也可以用于基于vxWorks的CA客户端与子网之外的服务区进行通信。一个EPICS系统管理员可以通过在超出一个有限子网集合的主机中不提供路由,可以实现对一个特定主机的冗余但健壮访问控制形式。

断开连接的超时间隔

如果CA客户端库在EPICS_CA_CONN_TMO秒内未剪刀来自它连接的一台服务器的一个beacon,则通过TCP/IP向这台服务器发送一条健康状态消息。如果这条状态消息未被立即应答,则客户端库将得出与这台服务器进行通信的通道不再响应的结论并且通过函数回调通知客户端一侧的应用程序。用浮点描述指定参数EPICS_CA_CONN_TMO。默认值一般30秒。为了有效运行,推荐EPICS_CA_CONN_TMO被设置成不小于为EPICS_CA_BEACON_PERIOD指定的值的两倍。

在EPICS R3.14.5之前,一个未响应的服务器意味着一个立即TCP回路断开,立即继续基于UDP的搜索请求,并且立即尝试重新连接。考虑到当运行服务器接近于资源限制时过度更多活动。因而从版本R3.14.5以及更高,当通道未响应时,CA客户端库继续通知客户端一侧应用程序,但不立即断开这个TCP回路。CA客户端推迟回路关闭直到从IP内核接收到回路断开的指示。因为一台服务器被重启或者因为IP内核的内部TCP回路不活动,保活计时器在一个长持续时间后超时(适合于需要在超载时期避免大量活动的基于IP的系统),这会发生。最终结果是在超载时期更少的搜索和TCP回路设置和关闭活动。

在CA客户端库搜索间隔中动态变化

CA客户端库将持续尝试连接一个应用程序已经创建的任何CA通道,直到成功。对于任何未解析通道,这个库用名称解析请求周期地查询以上描述的服务器目的地址列表。由于这个地址列表经常包含广播地址,并且因为经常配置过程遍历名称,或者服务器可能临时不可达,则对于CA客户端库间隔必须小心地及时调度这些请求以避免在网络和服务器上引入过量负载。

当CA客户端库有很多通道要连接,并且大部分其名称解析请求被响应,则它以对于正在响应地服务器集合两倍的估算往返间隔或者以对应操作系统的最小延时量(二者之中的大者)发送名称解析请求。根据之前的成功率,也动态调整每个间隔的UDP帧数。

如果一个名称解析请求未被响应,则客户端库加倍名称解析尝试之间的延时并且减少每个间隔请求数目。尝试之间的最大延时由EPICS_CA_MAX_SEARCH_PERIOD限制。注意,但在R3.14.7前,如果客户端库在很长间隔时间未接收任何响应,在探测到一个异常beacon前,它完全停止发送名称解析尝试。

CA客户端库持续估算接收的所有服务器beacons的beacon周期。如果一个特定服务器的beacon周期变得显著地更短或更长,则就说客户端探测到了一个异常beacon。当见到一个异常beacon时或者当任何成功地搜索响应被收到时,库未为解析通道缩短搜索间隔,但在请求之间用一个比在这个程序床一个通道使用更长地初始间隔。一个新通道的创建(从EPICS R314.7开始)不更改在搜索先前未解析通道使用的间隔。程序"casw"在标准输出上为每个CA客户端异常beacon探测事件打印一条消息。

配置最大搜索周期

名称解析(搜索)请求所用速率指数地回退到一个平稳速率。这个平稳只对网络负载有影响,因为它确定客户端搜索被错误拼写或者在服务器中不存在地通道名称所用的速率。更进一步,对于不能从一台新服务器看到beacon的客户端,平稳速率也确定了客户端在发现一台新服务器前将等待的最长间隔。

从EPICS R3.14.7开始,这个最大搜索间隔平稳速率由EPICS_CA_MAX_SEARCH_PERIOD环境变量确定(以秒为单位)。

CA Repeater

当若干客户端进程运行在相同主机上,当客户端beacon消息被发送到单播地址时或者老旧的IP内核仍然在使用时,所有它们直接获取一个服务器beacon消息的副本是不可能的。要避免在这些限制上的冲突,当一个特殊的UDP服务器(CA Repeater)被发现未在运行时,它自动由CA客户端库产生。这个程序监听发送给在EPICS_CA_REPEATER_PORT参数中指定的UDP端口的服务器beacons并且散出任何接收到的beacons给运行在相同主机上已经向这个CA Repeater注册的任何CA客户端程序。如果CA Repeater还未运行在一个工作站上,则在首次使用CA客户端库前"caRepeater"程序必须在你的搜索路径中。

如果一个基于主机的IOC运行在与单独CA客户端进程相同的工作站上,在启动这台工作站前,启动caRepeater进程可能是最好的。否则,这个CA客户端进程可能变得依赖于一个在基于主机的IOC范围内启动的CA repeater。只要基于主机的IOC持续运行,这种情况没有问题,但如果在依赖于其CA repeater服务的独立客户端进程退出前,基于主机的IOC进程退出了,问题会产生。

由于repeater是为了被在多个客户端共享,则可以说只在一个可用网卡的子集上设置一个监听beacons的CA repeater变得没有什么意义。在最坏情况中,这个客户端库会看到来自服务器的它不感兴趣的异常beacon。如果有需要它的情况出现,会考虑对CA repeater的修改使其只在一个网卡子集上监听。

配置时区

注意:从EPICS 3.14开始,在EPICS base发行包中所有库依赖内建到操作系统的功能来确定正确时区。然而,常使用EPICS的若干程序仍然使用原来的"tssubr"库,因而它们仍然依赖于EPICS_TS_MIN_WEST的合适配置。

虽然CA客户端库不在本地时间和EPICS时间戳的时区独立存储之间转换,很多EPICS客户端一侧程序调用提供这些服务额核心EPICS库。要设置正确的时区,使用者必须计算GMT西部的正分钟数(最大720,包含)或者GMT东部负分钟数(最小-720,包含)。这个整数值接着被放置在变量EPICS_TS_MIN_WEST中。

配置最大数组尺寸

从版本3.14开始,环境变量EPICS_CA_MAX_ARRAY_BYTES决定可以通过CA传递的最大数组尺寸。在这个版本之前,只有小于16k字节的数组才能被传递。CA客户端维持一张16384字节的网络缓存的空闲列表,用于通常通信。如果EPICS_CA_MAX_ARRAY_BYTES大于16384字节,则在一个客户端发送它的第一个数组请求后,才建立并且使用第二张更大数据缓存的空闲列表。

CA客户端库使用EPICS_CA_MAX_ARRAY_BYTES来确定它将发送或接收的最大数组。同样,CA服务器使用EPICS_CA_MAX_ARRAY_BYTES来确定它可以发送或接收的最大数组。客户端不影响服务区的消息尺寸配额,反之亦然。实际上,EPICS_CA_MAX_ARRAY_BYTES的值在服务器和客户端上不需要一样。如果服务器接收一个太大而不能完整读取或响应的请求,则它发送一条异常消息到客户端。同样,如果CA客户端库接收一个发送一个大于EPICS_CA_MAX_ARRAY_BYTES的数组,它将返回ECA_TOLARGE。

一个常见错误是通过元素数目乘以单个元素尺寸正确地计算以字节未单位地最大基准尺寸,但忽略了添加用于复合数据类型的常被更高级客户端一侧程序使用的额外字节(例如DBR_GR_DOUBLE)。根据这种混淆,可得出EPICS_CA_MAX_ARRAY_BYTES可以更合适地被称为EPICS_CA_MAX_DATUM_BYTES的结论,或者内部更改这个软件来近似用户请求未最大标量配额尺寸(到目前,还未为解决这个问题做任何事情)。

配置一个CA服务器

服务器端口

如果指定了EPICS_CAS_SERVER_PORT,服务器从这个环境变量配置其端口号。否则,EPICS_CA_SERVER_PORT环境变量确定这个服务器端口号。两台服务器可以共享在相同机器上的相同UDP端口号,但有限制。

服务器beacons

 EPICS_CAS_BEACON_PERIOD参数确定服务器的beacon周期,并且用浮点秒指定它。默认值一般是15秒。

CA服务器在初始化过程中,构建要发送beacons到的地址列表。如果EPICS_CAS_AUTO_BEACON_LIST有值"YES",则beacon地址列表将被自动配置成包含在这台主机中找到的所有LAN接口的广播地址以及在这台主机中找到的所有点到点的目的地址。但如果使用者也定义了EPICS_CAS_INTF_ADDR_LIST,则beacon地址列表自动配置被限制于在那里指定的网卡,并且因而将只自动配置指定的LAN接口的广播地址以及所有指定的点到点链接的目的地址。

如果定义了EPICS_CAS_BEACON_ADDR_LIST,则将使用它的内容增强beacon地址列表的任何自动配置。在EPICS_CAS_BEACON_ADDR_LIST中各自条目可以重写目的端口号,如果":nnn"跟在主机名或IP地址后面。另外,EPICS_CAS_BEACON_ADDR_LIST和EPICS_CAS_INTF_ADDR_LIST为被定义,EPICS_CA_ADDR_LIST的内容用于增强这个列表。否则,不增强这个列表。

EPICS_CAS_BEACON_PORT参数为服务器beacons指定目的端口。当在EPICS_CAS_BEACON_ADDR_LIST或可能在EPICS_CA_ADDR_LIST中指定端口时,对此的唯一例外发生。

绑定一台服务器到一个有限网卡集合

参数EPICS_CAS_INTF_ADDR_LIST允许一台ca服务器绑定自己到并且因而只在一个有限本地主机的网卡集合上接收消息(每个网卡由其IP地址确定)。在Unix系统上,输入"netstat -i"查看一个本地主机网络接口的列表。尤其,被发送给在EPICS_CAS_INTF_ADDR_LIST中指定IP地址以及被发送给对应LAN接口的广播地址的UDP搜索消息将被服务器接收。默认,从配置到这台主机的所有网卡可以访问CA服务器。在R3.14中以及先前发行版,iocCore使用的CA服务器未实现这个特性。

忽略来自特定主机的过程变量名称解析请求

源于在EPICS_CAS_IGNORE_ADDR_LIST中指定的任何IP地址的名称解析请求将不被应答,在R3.14中以及先前发行版,iocCore使用的CA服务器未实现这个特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值