内容
一、概要
asyn记录被设计来提供对asyn功能几乎所有特性的访问。它包括做以下事情的能力:
- 对支持asynOctet, asynInt32 asynUInt32Digital和/或asynFloat接口的任何asyn设备执行I/O。
- 允许EPICS在不重启IOC下与一个新设备进行通信,即:不用编写任何C代码或者更高数据库。这允许通道访问客户端与不存在EPICS设备支持的设备进行通信。
- 结合scalcout记录格式化输出字符串和解析响应字符串,消除了在很多应用程序中对C设备支持代码的需求。
- 动态地更高asyn设备"port"和"address",因此单个asyn记录可以在运行时从与一个设备会话切换到另一个设备。
- 动态地更高正在被用于I/O的asyn接口。
- 管理一个设备的连接状态,即:connect/disconnect, enable/disable, autoConnect/noAutoConnect。
- 提供对asynTrace的访问,控制任何asyn设备的调试输出。
- 控制其驱动程序支持asynOption接口的串口的波特率,校验等。
- 控制GPIB设备的GPIB地址并且执行全局的和寻址的命令。
对于asynOctet接口,有两个输出字段AOUT(ASCII输出)和BOUT(字节输出)。OFMT(输出格式)字段用于选择选择这些字段中一个或另一个作为传给设备的输出源。类似地,有两个输入字段AINP(ASCII输入)和BINP(字节输入)。IFMT(输入格式)字段用于选择一个或另一个作为作为从设备发送数据的目的地。ASCII字段是DBF_STRING类型,并且非常适合与很多设备的一般通信。例如,它们允许用户在medm窗口中输入一个字符串并且观察来自仪器的响应。但ASCII字段长度受限于40个字符,并且不能用于读取或写二进制数据。字节输入和输出字段是DBF_CHAR数组,并且可以用于传递任意大块的数据,ASCII或二进制。
在字段描述表中的"Access"列:
1)R:仅读取
2)R/W:允许读和写
3) R/W*:允许读和写;如果记录的SCAN字段设置为"Passive",写触发记录运行。
4)N:不允许访问。
设备地址控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
PORT | R/W | “asyn port” | DBF_STRING | 这个asyn "port"名称。在任何时候可以更改这个字段去连接这个记录到另一个asyn设备。 |
ADDR | R/W | "asyn address" | DBF_LONG | 这个asyn地址。在任何时候可以更改这个字段去连接这个记录到另一个asyn设备。 |
PCNCT | R/W | "port Connect/ Disconnect" | DBF_MENU | 断开或连接这个端口。选项是"Disconnect"和"Connect"。读取的值反映当前是否有一个到一个端口的有效连接。 |
DRVINFO | R/W | "Driver information" | DBF_STRING | 假设asynDrvUser接口存在,一个用asynDrvUser->create()传递给这个驱动程序的字符串。这个驱动程序将更新pasynUser->reason和/或pasynUser->drvUser作为结果。如果pasynUser->reason被更改,则asynRecord REASON字段将被更新。 |
REASON | R/W | "Reason or Command" | DBF_LONG | 一个整数"reason"或"command",它一般用于告诉驱动程序要读取或者写什么项目。当连接到这个驱动程序时,这个值被更新,使用DRVINFO。它在之后在不重连这个驱动程序下被更改。如果REASON被更改,则DRVINFO字段将被设置成一个空字符串。 |
这个asyn记录没有用于输入和输出链接的传统INP或OUT字段。它而是提供了PORT和ADDR字段来允许动态更改这个记录连接到什么asyn设备。
写入PORT,ADDR或DRVINFO字段使得这个asyn记录从当前设备断开连接并且连接到指定的asyn端口和地址。这允许单个asyn记录被用于控制任何asyn设备。写到这些字段不会引起执行任何I/O。
注意:由于写到PORT,ADDR或DRVINFO字段,引起这个记录自动尝试连接这个端口,通常不需要写入PCNCT字段来连接到这个端口。PCNCT字段对确定端口是否连接或者用于根据需要执行一次断开有用。
输出/输出控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
VAL | R/W | "Value field (unused)" | DBF_STRING | 这个字段没被使用。通常在很多记录中分配给VAL字段的功能由这个asyn记录中AOUT,BOUT,AINP,I32OUT,I32INP,UI32INP,F64OUT和F64INP字段执行。 |
TMOD | R/W | "Transaction mode" | DBF_MENU | 当这个记录被运行时,要执行的I/O事务类型。选项是: "Write/Read"(默认) "Write" "Read" "Flush" "NoI/O" |
IFACE | R/W | “Interface” | DBF_MENU | 接口在这个记录运行时用于I/O传输。选项是: "asynOctet"(默认) "asynInt32" "asynUInt32Digital" "asynFloat64" |
OCTETIV | R | “Octet Is Valid” | DBF_LONG | 根据驱动程序(是,否)支持asynOctet接口,这个字段是(1,0)。 |
I32IV | R | “Int32 Is Valid” | DBF_LONG | 根据驱动程序(是,否)支持asynInt32接口,这个字段是(1,0)。 |
UI32IV | R | "UInt32Digital Is Valid" | DBF_LONG | 根据驱动程序(是,否)支持asynUInt32Digital接口,这个字段是(1,0)。 |
F64IV | R | "Float64 Is Valid" | DBF_LONG | 根据驱动程序(是,否)支持asynFloat64接口,这个字段是(1,0)。 |
OPTIONIV | R | "Option Is Valid" | DBF_LONG | 根据驱动程序(是,否)支持asynOption接口,这个字段是(1,0)。 |
GPIBIV | R | "GPIB Is Valid" | DBF_LONG | 根据驱动程序(是,否)支持asynGPIB接口,这个字段是(1,0)。 |
TMOT | R/W | "Timeout(sec)" | DBF_DOUBLE | 用于读和写操作的超时值(秒为单位)。如果在此时间内没有从设备接收到一个响应,则这个记录设置一个major警报。-1.0表示永远等待,没有超时。默认值=1.0。 |
TMOD字段控制在这个记录运行时执行什么I/O类型。
1) "Write/Read"(默认):输出数据被从所选的输出字段发送到设备。一个响应接着被读回到所选的输入字段。这个响应必须在由TMOT指定的时间内被接收到。对于asynOctet,在写操作前,输入缓存被强制清除,因此在这次写操作前接收的任何字符将被丢弃。Write/Read操作是"原子的",表示在这个写和读操作之间确保没有对此设备的其它asyn I/O。
2) ”Write“:输出源被发送到这个设备。不回读响应。
3) "Read":从设备读取数据到输入字段。响应必须在由TMOT指定时间内被接收到。在这个读取操作前,没有输出被发送给设备。
4) "Flush":输入缓存被强制清除。没有东西被发送给设备或者被从设备读取。仅用于asynOctet。
5) "NoI/O":记录运行,但没有I/O被实际执行。当使用一个asyn记录来仅控制asyn ports的跟踪字段时,这个模式能用作一个安全特性。
asynOctet的输出控制字段
当使用asynOctet接口时,这些字段控制输出I/O(即:当IFACE="asynOctet")。
名称 | 访问 | 提示 | 数据类型 | 描述 |
AOUT | R/W* | ”Output string“ | DBF_STRING | 如果OFMT=”ASCII“,被发送给设备的输出字符串。发送给设备的字节数将是strlen(AOUT)+strlen(OEOS)。 |
BOUT | R/W* | "Output byte data" | DBF_CHAR (数组) | 当OFMT=”Binary“或"Hybrid",被发送给设备的输出数据。这个字段的最大长度由OMAX控制。当OFMT="Hybrid"时,要被发送到设备的实际字节数将是strlen(BOUT)+strlen(OEOS)。当OFMP=”Binary“,要被发送到设备的实际字节数将是NOWT。 |
OEOS | R/W | "Output terminator" | DBF_STRING | 在传输到设备前,被加到输出末尾的一个字符串。如果OFMT=”Binary“,忽略这个字段。设置这个字段为""关闭一个终止符的传输。常用值是"\r"(默认),"\n"和"\r\n"。 |
OMAX | R | "Max. size of output array" | DBF_LONG | BOUT数组的分配长度。在IOC初始化后,这个值不能被更改。默认值=80。 |
NOWT | R/W | "Number of bytes to write" | DBF_LONG | 如果OFMT="Binary",要从BOUT数组发送到设备的字节数。这个值必须少于OMAX。默认值=80。 |
NAWT | R/W | ”Number of bytes actually written“ | DBF_LONG | 在上次写操作中被写的实际字节数。这个字段对所有OFMT模式都有效。这个值不包含输出终止符(如果有)。 |
OFMT | R/W | "Output format" | DBF_MENU | 输出格式。选项是: "ASCII"(默认):从AOUT字段获取发送给设备的数据。 "Hybrid":从BOUT字段获取发送给设备的数据。 "Binary":从BOUT字段获取发送给设备的数据。 |
有两个输出字段,AOUT(ASCII输出)和BOUT(字节输出)。OFMT(输出格式)字段用于选择这些字段一个或另一个作为到设备的输出源。
如果OFMT=”ASCII“,则AOUT字段被dbTranslateEscape()处理,转换控制字符(例如:"\r", "\021")为字节,用strlen()确定了输出的长度,并且使用asynOtect->write发送这个字符串给设备。如果已经设置了一个EOS,这将在末尾添加输出EOS。
如果OFMT="Hybrid",则BOUT字段被dbTranslateEscape()处理,转换控制字符(例如,"\r”, "\021")为字节,用strlen()确定了输出的长度,并且使用asynOctet->write发送这个字符串给设备。如果已经设置了一个输出EOS,这将在末尾添加这个输出EOS。
如果OFMT=“Binary”,则使用asynOctet->write发送来自BOUT字段的NOWT字节给设备。这将不在末尾添加一个输出EOS。
当这个记录连接了端口时,OEOS被设置成这个端口的当前值。如果在记录连接了端口后,修改了OEOS,则将使用asynOctet->setOutputEos更改这个输出EOS。重要:从不使用在数据库文件中OEOS的值,因为当记录连接端口时,它被修改。
asynOctet的输入控制字段
当使用asynOctet接口时,这些字段控制输入I/O(即:当IFACE="asynOctet"时)。
名称 | 访问 | 提示 | 数据类型 | 描述 |
AINP | R | "Input string" | DBF_STRING | 如果IFMT=“ASCII”,从设备读取的输入字符串。这个字符串将是null终结的。注意:由于在EPICS中一个字符串的最大尺寸,输入字符串必须短于40个字符。如果需要更长的字符串,则设置IFMT=“Hybrid”,并且读入到BINP字段。 |
BINP | R | "Input byte data" | DBF_CHAR (array) | 如果IFMT=“Hybrid”或者IFMT="Binary",从设备读取的输入数据。这个字段的最大长度受控于IMAX。从设备读取的实际字节数由NORD给出。 |
IEOS | R/W | “Input terminator” | DBF_STRING | 一个指示在输入上一条消息结尾的字符串。如果不应该使用输入终止符,设置这个字段为""。如果IFMT=“Binary”,忽略这个字段。常用值是"\r"(默认),"\n"和"\r\n"。在读取后从输入删除这个输入终止符。 |
IMAX | R | "Max. size of input array" | DBF_LONG | BINP数组的分配长度。在IOC初始化后,不能更改这个值。默认=80。 |
NRRD | R/W | "Number of bytes to read" | DBF_LONG | 请求尧都区的字节数。这个字段对所有IFMT模式有效。如果这个字段小于<=0,则请求的要读取字节数将是EPICS定义的MAX_STRING_SIZE=40(如果IFMT="ASCII")或IMAX"如果IFMT="Hybrid"或"Binary""。默认=0 |
NORD | R | "Number of bytes read" | DBF_LONG | 在最新一次读取中实际读取的字节数。这个字段对所有IFMT模式有效。这个数目包含输入终止符,如果有。 |
IFMT | R/W | "Input format" | DBF_MENU | 输入格式。选项为: "ASCII"(默认):从设备读取的数据将被放入AINP字段。 “Hybrid”:从设备读取的数据将被放在BINP字段。 “Binary”:从设备读取的数据将被放在BINP字段。 |
TINP | R | "Translated input" | DBF_CHAR (数组) | (取决于IFMT)这个字段将最多包含AINP或BiNP字段的前40个字符,在用epicsStrSnPrintEscaped,转换非打印字符为一个可打印格式的转换后(例如,\r,\n等。) |
有两个输入字段,AINP(ASCII输入)和BINP(字节输入)。IFMT(输入格式)字段用于选择其中一个字段或者另一个字段作为发自设备的数据的目的地。
当满足以下四个条件中任何一个条件时,一个读取操作结束。
1) (如果IFMT="ASCII"或"Hybrid"),输入终止符(IEOS)被找到。
2) EOI被断言(仅GPIB)
3) 所需数目的输入字符(NRRD)被接收。
4) 超时(TMOT)失效
如果IFMT="ASCII",则用asynOctet->read读取输入到AINP字段。这将移除输入EOS字符串(如果有),并且如果可能,AINP将是NULL结尾的。
如果IFMT="Hybrid",则用asynOctet->read读取输入到BINP字段。这将移除输入EOS字符串(如果有),并且如果可能,BINP将是NULL结尾的。
如果IFMT="Binary",则用asynOctet->read读取输入到BINP字段。这将忽略输入EOS。BINP加ing是null终结的。
TINP字段是为了操作显式。它最多包含读取到AINP(如果IFMT=“ASCII”)或BINP(如果IFMT=“Hybrid”或者"Binary")的前40个字符。首先使用epicsStrSnPrintEscaped转换非打印字符为一个可打印格式。此字段通常不应该用来解析来自设备的响应。这是在medm窗口asynRecord.adl中显示为ASCII输入字段的字段。它对显式设备响应有用,即使在"Hybrid"和"Binary"输入模式。
IEOS终止符字段是40个字符长。但,串行驱动最多允许2字符消息结束字符串。GPIB驱动程序仅允许1字符消息结束字符串。
当记录连接到端口,IEOS被设置成这个端口的当前值。如果在记录连接这个端口后,IEOS被修改,则将使用asynOctet->setInputEos更改这个输入EOS。重要:从不使用数据库文件中IEOS的值,因为当这个记录连接到端口时,它被修改。
寄存器接口的输入/输出控制字段
当使用这些寄存器接口时,这些字段控制I/O(即:当IFACE="asynInt32", "asynUInt32Digital"或"asynFloat64")。
名称 | 访问 | 提示 | 数据类型 | 描述 |
I32INP | R | "asynInt32 input" | DBF_LONG | 如果IFACE="asynInt32"并且TMOD="Read"或"Write/Read",从设备读取的输入数据。 |
I32OUT | R/W* | "asynInt32 outpout" | DBF_LONG | 如果IFACE="asynInt32"并且TMOD=“Write”或"Write/Read",发送给设备的数据。 |
UI32INP | R | "asynUInt32Digital input" | DBF_ULONG | 如果IFACE="asynUInt32Digital"并且TMOD=“Read”或"Write/Read",从设备读取的输入数据。 |
UI32OUT | R/W* | "asynUInt32Digital output" | DBF_ULONG | 如果IFACE=“asynUInt32Digital”和TMOD=“write”或"Write/Read",发送给设备的数据。 |
UI32MASK | R/W | "asynUInt32Digital mask" | DBF_ULONG | 如果IFACE="asynUInt32Digital",使用的掩码。此掩码用于写和读操作。仅在掩码中被置位的比特位才在写时被修改,并且在掩码中复位的任何比特位在读时将是0。 |
F64INP | R | "asynFloat64 input" | DBF_DOUBLE | 如果IFACE=“asynFloat64”和TMOD="Read"或"Write/Read",从设备读取的输入数据。 |
F64OUT | R/W* | "asynFloat64 output" | DBF_DOUBLE | 如果IFACE="asynFloat64"和TMOD=“Write/Read”,被发送到设备的数据。 |
串行控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
BAUD | R/W | “Baud rate” | DBF_MENU | 用于端口的波特率。选项是"Unknown", "300", "600", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200", "230400", "460800", "57600", "921600"和"115200"。默认="Unkown"。注意:因为BAUD字段是DBF_MENU类型,所以它被限制于这16个选项。LBAUD字段可以用于选择在BAUD菜单中获取不到的波特率。 |
LBAUD | R/W | "Baud rate (long)" | DBF_LONG | 以整数作为端口的波特率。这个字段允许选择任何波特率,包含在BAUD菜单字段中获取不到的那些波特率。更改BAUD字段将相应地更改LBAUD字段。更改LBAUD字段将更改BAUD字段为合适地菜单选项(如果可能),或者如果那个波特率在菜单中没有,为"Unknow"。 |
PRTY | R/W | "Parity" | DBF_MENU | 设备校验。选是"Unknown", "None", "Event"和"Odd"。默认是=“Unknown”。 |
DBIT | R/W | "Data bits" | DBF_MENU | 数据位数目。选项是"Unknown", "5", "6", "7"和"8"。默认是=“Unknown”。 |
SBIT | R/W | "Stop bits" | DBF_MENU | 停止位数目。选项是"Unknown", "1"和"2"。默认=“Unknown”。 |
MCTL | R/W | "Modem Control" | DBF_MENU | modem控制。选项是"Unkown", "CLOCAL"和"YES"。默认=“Unknown”。 |
FCTL | R/W | “Flow control(cts rts)” | DBF_MENU | 流控。选项是"Unknown", "None"和"Hardware"。Default="Unknown"。硬件表示使用cts(clear to send)和rts(request to send)信号。 |
IXON | R/W | "Output XOFF/XON" | DBF_MENU | XOFF/XON对输出控制。选项是"Unknown", "No"和"Yes"。默认=“Unknown”。如果这个IOC接收到了一个XOFF字段,它在接收到一个XON前,暂停输出。 |
IXOFF | R/W | “Input XOFF/XON” | DBF_MENU | XOFF/XON对输入控制。选项是"Unknown", "No"和"Yes"。默认=“Unknown”。IOC根据需要发送XOFF和XON字段来防止输入到来快于程序读取它。发送输入数据的外部设备必须通过暂停传输来响应一个XOFF字符。 |
IXANY | R/W | “XON=any character” | DBF_MENU | 选项是"Unknown",“No”和"Yes"。默认是"Unknown"。当用XOFF字符已经暂停了输出时,允许任何输入字符来重启输出。否则,仅XON字符才重启输出。这个标记不是在所有系统上可用,包括win32。 |
以上字段用于设置串口参数。对这些字段中任何字段的写引起这个端口参数立即被更改,但不引起任何I/O被执行。当前只能位本地串口设置端口参数,包括在vxWorks上IP-Octal。当前不能为像Moxa单元的以太网/串口适配器设置它们。
如果驱动程序不支持那个选项,对应每个选项的"Unknown"在反馈中被使用。"Unknown"不应该被写入这个字段。
实际可获取的波特率是设备依赖的。杜宇SBS IP-Octal模块,最大波特率是38400。
当进行对端口的连接时,这些记录字段被设置成对应这个端口当前有效的值。重要:从不使用在数据库文件中这些字段的值,当记录连接端口时,它被修改。
vxWorks和MCTL,FCTL。对应vxWorks的sioLib串口使用CLOCAL用于POSIX称为CTSRTS的东西(Clear to send and request to send)。sioLib似乎没有modem控制的任何概念,其是POSIX称为CLOCAL的概念。对于vxWorks,在asynAsynSerialPort.c中提供了asynDriver的标准串口支持,接受MCTL和FCTL。MCTL=(CLOCAL, YES)与FCTL=(None, Hardware)相同。
IP控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
DRTO | R/W | "Disconenct on read Timeout" | DBF_MENU | 选项是"Unknown", "NO"和 "Yes"。默认是"NO"。如果Yes,则IP端口将在一次读取超时时断开连接。 |
HOSTINFO | R/W | "IP port hostinfo" | DBF_STRING | IP端口hostInfo字符串用与drvAsynIPPortConfigure命令相同的语法。即: host:port[:localport] [protocol]。 |
写入HOSTINFO字段将使得drvAsynIPPort驱动程序从当前主机(如果有)断开连接,并且接着尝试连接这个新主机。
如果用COM(RFC 2217)协议创建drvAsynIPPort,则以上列出的串行控制字段能够被用于控制在以太网/串行适配器上的那些设置。
GPIB控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
SPR | R | "Serial Poll Response" | DBF_UCHAR | 设备状态字节,在一个Serial Poll操作过程中读取它。 |
UCMD | R/W* | "Universal command" | DBF_MENU | 要执行的一个GPIB通用命令。选项是: "None" "Device Clear(DCL)" "Local Lockout(LL0)" "Serial Poll Disable(SPD)" "Serial Poll Enable(SPE)" "Unlisten(UNL)" "Untalk(UNT)" |
ACMD | R/W* | "Addressed Command" | DBF_MENU | 要执行的一个GPIB地址命令。选项是: "None" "Group Execute Trig.(GET)" "Go To Local"(GTL) "Selected Dev. Clear(SDC)" "Take Control(TCT)" "Serial Poll" |
GPIB通用命令是被定向到在GPIB总线上所有设备的命令,不仅是地址的命令。如果UCMD字段被设置成除"None"外的任何值,则执行合适的通用命令,并且UCMD被设回"None"。记录运行仅执行通用命令,即:它也不执行由TMOD指示的GPIB操作。
GPIB地址操作命令是仅被定向到在GPIB总线上指定地址的命令。如果ACMD字段被设置成除"None"外的任何值,则合适的地址命令被执行,并且ACMD被设回"None"。记录运行只执行地址命令,即:它也不执行由TMOD指示的GPIB操作。
跟踪控制字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
TMSK | R/W | "Trace mask" | DBF_LONG | asynTraceMask。 |
TB0 | R/W | "Trace error" | DBF_MENU | ASYN_TRACE_ERROR位。选项是"Off"和"On"。 |
TB1 | R/W | "Trace IO device" | DBF_MENU | ASYN_TRACEIO_DEVICE位。选项是"Off"和"On"。 |
TB2 | R/W | "Trace IO filter" | DBF_MENU | ASYN_TRACEIO_FILTER位。选项是"Off"和"On"。 |
TB3 | R/W | "Trace IO driver" | DBF_MENU | ASYN_TRACEIO_DRIVER位。选项是"Off"和"On"。 |
TB4 | R/W | "Trace flow" | DBF_MENU | ASYN_TRACE_FLOW位。选项是"Off"和"On"。 |
TB5 | R/W | “Trace warning” | DBF_MENU | ASYN_TRACE_WARNING位。选项是"Off"和"On"。 |
TIOM | R/W | "Trace I/O mask" | DBF_LONG | asynTraceIOMask |
TIB0 | R/W | "Trace IO ASCII" | DBF_MENU | ASYN_TRACEIO_ASCII位。选项是"Off"和"On"。 |
TIB1 | R/W | "Trace IO escape" | DBF_MENU | ASYN_TRACEIO_ESCAPE位。选项是"Off"和"On"。 |
TIB2 | R/W | "Trace IO hex" | DBF_MENU | ASYN_TRACEIO_HEX位。选项是"Off"和"On"。 |
TINM | R/W | "Trace ifno mask" | DBF_LONG | asynTraceInfoMask |
TINB0 | R/W | "Trace Info Time" | DBF_MENU | ASYN_TRACEINFO_TIME位。选项是"Off"和"On"。 |
TINB1 | R/W | "Trace Info Port" | DBF_MENU | ASYN_TRACEINFO_PORT位。选项是"Off"和"On"。 |
TINB2 | R/W | "Trace Info Source" | DBF_MENU | ASYN_TRACEINFO_SOURCE位。选项是"Off"和"On"。 |
TINB3 | R/W | "Trace Info Thread" | DBF_MENU | ASYN_TRACEINFO_THREAD位。选项是"Off"和"On"。 |
TSIZ | R/W | "TraceIO truncate size" | DBF_LONG | 传给asynTraceSetTraceIOTruncateSize()的参数。这个值被用于限制traceIO打印的I/O字节数。 |
TFIL | R/W | "Trace IO file" | DBF_STRING | 打印跟踪信息到所到文件的名称。 |
以上字段用于控制asynTrace功能。它们允许你打开或关闭打印在shell或写到这个跟踪文件的调试输出。
TMSK字段允许你读/写整个asynTraceMask字。TB0-TB5字段允许你读/写asynTraceMask中单独的位。TIOM字段允许你读/写整个asynTraceIOMask字,而TIB0-TIB2字段允许你读/写asynTraceIOMask中各自位。TINM字段允许你lian个asynTraceInfoMask字,而TINB0-TINB3字段允许你读/写asynTraceInfoMask中单独位。
当用PORT和ADDR字段连接asyn记录到一个新设备时,以上跟踪字段被自动更新来反映当前用于那个设备的asynTrace,asynTraceIO和asynTraceInfo掩码。
TFIL字段用于设置跟踪文件的名称。如果记录没有设置当前文件名,asyn记录确定它是不可能的。在这种情况中,文件名被显示为"Unknown"。设置这个字段为一个字符串文件名(包括可能地来自这个IOC的当前默认目录的有效路径)使得输出被写到那个文件。以下值作为特殊情况被处理:
- <stdout>:写到标准输出。
- <stderr>:写到标准错误。
- <errlog>:使用errlog功能。
连接管理字段
名称 | 访问 | 提示 | 数类型 | 描述 |
AUCT | R/W | "Autoconnect" | DBF_MENU | 设置自动连接选项。选项是"noAutoConect"和"autoConect"。读取的值反映自动连接标记的当前状态,即:从isAutoConnect()返回的值。 |
ENBL | R/W | "Disable/Enable" | DBF_MENU | 禁用或启用这个端口。选项是"Disable"和"Enable"。读取的值反映了这个enabled标记的状态,即:从isEnabled()返回的值。 |
CNCT | R/W | "Connect/Disconnect" | DBF_MENU | 断开或连接设备。选项是"Diconnect"和"Connect"。读取的值返回了连接标记的当前状态,即:从isConnected()返回的值。 |
错误状态字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
ERRS | R | "Error status" | DBF_STRING | 最近操作的错误状态字符串。在每次连接和I/O操作开始,这个字符串被设置成""(null string)。 |
AQR | W | "About queueRequest" | DBF_CHAR | 取消queueRequest。如果一个process请求已经被排队,但未被派送,它被取消,记录被置入警报并且记录完成发生了。 |
在包括跟踪和连接管理操作的每次操作开始,ERRS字段被设置成""(null string)。它包含了这个记录用asynPrint(...ASYN_TRACE_ERROR...)写的任何错误消息的前100个字符。
标准的EPICS记录字段STAT(status)和SEVR(severity)用于报告I/O错误状态。例如,状态字段可能被设置成NO_ALARM, WRITE, READ或COMM,而SEVR字段可能被设置成NO_ALARM, MINOR, 或MAJOR。这些警报字段仅用于报告在连接一个新PORT或ADDR时的I/O错误。它们不受跟踪或连接管理操作的影响。
私有字段
名称 | 访问 | 提示 | 数据类型 | 描述 |
IPTR | N | "Input buffer pointer" | DBF_NOACCESS | 指向对应BINP字段缓存的指针 |
OPTR | N | “Output buffer pointer” | DBF_NOACCESS | 指向对应BOUT字段缓存的指针 |
记录运行
asyn记录运行,即:根据EPICS记录的正常规则,执行由TMOD给出的I/O操作。AOUT,BOUT,I32OUT,UI32OUT和F64OUT字段是过程被动的,因此如果这些字段被写入并且这个记录SCAN字段是Passive。这个记录的扫描字段可以被设置为任何周期扫描速率(例如:"1 second"),为事件运行的"Event",或者I/O中断运行的"I/O Intr"。
提供回调的驱动程序完全支持"I/O Intr”扫描。
如果SCAN字段是“I/O Intr”,如果以下任何字段被修改:PORT,ADDR,DRVINFO, REASON, IFACE或UINT32MASK,它将被更改为"Passive"。这是必要的,因为对这些字段的更改需要再次注册这个中断源。
废弃的串行和GPIB记录
asyn记录被设计成完全替代更老的通用串行("serial")和通用的GPIB(“gpib”)记录。不再需要这些记录,并且在未来将不受支持。以下是一个列表,老的串行和GPIB记录和新的asyn记录之间的差别的列表,它需要对数据库或应用程序进行修改。
- ODEL字段被OEOS替代。 为了支持多字符终止符,它从一个DBF_LONG变成了DBF_STRING。
- IDEL(串行)和EOS(gpib)字段被IEOS替代。为了支持多字符终止符,它们从一个DBF_LONG变成了DBF_STRING。
- 为了支持运行时连接不同设备,INP字段被PORT和ADDR字段替代。
- 在发送到设备前,AOUT和OEOS字段被dbTranslateEscape处理。在很少情况,如果这些包含"\"字符,这可能需要更改输出字符串。
- 当记录运行时,asyn记录总是提交在输入字段(AINP或BINP)上的监视器。如果这个值与前次读取相同,更老的记录不提交AINP上的monitors。这产生某些SNL程序和数据采集程序的问题。
- 即使OFMT或IFMT处于"Binary"模式,ODEL和IDEL字段被使用。当OFMT或IFMT格式位于"Binary"模式,OEOS和IEOS现在被忽略。
- TMOT字段被从DBF_LONG或DBF_DOUBLE,单位从毫秒更为秒。TMOT=-1.0表示永远等待。
medm窗口
以下是提供给asyn记录的medm窗口的截图。
主控制窗口asynRecord.adl
asynOctet I/O窗口asynOctet.adl
asyn register device I/O窗口asynRegister.adl
窗口设置窗口asynSerialPortSetup.adl
IP port setup窗口asynIPPortSetup.adl
GPIB设置窗口asynGPIBSetup.adl