【翻译1】EPICS Channel Access (CA) 手册——配置

EPICS R3.14 Channel Access Reference Manual 原文地址:https://epics.anl.gov/base/R3-14/12-docs/CAref.html#Configuration.

备注:UDP是用户数据报协议(User Datagram Protocal)的简称,是一种无连接的传输协议。在网络中,UDP与TCP一样,都是用于处理数据包。

 

为什么通道访问要重新配置?

重新配置EPICS通道访问的主要原因如下:
     两个独立的控制系统必须共享一个可交互的网络
     测试系统不得与操作系统交互
     使用地址列表进行名称解析和服务器信标,而不是用广播
     控制系统占用多个IP子网
     非标准客户端断开超时或服务器信标间断
     指定本地时区
     大型阵列的运输

EPICS环境变量

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

EPICS环境变量
表1. EPICS环境变量

根据正在使用的shell终端的不同,环境变量的设置会有所不同,设置命令如下表2所示。

设置环境变量
表2. 设置环境变量

CA和广域网

通常在局域网(LAN)环境中,CA通过广播包含通道名称列表(CA搜索消息)的帧并等待来自承载所识别频道的服务器的响应来发现EPICS过程变量的主机地址。 同样,CA客户端通过定期监视服务器发出的广播信标,有效地发现最近已加入LAN或与LAN断开连接的CA服务器。 由于硬件广播需要特殊的硬件功能,因此当EPICS扩展到在广域网(WAN)上运行时,我们需要提供额外的配置信息。

IP网络管理背景信息

通道访问使用Internet协议(IP)实现。 IP地址分为主机和网络部分。每个部分之间的边界由IP网络掩码确定。网络掩码中与零对应的IP地址部分指定IP子网内的主机地址。网络掩码中对应于二进制一的IP地址的部分指定主机IP子网的地址。通常,广播帧的范围将限于一个IP子网。主机地址部分设置为全零或全一的地址是特殊的。现代IP内核实现保留目标地址,主机部分设置为全部一,以便将广播寻址到特定子网。理论上,我们可以通过指定适当的子网地址以及设置为全部为一的主机部分,在互连的因特网内的任何具有广播能力的LAN上发布广播帧。实际上,这些“定向广播”经常受到默认路由器配置的限制。通过登录该主机并键入本地操作环境所需的命令,可以获得到达特定主机所需的正确定向广播地址。忽略环回接口,并使用广播地址关联连接到网络路径的接口来连接您的客户端。通常只有一个以太网接口。

IP端口是正整数。 IP地址,端口号和协议类型唯一地标识在计算机之间传输的特定帧的源和目的地。 服务器通常由众所周知的端口号寻址。 在初始化期间为客户端分配唯一的临时端口号。 低于1024的IP端口保留用于提供标准化设施(如邮件或文件传输)的服务器。 1024和5000之间的端口号通常保留用于临时端口号分配。

查看ip网络的命令
表3. 查看ip网络的命令

IP端口

可以重新配置Channel Access使用的两个默认IP端口号。 当站点决定设置两个或多个将共享同一网络的完全独立的控制系统时,可能会发生这种情况。 例如,站点可能在同一网络上建立操作控制系统和测试控制系统。 在这种情况下,希望测试系统和操作系统使用相同的PV名称而不用担心碰撞。 站点也可能配置CA端口号,因为某些其他工具已在使用默认端口号。 默认的Channel Access端口号已在IANA注册。

两个默认的端口
表4. 两个默认的端口

如果客户端需要与驻留在不同端口号的两个服务器通信,则可以将扩展语法与EPICS_CA_ADDR_LIST环境变量一起使用。 请参阅下面的WAN环境。

防火墙

如果您希望计算机上的通道访问客户端能够查看信标并回复广播PV搜索请求,则需要允许具有源端口。EPICS_CA_SERVER_PORT(默认为5064)或目标端口EPICS_CA_REPEATER_PORT(默认为5065)的入站UDP数据包。 在使用iptables的系统上,可以通过类似的规则来完成。

     -A INPUT -s 192.168.0.0/22 -p udp --sport 5064 -j ACCEPT
     -A INPUT -s 192.168.0.0/22 -p udp --dport 5065 -j ACCEPT

如果您希望客户端能够看到计算机上的通道访问服务器(例如“软IOC”),则需要允许具有目标端口EPICS_CA_SERVER_PORT的入站TCP或UDP数据包(默认为5064)。 在使用iptables的系统上,可以通过类似的规则来完成。

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

在所有情况下,“ - s 192.168.0.0/22”指定您希望接受数据包的地址范围。

WAN环境

当CA客户端库连接通道时,它必须首先确定通道Process Variable所在的服务器的IP地址。为此,客户端将名称解析(搜索)请求发送到服务器目标地址列表。这些服务器目标地址可以是IP单播地址(单个主机地址)或IP广播地址。每个名称解析(搜索)请求都包含一个通道变量名称列表。如果此地址列表中的某个服务器能识别一个或多个PV变量的CA服务器的IP地址(我的理解是:如果列表中存在  含有你搜索的PV变量名的  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系统中,必须设置EPICS_CA_ADDR_LIST,以便CA名称解析(搜索请求)帧从CA客户端传递到目标CA服务器,除非安装了CA代理(网关)。如果本地操作系统支持主机名到IP地址转换,则EPICS_CA_ADDR_LIST中的地址可以是点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模式允许信道访问工作,例如,通过SSH隧道。

目标地址列表
表5. 目标地址列表

如果客户端需要与驻留在不同端口号的两个服务器通信,则可以将扩展语法与EPICS_CA_ADDR_LIST环境变量一起使用。 EPICS_CA_ADDR_LIST中的每个主机名或IP地址后面可能紧跟冒号和IP端口号,而不会插入空格。 未指定端口号的条目将默认为EPICS_CA_SERVER_PORT。

设置目标地址(紧跟冒号和IP端口号)
表6. 设置目标地址(紧跟冒号和IP端口号)

vxWorks系统上的路由限制

通常,vxWorks系统默认启动,路由限制只能访问本地子网。 如果EPICS系统在WAN环境中运行,则可能需要配置到vxWorks系统的路由,这使得基于vxWorks的CA服务器能够响应源自其子网外的请求。 这些路由限制也适用于与关闭子网服务器通信的vxWorks基本CA客户端。 EPICS系统管理器可以通过对某一主机不提供它到有限子网集之外的路由,来为改筑基实现实现基本但强大的访问控制形式。 请参阅vxWorks参考手册中的“routeLib”。

断开超时间隔

如果CA客户端库没有从连接到EPICS_CA_CONN_TMO秒的服务器看到信标,则会通过TCP / IP向服务器发送健康状况消息。如果未及时回复此健康状况消息,则客户端库将断定与服务器通信的通道不再响应,并通过功能回调通知CA客户端应用程序。参数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之前,如果客户端库在很长的时间间隔内没有收到任何响应,它会完全停止发送名称解析尝试,直到检测到信标异常(见下文)。

CA客户端库不断估计收到的所有服务器信标的信标周期。如果特定服务器的信标周期变得明显更短或更长,则说客户端检测到信标异常。当看到信标异常或接收到任何成功的搜索响应时,库会增加未解析通道的搜索间隔,但请求之间的初始间隔时间长于应用程序创建通道时使用的初始间隔。创建新频道不会(从EPICS R3.14.7开始)更改搜索预先存在的未解析频道时使用的间隔。程序“casw”在标准输出上为每个CA客户端信标异常检测事件打印消息。

另请参阅When a Client Does not See the Server's Beacon

配置最大搜索周期

名称解析(搜索)请求的发送速率会以指数方式返回到平台速率。 此平台速率值对网络流量有影响,因为它确定客户端搜索拼写错误或服务器中不存在的通道名称的速率。 此外,对于无法从新服务器看到信标的客户端,平台速率还可以确定客户端在发现新服务器之前将等待的最大间隔。

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

另请参阅When a Client Does not See the Server's Beacon

CA中继器

当多个客户端进程在同一主机上运行时,当信标消息被发送到单播地址时,或者当传统IP内核仍在使用时,它们都不可能直接接收服务器信标消息的副本。为了避免混淆这些限制,一个特殊的UDP服务器——CA中继器(CA Repeater),会在客户端未发现它运行时,由CA客户端库自动生成。此程序侦听发送到EPICS_CA_REPEATER_PORT参数中指定的UDP端口的服务器信标,并将接收到的信标,扇出到任何一个在CA中继器上注册过的同一主机中运行的任何CA客户端程序。如果CA中继器尚未在工作站上运行,则首次使用CA客户端库之前,“caRepeater”程序必须位于您的路径中。

如果基于主机的IOC在具有独立CA客户端进程的同一工作站上运行,则最好在引导工作站时启动caRepeater进程。否则,独立CA客户端进程可能依赖于在基于主机的IOC的范围内启动的CA中继器。只要基于主机的IOC继续运行,这种情况就没有任何问题。但如果基于主机的IOC进程在独立客户端进程退出之前存在,而独立客户端进程依赖于其CA中继器进行服务退出,则可能会出现问题。

由于中继器旨在由多个客户端共享,因此可以认为设置仅在可用网络接口的子集上侦听信标的CA转发器没有多大意义。在最坏的情况下,客户端库可能会看到来自它不感兴趣的服务器的信标异常。如果需要的话,可以考虑在后续版本对CA中继器进行修改,强制它只监听网络接口子集。

配置时区

注意:从EPICS R3.14开始,EPICS基本发行版中的所有库都依赖于操作系统内置的工具来确定正确的时区。 尽管如此,EPICS常用的几个程序仍然使用原始的“tssubr”库,因此它们仍然依赖于正确配置EPICS_TS_MIN_WEST。

虽然CA客户端库不对EPICS时间戳的本地时间和独立内部存储时区进行转换,但许多EPICS客户端应用程序调用提供这些服务的核心EPICS库。 要设置正确的时区,用户必须计算GMT以西的正分钟数(最大值为720)或GMT以东的负分钟数(最小值为-720)。 然后将该整数值放在变量EPICS_TS_MIN_WEST中。

时区设置变量EPICS_TS_MIN_WEST的取值
表7. 时区设置变量EPICS_TS_MIN_WEST的取值

配置最大阵列大小

从版本R3.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服务器

配置CA服务器
表8. 配置CA服务器

服务器端口

如果指定了环境变量EPICS_CAS_SERVER_PORT,则服务器将根据该环境变量配置其端口号。 如果没有指定该环境变量,则通过EPICS_CA_SERVER_PORT环境变量确定服务器的端口号。 两台服务器可以在同一台计算机上共享相同的UDP端口号,但存在限制 - 请参阅discussion of unicast addresses and two servers sharing the same UDP port on the same host

服务器信标

服务器信标是由服务器发出的UDP包,以示它们还存在。该信标自初始化起就开始连续发送,发送间隔从初始值逐渐增加至最大间隔值,然后一直以最大间隔持续发送信标。服务器以一定间隔持续发送信标,就好比人的心跳。发送这个信标的端口为5065端口(就把它记作心跳端口吧)。服务器信标由客户端接收。服务器信标还可用于恢复断开的虚拟电路连接。

另外,这里提一句,用于接收/发送数据的端口为5064端口(就把它记作数据端口吧)。不管是响应CA客户端的名称搜索请求时(UDP),还是建立TCP连接后开始传输数据时,都是使用这个数据端口。

【备注:此前两段为自己的理解和归纳,感谢韩利峰老师的指导,给予我很大帮助!】

 

EPICS_CAS_BEACON_PERIOD参数指定服务器的信标周期,并以浮点秒为单位指定。默认值通常为15秒。另请参阅EPICS_CA_CONN_TMODynamic Changes in the CA Client Library Search Interval

CA服务器在初始化时构建一个信标发送的目标地址列表。如果EPICS_CAS_AUTO_BEACON_ADDR_LIST的值为“YES”,则信标地址列表将自动配置为包括主机中找到的所有LAN接口的广播地址以及主机中找到的所有点对点接口的目标地址。但是,如果用户还定义了EPICS_CAS_INTF_ADDR_LIST,则信标地址列表的自动配置被约束到其中指定的网络接口,因此只有指定LAN接口的广播地址和所有指定的点对点链路的目标地址将自动配置。

如果定义了EPICS_CAS_BEACON_ADDR_LIST,则其内容将用于增强 信标地址列表的任何自动配置。如果“:nnn”跟在主机名或IP地址后面,则EPICS_CAS_BEACON_ADDR_LIST中定义的条目可能会覆盖目标端口号。或者,如果EPICS_CAS_BEACON_ADDR_LIST和EPICS_CAS_INTF_ADDR_LIST都未定义,则使用EPICS_CA_ADDR_LIST的内容来扩充列表。否则,列表不会增加。

通常,由EPICS_CAS_BEACON_PORT参数指定服务器信标的目标端口。唯一的例外情况是,在EPICS_CAS_BEACON_ADDR_LIST或EPICS_CA_ADDR_LIST中指定了端口时(此时不单靠EPICS_CAS_BEACON_PORT指定目标端口,具体情况在前一段中已经详细阐述)。如果未指定EPICS_CAS_BEACON_PORT,则会将信标发送到EPICS_CA_REPEATER_PORT中指定的端口。

将服务器绑定到一组有限的网络接口

参数EPICS_CAS_INTF_ADDR_LIST允许CA服务器将自身绑定到一个本地主机网络接口(每个接口由其IP地址指定)的有限集上,从而仅接受从这个集合来的消息。 在UNIX系统上,键入“netstat -i”(在Windows上键入“ipconfig”)以查看本地主机的网络接口列表。 具体地说,服务器接受的UDP搜索消息不仅寻址于EPICS_CAS_INTF_ADDR_LIST中指定的IP地址,而且寻址于相应LAN接口的广播地址寻址。 默认情况下,可以从配置到其主机的所有网络接口访问CA服务器。 在R3.14和以前的版本中,iocCore使用的CA服务器未实现此功能。

忽略来自某些主机的PV名称解析请求

任何源自EPICS_CAS_IGNORE_ADDR_LIST参数指定的IP地址的名称解析请求都不会被响应。在R3.14和先前版本中,iocCore使用的CA服务器未实现此功能。

客户端配置也适用于服务器

另请参阅Configuring the Maximum Array Size

另请参阅Routing Restrictions on vxWorks Systems

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值