<< 点击显示目录 >> 主页 PVI通信 > PVI帮助信息 > PVI base system > 诊断 > Data logger |
PVI数据记录器是诊断PVI组件中序列的一个有用工具。
与快照功能不同,数据记录器记录了各个PVI层中的进程时间。PVI组件的记录输出主要是供B&R分析问题。然而,一些组件的输出也可以为用户提供有用的信息。
PVI组件在运行期间使用数据记录器将文本(ASCII)信息写入一个文件。这个文件被当作一个环形缓冲区来处理。这意味着。如果在写入时达到了文件的末端,那么写入指针就被设置为零,并从文件的开头继续输出。环形缓冲区的大小与可调的文件大小相对应。每个PVI组件都使用自己的日志文件。与每个记录器条目一起给出的时间戳提供了不同文件中条目的时间概览。
记录器输出需要相当多的计算时间。根据输出的信息量,数据记录器会大大影响PVI组件的时间。正因为如此,当PVI管理器启动并启用数据记录器时,屏幕上会出现一个警告。这个警告不能被关闭。
PVI数据记录器是通过Windows注册表数据库控制的,可以用PVI监视器进行配置。记录器参数的方法和效果在 设置数据记录器 一节中描述 。默认情况下,数据记录器对所有组件都是禁用的。
可以在 "HKEY_LOCAL_MACHINE\SOFTWARE\BR_Automation\Pvi\DataLogger "键下为每个有记录器输出的PVI组件创建一个组件键。组件键的名称由进程上下文、组件的文件名和一个可选的部分组成。组件的记录器设置被存储在这些单独的键中。
具有记录器输出的PVI组件可以在 "具有记录器输出的PVI组件"表中找到。
下面是PVI数据记录器的所有注册表项的概述。
DataLogger
--> Mode ... global Logging-Mode
--> Time ... global Timestamp format
--> Verbose ... global Verbose-Mode
--> <Component> ... Key: Logging component
--> Mode ... Logging-Mode
--> Time ... Timestamp format
--> Verbose ... Verbose-Mode (0/1)
--> LineLen ... maximum length of a text line in characters
--> DumpLen ... maximum length of a hex dump output in bytes
--> LogPath ... Path of logger file
--> LogSize ... Size of the logger file in bytes
--> LogBackup ... Number of logger backup files
--> BreakMode ... Break function (0/1)
--> BreakTime ... Break delay
--> BreakStr ... break expression
注册表文件的例子
[HKEY_LOCAL_MACHINE\SOFTWARE\BR_Automation\Pvi\DataLogger]
"Mode"=dword:00000000
"Time"=dword:00000001
"Verbose"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\BR_Automation\PVI\DataLogger\PviDemo.exe/PviCom.dll/Client]
"Mode"=dword:00000002
"Time"=dword:00000002
"Verbose"=dword:00000001
"LineLen"=dword:00000200
"DumpLen"=dword:00001000
"LogPath"="C:\\Temp\\PviLog\\PviDemo_Cl.log"
"LogSize"=dword:000a0000
"LogBackup"=dword:00000001
"BreakMode"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\BR_Automation\PVI\DataLogger\PviMan.exe]
"Mode"=dword:00000003
"Time"=dword:00000002
"Verbose"=dword:00000001
"LineLen"=dword:00000200
"DumpLen"=dword:00001000
"LogPath"="C:\\Temp\\PviLog\\PviMan.log"
"LogSize"=dword:00100000
"LogBackup"=dword:00000000
"BreakMode"=dword:00000001
"BreakTime"=dword:000003e8
"BreakStr"="Ty=11"
下表列出了支持数据记录器的最重要的PVI组件。与粗略模式一起,记录模式决定了记录器的输出范围。
Component |
Description |
<Prog>/PviCom.dll/Client or <Prog>/PviCom64.dll/Client
|
PVICOM用户界面的记录器输出。 记录模式 "记录错误"。 所有发生的系统错误和报告给应用程序的错误都被记录下来。 记录模式 "Log Main"。 记录PVICOM用户界面的所有功能调用和被触发的用户信息。此外,所有数据的十六进制转储将以粗略模式输出。 日志模式 "日志细节"。 与PVI管理器的通信从客户端的角度被记录下来。 应用程序进程的完整文件名被用于<Prog>。注册的 PVI 应用程序的名称也可以从 快照文件的通信实例列表中获取 。 |
PviMan.exe |
PVI管理器的默认记录器输出 。 记录模式为 "记录错误"。 所有在执行请求时发生的系统错误都会与报告给应用程序的错误一起被记录下来。 日志模式 "Log Main"。 所有来自PVI应用的请求、响应和事件都被记录下来。此外,所有数据的十六进制转储都是以粗略模式输出的。 记录模式 "记录细节"。 从PVI管理器的角度记录与连接线的通信。 |
PviMan.exe/System |
PVI管理器的系统记录器输出。 记录模式 "记录错误"。 所有发生在PVI管理器的操作系统功能中的系统错误都被记录下来。 记录模式 "Log Main"。 在初始化或去初始化过程中,以及作为NT服务运行时,记录操作系统功能的程序流程。对作为Windows NT服务的安装和卸载进行记录。 |
PviMan.exe/LnAnsl.dll |
ANSL行的记录器输出。 记录模式 "记录错误"。 对ANSL行内发生的错误进行记录。 记录模式 "Log Main"。 对线路/PVI管理器接口(线路接口)和ANSL连接管理进行日志记录。此外,所有数据的十六进制转储都是以粗略模式输出的。 日志模式 "日志细节"。 也记录内部管理数据的顺序(模块列表、链接节点列表等),以及最重要的ANSL接口信息。此外,所有数据的十六进制转储也会在粗略模式下输出。 |
PviMan.exe/LnAnsl.dll/Ansl |
ANSL行中的ANSL接口的记录器输出。 记录模式 "记录错误"。 对ANSL接口内发生的错误进行记录 记录模式 "Log Main"。 对ANSL接口的服务进行记录,但变量服务除外。 在粗略模式下,所有的服务参数以及服务数据的十六进制转储也会显示。 日志模式 "日志细节"。 对所有ANSL接口服务进行记录。在粗略的模式下,所有的服务参数以及服务数据的十六进制转储也会被显示。 |
PviMan.exe/LnAnsl.dll/Objects |
ANSL线路的记录器输出,用于识别线路和ANSL对象。 该记录器输出只记录行对象和ANSL对象的创建和关闭。 记录模式 "记录错误"。 对设置对象时发生的错误进行记录 日志模式 "Log Main"。 对外部行对象和相应的ANSL对象进行日志记录 日志模式 "日志细节"。 对所有行对象和所有ANSL对象进行日志记录。 行对象和ANSL对象由ANSL行的记录器输出内的识别号定义(PviMan.exe/LnAnsl.dll和PviMan.exe/LnAnsl.dll/Ansl)。对创建过程进行记录,可以使识别号与它的对象名称相匹配。但是,如果这个程序被记录仪文件中的其他记录仪输出所覆盖,那么这个选项就无法实现。出于这个原因,ANSL行可以另外将创建和关闭程序记录到一个单独的记录仪文件中。 |
PviMan.exe/LnNet2.dll |
NET2000行的记录器输出。 记录模式 "记录细节"。 变量识别(GetOV)被记录。 |
PviMan.exe/Net2000.dll |
NET2000行的记录器输出(状态机)。 记录模式 "记录错误"。 NET2000状态机报告的错误被记录下来。 记录模式 "记录细节"。 状态机的函数调用被记录下来。此外,在粗略模式下还会输出有效载荷的十六进制转储。 |
PviMan.exe/LnIna2.dll |
INA2000线路的记录器输出。 记录模式 "记录细节"。 内部程序流被记录下来。此外,所有传输到 ICOMM 的数据的十六进制转储,以粗略模式输出。 |
PviMan.exe/IComm.dll |
INA2000线(ICOMM)的记录器输出。 记录模式 "记录细节"。 内部程序流程被记录下来。 |
PviMan.exe/InaFrms.dll/<Dev> |
INA框架库的记录仪输出。 记录模式 "记录错误"。 所有发生的系统和通信错误都被记录下来。 记录模式 "Log Main"。 所有框架接口的函数调用都被记录下来。此外,所有框架数据的十六进制转储也会在verbose模式下输出。 INA框架库用于传输来自NET2000、INA2000、Direct CAN和MININET线路的日志数据。<Dev>使用相应的设备名称(如COM1、INACAN3、TCPIP等)。如果在与INACAN或DCAN设备的连接中使用了数值不等于0(空)的"/CNO "参数,那么必须将'.'字符(句号)和设备名称的数值连接起来(例如,"/IF=INACAN2 /CNO=1",结果是<Dev>:"INACAN2.1")。 |
PviMan.exe/DvTcpIp.dll/<Dev> |
INA框架TCP/IP设备库的记录器输出。 记录模式为 "记录错误"。 所有发生的系统和通信错误都被记录下来。 记录模式 "Log Main"。 对框架接口的所有功能调用进行记录。 日志模式 "记录细节"。 网络通信被记录下来。此外,在verbose模式下,发送和接收的帧的hex dump被输出。 INA框架的TCP/IP设备库是INA框架库(InaFrms)的一部分。相应的TCP/IP设备名称用于<Dev>(见INA帧库的描述)。 |
PviMan.exe/DvInaCan.dll/<Dev> |
INA帧INACAN设备库的记录仪输出。 记录模式为 "记录错误"。 所有发生的系统和通信错误都被记录下来。 记录模式 "Log Main"。 对框架接口的所有功能调用进行记录。 记录模式 "记录细节"。 CAN通信被记录下来。此外,所有发送和接收的CAN报文的十六进制转储被输出到verbose模式中。 INA框架INACAN设备库是INA框架库(InaFrms)的一部分。相应的INACAN设备名称用于<Dev>(参见INA帧库的描述)。 |
PviMan.exe/DvDCan.dll/<Dev> |
INA帧DCAN设备库的记录仪输出。 记录模式 "记录错误"。 所有发生的系统和通信错误都被记录下来。 记录模式 "Log Main"。 所有框架接口的功能调用都被记录下来。 INA框架DCAN设备库是INA框架库(InaFrms)的一部分。相应的DCAN设备名称用于<Dev>(见INA帧库的描述)。 |
PviMan.exe/LnSnmp.dll |
SNMP行的记录器输出。 记录模式 "记录错误"。 所有发生的系统错误和SNMP库报告的错误都被记录下来。 记录模式 "Log Main"。 SNMP库的所有函数调用都被记录下来。 日志模式 "Log Details"。 对象信息被记录下来。此外,在verbose模式下还会输出一个十六进制的数据转储。 |
PviDDE.exe |
DDE服务器的记录器输出。 记录模式 "Log Main"。 DDE接口被记录下来。 |
请注意,"Log Main "也会激活 "Log Error",而 "Log Details "会同时激活 "Log Main "和 "Log Error"。
PVI数据记录器主要用于B&R分析问题。由于这个原因,记录器的大部分输出是指内部程序序列或内部PVI组件状态。然而,一些记录器的输出可以由用户解释。这样,"PviMan.exe "组件(记录模式("Log Main"))和"<Prog>/PviCom.dll/Client "组件(记录模式 "Log Main")就可以被用户用来分析与 PVICOM接口有关的问题 。组件 "PviMan.exe/InaFrms.dll/<Dev>"(日志模式 "Log Error")可用于分析与PLC通信有关的问题。
组件"<Prog>/PviCom.dll/Client "和 "PviMan.exe " 的记录器输出,以及PVI线,定义了 具有明确识别号 的PVI对象 。 快照功能 可以用来协调识别号和对象名称之间的分配。应该注意的是,给出识别号是在对象被设置时进行的。如果这个对象被释放,然后再次被设置,那么识别号也可以被改变。
每个日志条目都在一个新的行上开始,并有以下标记之一。
">" |
在 "日志错误 "记录模式下的输出 |
">>" |
在 "日志主 "记录模式下的输出 |
">>>" |
在 "日志细节 "日志模式中输出 |
标记后面总是有一个空格和时间戳。实际的日志信息会在一个额外的空格后输出。
日志状态的变化用序列 "##"标识,后面是相应的文字和组件的名称。
### start trace |
记录仪输出在组件运行时被启动(在线)。 |
### change trace |
记录仪模式在组件运行时被改变 |
### stop trace |
记录仪输出在组件运行时被停止 |
### begin trace |
记录仪输出与组件一起启动 |
### end trace |
记录仪输出与组件一起结束 |
### break trace |
记录仪输出通过取消功能自动停止 |
"###开始跟踪 "和 "###开始跟踪 "记录仪条目定义了记录仪记录的开始时间。然而,数据记录器处理记录器文件就像处理一个环形缓冲区。如果记录时间过长,记录仪记录的开头可能会被覆盖。"###停止跟踪"、"###结束跟踪 "和 "###中断跟踪 "记录仪条目定义了记录仪记录的结束时间。这些标签中几乎总有一个会出现。然而,如果程序崩溃,数据记录器不能输出任何这些 "结束标记"。在这种情况下,必须使用时间戳来确定最后的记录仪条目。
例如。
>> 10:36:26.560 ### begin trace PVIDEMO.EXE/PviCom.dll/Client
...
>> 10:39:42.920 ### end trace PVIDEMO.EXE/PviCom.dll/Client
PVI管理器和PVICOM接口的记录器输出。
对象属性由 对象描述中的参数表示 。其他信息则使用单独的参数。其中一些参数(如识别号)也会在 快照文件中输出 。
下表显示了最重要的记录器参数。
Parameter |
描述 |
C=<ID> |
链接对象的识别号(ID)。 |
P=<ID> |
过程对象的识别号(ID)。 |
S=<ID> |
服务对象的识别号(ID)。 |
CId=<ID> |
注册通信实例(客户端)的识别号(ID) |
RId=<ID> |
请求和响应数据的识别号(ID)。 |
L=<ID> |
行内指定对象的识别号(ID)。 |
Pn=<PathName> |
进程或服务对象的路径名称 |
E=<Code> |
PVI错误代码。也可以用 "E=0 "发出 "无错误 "状态的信号。 |
SysE=<Code> |
系统错误代码(一般Windows错误代码) |
SockE=<Code> |
Windows套接字错误代码 |
Ty=<Type> |
PVI 访问类型 (数字) |
Md=<Mode> |
PVI功能模式,数字或字符串("WR":写,"RD":读)。 |
Dl=<Length> |
PVI请求、响应或事件数据的数据长度 |
Ih=<Handle> |
PVICOM 通信实例的手柄 |
Ot=<Type> |
作为数字值的PVI 过程对象类型 |
OT=<Type> |
作为字符串的PVI 过程对象类型 (Pvi, Line, Device, Station, Cpu, Module, Task, Pvar) |
St=<Status> |
响应或事件数据的PVI状态标志(位)(RESPONSE_INFO结构)。 |
Msg=(<Msg>) |
响应 或事件数据信号的用户消息 Windows消息。W:<WindowHandle>,<MessageNumber>, <MessageParameter>。 信息功能。F:<MessageHandle>, <MessageParameter> 带数据的回调。CBD:<CallbackPointer>, < MessageParameter> 没有数据的回调。CB:<CallbackPointer>,<MessageParameter>。 异步回调。CBA:<CallbackPointer>, <MessageParameter> 如果没有定义用户信息,则输出 "Msg=(NULL)"。 |
CDesc=(<Par>) |
指定 链接对象的描述 |
PDesc=(<Par>) |
指定 过程对象的描述 |
Len=<Num> |
长度(一般) |
Offs=<Num> |
偏移量(一般) |
Ev=<Flags> |
行中事件的启用掩码。 |
Svc=<Mode> |
线路服务("RD"、"WR"、"IDENT"、"INFO")。 |
CdP=<ID> |
连接描述的过程对象的识别号 |
FrP=<ID> |
数据格式的过程对象标识号(仅适用于变量对象)。 |
HyP=<ID> |
滞后的过程对象的识别号(仅适用于可变对象)。 |
PVI管理器的日志条目("PviMan.exe "组件)以 "Comm "标签开头,表示PVI管理器(服务器)和PVICOM通信实例(客户)之间的通信。
"Comm.Event" |
发送事件数据 |
"Comm.ReadRequ" |
接收读取请求的请求数据 |
"Comm.ReadResp" |
为读请求发送响应数据 |
"Comm.WriteRequ" |
接收写请求的请求数据 |
"Comm.WriteResp" |
发送写请求的响应数据 |
"Comm.CreateRequ" |
接收 "设置过程对象 "请求的请求数据 |
"Comm.CreateResp" |
发送 "设置过程对象 "请求的响应数据 |
"Comm.LinkRequ" |
接收 "设置链接对象 "的请求数据 |
"Comm.LinkResp" |
发送 "设置链路对象 "请求的响应数据 |
"Comm.ChgLinkRequ" |
接收 "更改用户信息 "的请求数据 |
"Comm.ChgLinkResp" |
发送 "更改用户信息 "请求的响应数据 |
"Comm.UnlinkRequ" |
接收 "释放链路对象 "的请求数据 |
"Comm.UnlinkResp" |
发送 "释放链接对象 "请求的响应数据 |
"Comm.UnlinkAllRequ" |
接收 "释放所有链接对象 "的请求数据 |
"Comm.UnlinkAllResp" |
发送 "释放所有链接对象 "请求的响应数据 |
"Comm.DeleteRequ" |
收到 "删除进程对象 "的请求数据 |
"Comm.DeleteResp" |
为 "删除进程对象 "请求发送响应数据 |
"Comm.ClientAttach" |
注册一个通信实例 |
"Comm.ClientDetach" |
取消注册一个通信实例 |
可以用 "CId "或 "C "参数与 "RId "参数一起分配请求和响应数据。
例子。
>> 12:00:14.340 Comm.WriteRequ Ty=11 C=0010 RId=80000018 Dl=2
>> 12:00:14.390 Comm.WriteResp Ty=11 C=0010 RId=80000018 Dl=0
>> 12:00:15.040 Comm.CreateRequ CId=2d370003 RId=80000003 Name='@Pvi/LNINA2' OT=Line
>> 12:00:15.040 Comm.CreateResp C=000b CId=2d370003 RId=80000003
DI "参数指定了请求和响应数据被写入或读取时的传输字节数。
PVICOM接口("<Prog>/PviCom.dll/Client "组件)记录了所有的用户函数调用。
"Initialize" |
调用 PviInitialize 或PviXInitialize函数 |
"Deinitialize" |
调用 PviDeinitialize 或PviXDeinitialize函数 |
"SetGlobEventMsg" |
调用 PviSetGlobEventMsg 或PviXSetGlobEventMsg函数 |
"CreateRequest" |
调用 PviCreateRequest 或PviXCreateRequest函数 |
"CreateResponse" |
调用 PviCreateResponse 或PviXCreateResponse函数 |
"DeleteRequest" |
调用 PviDeleteRequest 或PviXDeleteRequest函数 |
"DeleteResponse" |
调用 PviDeleteResponse 或PviXDeleteResponse函数 |
"LinkRequest" |
调用 PviLinkRequest 或PviXLinkRequest函数 |
"LinkResponse" |
调用PviLinkResponse 或PviXLinkResponse函数 |
"UnlinkRequest" |
调用 PviUnlinkRequest 或PviXUnlinkRequest函数 |
"UnlinkResponse" |
调用 PviUnlinkResponse 或PviXUnlinkResponse函数 |
"ChgLinkRequest" |
调用 PviChgLinkRequest 或PviXChgLinkRequest函数 |
"ChgLinkResponse" |
调用PviChgLinkResponse 或PviXChgLinkResponse函数 |
"UnlinkALL" |
调用 PviUnlinkAll 或PviXUnlinkAll函数 |
"ReadRequest" |
调用 PviReadRequest、PviXReadRequest、 PviReadArgumentRequest 或PviXReadArgumentRequest函数 |
"ReadResponse" |
调用 PviReadResponse 或PviXReadResponse函数 |
"WriteRequest" |
调用 PviWriteRequest 或PviXWriteRequest函数 |
"WriteResponse" |
调用 PviWriteResponse、PviXWriteResponse、 PviWriteResultResponse 或PviXWriteResultResponse函数 |
"GetResponseInfo" |
调用 PviGetResponseInfo 或PviXGetResponseInfo函数 |
对于用户函数,在进入函数后和离开函数前会输出一个日志条目。同步函数的变体由每个匹配的请求或响应函数表示。
用户消息 的执行也被记录 下来。
"Call" |
在调用一个回调用户函数之前 |
"Return" |
从回调用户函数返回之后 |
"Send" |
窗口信息已被发送 |
写方面的例子。
>> 12:00:14.340 WriteRequest Ih=0 C=0010 Ty=11 Dl=2
>> 12:00:14.340 WriteRequest OK
...
>> 12:00:14.390 Send W:00000974,1027,1001 RId=80000018
>> 12:00:14.420 WriteResponse Ih=0 RId=80000018
>> 12:00:14.420 WriteResponse OK C=0010 Ty=11 E=0 Dl=0
事件数据的例子。
>> 12:00:14.365 Send W:00000974,1026,1007 RId=8000005a
>> 12:00:14.378 ReadResponse Ih=0 RId=8000005a
>> 12:00:14.378 ReadResponse OK C=0013 Ty=11 E=0 Dl=7