tag 标签: 虹科

相关博文
  • 热度 33
    2018-8-30 16:15
    4109 次阅读|
    0 个评论
    带图完整文章:http://www.hongketest.com/portal.php?mod=view&aid=57 本文以Active Technologies公司(简称AT)的PG 1000系列脉冲发生器为例,讲述了在进行SCPI控制仪器前,如何使用NI MAX进行系统配置。 1. 概要 可以连接仪器至用户的网络中,实现打印、文件共享、互联网访问等其他功能。请联系贵公司的网络管理员,并使用标准 Windows 在用户的网络中配置仪器。 仪器是通过 VXI-11 (LAN) 协议 进行控制的,用户可以利用 SCPI 命令远程控制仪器,请参考《 Pulse Rider PG-1000 programmer manual 》 了解详细的 SCPI 命令语法、语句。 2. 工具 / 准备 2.1 PG-1000 系列 SDK 1. 用户在 www.activetechnologies.it 网站注册账户后,登录网站并“ Register ”仪器。 2. 点击“ Support ”—“ Client Area ”,访问“ Users Products ”界面。 3. 点击 AT-PG1072 或 AT-PG1074 链接,访问下载界面。点击 SDK-AT-PULSE-GENERATOR 安装包并下载。 SDK 内包括: AT Instrument Communicator 安装程序 (用途,参考下节“配置系统”的第 9 步) C++ 例程 C# 例程 LabVIEW 例程 2.2 NI VISA 在 Client-PC (即 Remote PC )中 下载 并安装 NI VISA 。 VI SA 为硬件 与开发环境(比如, Visual Studio .NET 、 LabVIEW 、 LabWindows/CVI 、 Measurement Studio for Microsoft Visual Studio 、 MatLab 等)提供编程接口。 NI VISA 是 National Instruments 公司提供的 VISA I/O 标准。 NI VISA 包括软件库、交互式工具(例如, NI I/O Trace 与 VISA 交互式控制)、配置程序等。 2.3 NI NAX ( Measurement & Automation Explorer ) 在 Client-PC (即 Remote PC )中 下载 并安装 NI MAX 软件。 2.4 PG-1000 系列软件 打开 PG-1000 系列仪器中自带的控制软件,找到“ Remote/Local ”界面中的 VXI-11 ( LAN 协议) Server 。默认情况下, VXI-11 Server 是开启的,意味着 PG1000 系列仪器可以接收来自 Client-PC 的 SCPI 命令。 当 PG-1000 系列仪器接收 SCPI 命令时, PG-1000 系列软件界面会根据 SCPI 命令做出相应的变化(例如,参数设置等)。 注意: 不能在本地 PC (即 PG-1000 系列仪器本身中的 PC 系统)中通过 SCPI 命令控制 PG-1000 系列仪器。 若 VXI-11 Server 被关闭, SCPI 命令通信将会失败。 3. 配置系统(使用 NI MAX ) 使用 NI MAX 进行如下配置: 1. 使用 LAN 线缆连接仪器与 Client-PC 。 2. 在 Client-PC 中安装 NI VISA 与 NI MAX 。 3. 打开 Client-PC 中的 NI MAX 。点击“ Add Network Device ”——“ VISA TCP/IP Resource… ”。 4. 选择“ Auto-detect of LAN Instrument ”,并点击“ Next ”。 5. 面板将会显示在 LAN 网络中搜索到的仪器,选择 PG-1000 系列仪器,并点击“ Next ”。 6. 输入“ Alias ”(此步非必须,可省略),并点击“ Next ”。 7. 点击“ Finish ”。 8. PG-1000 仪器资源将会在“ Network Devices ”列表中显示。 9. 现在,可以使用 NI Visa Test Panel 或 AT Instrument Communicator (软件的获取下载,参考“ PG-1000 系列 SDK ”小节的第 3 步;软件的使用,参考下节“使用 AT Instrument Communicator 调试系统”)发送 SCPI 命令至 PG-1000 。 4. 调试系统(使用 AT Instrument Communicator ) VXI-11 ( LAN 协议) Server 可以为在同一 LAN 网络下的 PG-1000 仪器与 Client-PC 提供软件接口。 AT Instrument Communicator 软件 需安装在 Client-PC 中,且 Client-PC 中需安装 NI VISA 。 通过以下步骤,操控 Client-PC 中 AT Instrument Communicator 软件实现对 PG-1000 仪器的控制: 1. 在 Client-PC 中安装 AT Instrument Communicator 软件。 2. 在“ Device ”列表中选择 PG-1000 系列仪器。 3. 点击“ Connect ”按钮。 4. 若连接成功, “ Command ” 复选框内的“ Write ”、“ Read ”等按钮将会可选(非灰色) 5. 在“ Command ”文本框内输入 *IDN? 并点击“ Write ”按钮。 6. 点击“ Query ”按钮。 7. 在“ Event Logger ”列表中, PG-1000 系列仪器会显示返回值,例如: ACTIVE TECHNOLOGIES, AT-PULSE-RIDER PG1072 00000001,SCPI 99.0, SV 1.0.0 where 00000001 is the serialnumber, SCPI 99.0 is the SCPI command version and SV 1.0.0 is the software version. 8. TXT 命令脚本 ( script )文件包括一系列 SCPI 命令(每行一条命令),用户可以发送 TXT 命令脚本文件。点击“ File ”—“ Open ”打开加载 TXT 命令脚本文件对话框。 9. 参考《 Pulse Rider PG-1000 programmer manual 》了解详细的 SCPI 命令语法、语句。 5. 例程 / 范例 PG-1000 系列 SDK 中包含由很多种语言编写的例程,例如 LabVIEW 、 Microsoft Visual C++ 与 Microsoft C# .NE 语言。 例程可以在安装了 NI VISA 并兼容 Microsoft Windows® 的 PC 上运行。 NI VISA 是 National Instruments 公司提供的 VISA I/O 标准。 NI VISA 包括软件库、交互式工具(例如, NI I/O Trace 与 VISA 交互式控制)、配置程序等。 在软件中使用 NI VISA 编写的仪器驱动,可以处理软件应用程序与硬件仪器之间的通信。 可 下载 并安装 NI VISA 。 例程假设 系统已经识别 PG-1000 系列仪器 的 资源名称( resource name ),即 IP 地址或主机名称,可参考前文“配置系统”小节了解资源名称( resource name )。 5.1 LabVI EW LabVIEW 例程要求最低使用 LabView 2013 64 bit 版本,可在 …\LabView 2013 Examples\AT-PULSE-RIDER-PG1000 Series 文件夹内找到 LabVIEW 工程。 LabVIEW 工程中包含一些 VI 用于控制仪器的基础特性,还包含有三个例程。 双击 GenerateSinglePulse.vi ,本例程可以连续模式生成单脉冲。在运行 VI 之前,需要选择“ VISA resource name ”。 用户可以更改脉宽、延时、高电平、低电平和其他输出参数。 运行 VI 开始生成输出脉冲,点击“ Stop ”按钮控件停止 PG-1000 系列脉冲发生器。 5.2 Microsoft C# 可以在 …\VS2015 Examples\PulseRiderCSharp 文件夹内找到 C++ 例程,需要安装 Microsoft Visual Studio 2015 打开例程。 用户需要编译并运行例程;在 Form 中需要输入“ Instrument Address ”并点击“ Connect ”按钮建立连接。 若成功连接,仪器会在“ Server Answer ”文本框内显示 *IDN ?命令的返回值。 点击“ Generate Pulse ”按钮发送 SCPI 命令至 PG-1000 系列仪器,仪器将会以连续模式生成输出单脉冲。 private void btnGeneratePulse_Click( object sender, EventArgs e) { // Reset to default tbAnswer.Text = vs.SendTo(sInstrumentAddress, "*RST" ); // Set the channel parameters tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:VOLT:HIGH 1.5" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:VOLT:LOW -1.5" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:VOLT:HIGH 2" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:VOLT:LOW -2" ); // Set the pulse parameters tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:PULSe1:WIDth 50 ns" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce1:PULSe1:DELay 0" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOURce2:PULSe1:WIDth 50 ns" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "SOUrce2:PULSe1:DELay 50 ns" ); // Set the pulse mode tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut1:PULSe:MODe SINgle" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut2:PULSe:MODe SINgle" ); // Turn On the channels tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut1 ON" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "OUTPut2 ON" ); // Set the trigger mode and arm the instrument tbAnswer.Text = vs.SendTo(sInstrumentAddress, "TRIGger:MODE CONTinuous" ); tbAnswer.Text = vs.SendTo(sInstrumentAddress, "PULSEGENControl:START" ); // Send the trigger tbAnswer.Text = vs.SendTo(sInstrumentAddress, "*TRG" ); } 点击“ Load Script… ”按钮可加载 SCPI 命令 TXT 脚本文件;在工程目录文件夹内有三个脚本文件: GenerateSinglePulse.txt 、 GenerateMultiplePulse.txt 、 GeneratePulseTriggerIN.txt 。 5.3 Microsoft C++ 可以在 …\ VS2015 Examples\PulseRiderMSVC\TCPIP 文件夹内找到 C++ 例程,例程是使用 Microsoft® Visual C++ 语言编写的。 /*********************************************************************/ /* This example demonstrates opening a simple TCPIP connection and */ /* implements a single pulse generation in Continuous Mode. */ /* */ /* The general flow of the code is */ /* Open Resource Manager */ /* Open a session to the TCP/IP site at NI */ /* Perform write/read, and check properties */ /* Close all VISA Sessions */ /*********************************************************************/ #include "visa.h" #include #include #include static char outputBuffer ; static ViSession defaultRM, instr; static ViStatus status; static ViUInt32 count; static char acBuffer = "" ; static unsigned int u32Timeout = 20000; //timeout value in milliseconds static const char acInstrument = 0; if 0) { printf( "The server response is:\n %s\n\n" ,outputBuffer); } return status; } int main() { int iIndex = 0; FILE* pFile = NULL; ViFindList objFindList; /* First we will need to open the default resource manager. */ status = viOpenDefaultRM (&defaultRM); if (status < VI_SUCCESS) { printf( "Could not open a session to the VISA Resource Manager!\n" ); exit (EXIT_FAILURE); } status = viFindRsrc (defaultRM, "?*INSTR" , &objFindList, &count, outputBuffer); if (status < VI_SUCCESS) { viStatusDesc(instr, status, outputBuffer); printf( "viFindRsrc failed with error code %x - %s\n" , status, outputBuffer); exit (EXIT_FAILURE); } printf( "viFindRsrc - %s\n" , outputBuffer); /* Now we will open a session via TCP/IP */ status = viOpen (defaultRM, (ViRsrc) acInstrument, VI_NULL, u32Timeout, &instr); if (status < VI_SUCCESS) { printf ( "An error occurred opening the session to %s\n" , acInstrument); viClose(defaultRM); exit (EXIT_FAILURE); } // Set the timeout attribute viSetAttribute (instr, VI_ATTR_TMO_VALUE, u32Timeout); //Identify and reset the instrument VisaWrite( "*IDN?" ); VisaWrite( "*RST" ); //Set the Channel Parameters VisaWrite( "SOURce1:PERiod 600 ns" ); VisaWrite( "SOURce2:PERiod 600 ns" ); VisaWrite( "SOURce1:VOLT:HIGH 1" ); VisaWrite( "SOURce1:VOLT:LOW -1" ); VisaWrite( "SOURce2:VOLT:HIGH 0.5" ); VisaWrite( "SOURce2:VOLT:LOW -0.5" ); // Set the Pulse Parameters VisaWrite( "SOURce1:PULSe1:WIDth 100 ns" ); VisaWrite( "SOURce2:PULSe1:WIDth 20 ns" ); // Turn On the Outputs VisaWrite( "OUTPut1 ON" ); VisaWrite( "OUTPut2 ON" ); // Set the Pulse Mode VisaWrite( "SOURce1:PULSe:MODE SINGLE" ); // Set the Trigger Mode VisaWrite( "TRIGger:MODE CONTinuous" ); // Arm the instrument VisaWrite( "PULSEGENControl:START" ); // Start the generation VisaWrite( "*TRG" ); status = viClose (instr); status = viClose (defaultRM); printf ( "\nHit enter to continue." ); fflush(stdin); getchar(); return 0; }
  • 热度 29
    2018-7-18 16:41
    1648 次阅读|
    0 个评论
    摘要 Autotestcon 2010 的主旨“ 45 年的支持创新——以光速前进”,这个主旨对军用 ATE 系统是非常有意义的,因为它强调努力保持二分法的最先进的测试能力,同时需要支持传统的老技术 – 可能是几十年,像 Autotestcon 本身一样长久。对于支持基于晶体管的离散电子器件、 TTL 、 CMOS 和其他在 1960~1970 年代期间兴起的技术的需求,使用围绕定制 ASIC 、高性能 FPGA 和逻辑电平搭建的测试系统呈现出独特的挑战。 上个世纪部署的系统,使用 CRT 监视器向技术人员或操作人员提供显示信息。这些监视器是基于模拟视频传输标准的,比如 RS170 、 NTSC (国家电视标准委员会, National Television Standards Council )、 PAL ( 逐行倒相制式 , Phase Alternating Line )和其他相似的标准。现今, DVI 与 HDMI 数字视频广泛使用,很难找到商用 CRT 监视器了。但是在老旧的部署系统中 CRT 监视器依旧被广泛使用。 本篇文档是一个应用案例,使用基于 PXI 的仪器生成 NTSC 与 PAL 制式的简单彩条信号,用于支持 Mini Samson 或 Katlanit 远程控制武器站。通过集成现成的 PXI FPGA 板卡与在公共领域与少数商用领域可用的知识产权核心( IP , intellectual property core ),提供低成本的解决方案,支持生成用于测试 CRT 与 LCD 监视器的模拟与数字视频信号。 此种解决方案的灵活性步进可以满足原始的基本需求 - 生成彩条码型信号,还可以通过扩展包括更多复杂的测试码型。 关键字 :视频信号发生器, PXI 视频信号发生器, FPGA 概览 Rafael 系统部门在 1990 年代开发了 Samson 远程控制武器站 ( RCWS , Remote Controlled Weapon Station ) ,这是一个可令大量设备自动操作或远程控制的武器平台,支持的武器包括 5.56mm 、 7.62mm 和 12.7mm 机枪, 40mm 自动榴弹发射器,反坦克飞弹与观察哨。 Samson 远程控制武器站的一种变体形式,称为 Mini Samson 或 Katlanit ,早在 2000 年代就已研发,在 2006 年首次部署。 Geotest – Marvin Test Systems 被指派搭建一个用于测试 Katlanit 远程控制武器站组件的测试系统。 TS-230 测试系统可全方面地对 Katlanit 武器系统进行 CU ( Control Unit )、 DU ( Display Unit )与 GCHU (Gun Control Hand Unit) 的功能测试。这些待测组件包含了 RCWS 平台的 80% 。 CU 是 RCWS 系统的计算机,用于监测机枪与载具的相对位置,根据载具类型不同判断不能进行射击的位置与角度(比如,接近哨口边缘载的位置或载具前部特定角度),还支持其他 RCWS 控制功能与驱动命令。 DU 是 RCWS 瞄准的控制与显示单元,同时也显示这些单元的图像数据。 GCHU 是通过遥杆控制 CU ,由操作人员控制点火射击。 原始的测试需求要求使用定制的 DU 接口测试盒 进行手动测试。纯手动的测试系统的设计令集成度更加复杂,系统交互有限。未来的测试系统要求彩条信号发生器能够提供标准的 NTSC 或 PAL 制式视频信号进行 DU 自动测试。 TS-230 测试系统的升级包括基于 PXI 的彩条信号发生器,用于生成标准 NTSC 或 PAL 制式彩条视频信号;也支持生成其他码型,用于 测量视频码型的清晰度、亮度、角度、对比度。使用 PXI 彩条信号发生器后, DU 接口测试盒将会被淘汰,同时也会实现 DU 测试的完全自动化,提高测试能力,避免不必要的手动操作。 方案实施 通过集成多款 COTS ( Commercial Off-The-Shelf )与控制软件,提供一个灵活、且低成本的解决方案,可用于测试传统的 NTSC 与 PAL 制式视频信号,也可用于测试 VGA 监视器。测试系统的核心是 Geotest GX3500 ,一款结合了 Altera Cyclone III FPGA 的 3U PXI FPGA 板卡(如图 1 )。除了 Altera Cyclone III FPGA 的高性能与高等效逻辑门密度外, GX3500 也是此类应用的理想平台,因为在 GX3500 板卡上安装具有自定义接口的或集成了附加功能的扩展板卡,在本解决方案中就利用了扩展板卡的这两个用途。 图 1 基于 GX3500 的视频码型发生器结构 GX3500 FPGA 板卡 GX3500 的公共 是多样的,为本应用提供了一个现成的 PXI 平台,已包括视频信号发生器的硬件与固件组件。 GX3500 板卡上安装了两块 FPGA ,一块(称为 PXI Interface FPGA )专用于连接至 PXI 总线,提供所有的握手、地址解码与其他 PXI 仪器所需要的功能。另一块 FPGA (称为 Cyclone III ),几乎是完全预留用于用户的特定应用, Cyclone III 的一小部分等效逻辑门资源用于连接另一块 PXI Interface FPGA 。通过 PXI Interface FPGA 将 PXI 总线与 Cyclone III 相连,在 Cyclone III 内部就不需要集成 PCI IP 核了,节省了开发时间并且为用户的特定应用(在本方案中就是视频信号发生器)节省了大量的等效逻辑门。可使用 Altera 的 Web 版 Quartus II 软件 进行 GX3500 的 Cyclone III FPGA 逻辑设计,此软件完全免费,可在 Altera 官网下载 。 视频信号发生器 IP 核 视频信号发生器的关键是 Altera 提供的开源 VGA 控制器 IP 核 。本项目的最初目的是生成 NTSC 与 PAL 复合视频信号,选择 VGA IP 核的原因是因为它能够提供与这些视频标准相似的分辨率。 VGA 控制器生成垂直与水平同步定时的视频数据,为扩展板卡中的 DAC 提供像素时钟;还具有内存管理功能,处理 512Kb x 3 SRAM 图像缓冲器,为 NTSC/PAL 编码器提供其他 VGA 控制,编码器与图像缓冲器都位于扩展板卡上。 视频信号发生器的输出被馈送至视频 DAC 。图像数据或者像素数据通过三个颜色(红、绿、蓝)通道传输,每通道分辨率 10 bit 。传输到视频 DAC 的数据通过 VGA IP 生成的像素时钟实现和同步与消隐控制的同步。 图像码型缓冲器 Cyclone III FPGA 不具有足够的内部内存储存一个完整的 640 x 480 VGA 图像,所以在扩展板卡上安装了一个外部 512Kb x 32 SRAM ( Static Random Access Memory )。通过集成在视频 IP 核中的内存管理器单元控制 SRAM 。只要将一个位图图像写入到 SRAM 中,就会使图像以选定的视频制式输出( VGA 、 NTSC 或 PAL )——一旦该仪器处于运行状态。 视频 DAC ( ADV7123 ) ADV7123 是一款三通道、高速、数模转换器,由 Analog Devices 公司提供 。包括三个高速、 10 bit 视频 DAC (通道),具有差分输出与标准 TTL 输入接口 。 ADV7123 与很多高分辨彩色图像系统兼容,比如 NTSC ( RS-170A )。 RGA 数据, VGA IP 核 接口至 ADV7123 的同步与消隐控制和像素时钟同步,像素时钟由 IP 核提供。像素时钟是通过图像( 640 x 480 )的水平与垂直分辨率、刷新率( 60 Hz )、回扫时间或消隐因素( 0.8 )经过简单的计算得出的。对于 640 x 480 的图像,像素时钟为 23.04 MHz 。 NTSC/PAL 编码( AD725 ) ADV712 视频 DAC 的输出是 VGA 信号,为了支持 NTSC 与 PAL 视频信号,需要使用编码器 。 AD725 ,由 Analog Devices 公司提供,是一款低价、通用的 RGA-NTSC/PAL 编码器,此款编码器根据 NTSC 或 PAL 标准将红、绿、蓝彩色信号转换为相应的亮度(基带信号的幅度)与色度(副载波的幅度与相位)信号 。 为了支持 NTSC 或 PAL 视频标准,图像数据必须以交错的形式馈送至编码器。通常, VGA 是非交错的,所以必须在 VGA IP 核中添加控制,当断言时 IP 核以奇数 / 偶数交错形式馈送图像数据至编码器。编码器要求时钟是选择的视频标准的彩色副载波的 4 倍, NTSC 为 14.318180MHz , PAL 为 17.734475MHz 。这些时钟由专用的晶体振荡器生成,以保证稳定性,并由 FPGA 控制的多路复用器进行选择。像素时钟与视频 DAC 的其他定时参数可进行适当的程控以满足 NTSC 或 PAL 制式的不同分辨率需求。图 2 为安装了满足特定应用需求的扩展板卡的 PXI FPGA 模块。 图 2 3U PXI 视频信号发生器模块 软件 通过读写 Cyclone III 的多个控制寄存器实现对视频信号发生器硬件的控制。底层驱动库提供一些函数,调用这些函数极性以下操作:加载图像、选择视频标准、使能硬件显示储存在 SRAM 缓冲器中的图像。驱动库以 DLL 形式发布,易于与任何基于 Windows 的编程语言集成。其中一个函数,用于加载位图图像至图像缓冲器,可令测试码型以选择的视频标准进行显示。函数访问 BMP 图像文件的路径与名称,并将 24 bit BMP 图像(每个颜色通道 8 bit )转换为 30 bit (每个颜色通道 10 bit ),将数据向左移动 2 bit 以另 10 bit 码型的 MSB 对齐——有效地填充每个 10 位颜色通道的两个 LSB 。集成了视频测试码型发生器的测试系统如图 3 。高层控制包括预定义测试码型,可以通过主机选择并加载至视频信号发生器。用户可选视频标准 VGA 、 NTSC 或 PAL ,软件会设置相应的控制寄存器。 图 3 PXI 视频测试码型系统 总结 利用现今的技术与 PXI 平台,结合灵活的 FPGA 平台、一些商业上可用的组件与控制软件,提供了一种灵活且低成本、支持传统显示设备的视频测试解决方案。对于很多显示器与视频处理器的测试需求,使用标准的 PXI FPGA 产品与满足特定应用的扩展板卡可以提供一种低成本且紧凑的视频信号发生器——从此不再需要昂贵、单一的视频信号发生器。 阅读原文,点击 这里
  • 热度 21
    2014-6-5 17:48
    2958 次阅读|
    0 个评论
      基于 Vehicle Spy 的汽车逆向工程 罗伟光,陈秋苑 (广州虹科电子科技有限公司 广州 510640)   摘要 :本文首先介绍了汽车后装市场的现状和发展趋势,然后介绍了一种基于Vehicle Spy的汽车CAN网络的逆向工程,通过 Vehicle Spy 特殊的显示方式,可以很清楚的发现汽车中变化的 CAN 报文,通过Details 这一类功能,可以很容易的解析出汽车 CAN 网络中一些常见的信号,如车速、门锁、车灯等。   关键词: 汽车 CAN 网络,解析,逆向工程,Vehicle Spy Reverse engineering of vehicles based on Vehicle Spy   Luo Wei-guang, Chen Qiu-yuan (Hongke Co., Ltd, guangzhou 510640 China)   Abstract: First of all, this paper introduces the present situation and development trend of the Car market after loading, then introduces a reverse engineering of vehicle’s CAN network based on Vehicle Spy. The changed CAN messages of the vehicles can be easily recognized via the special display mode of Vehicle Spy. Some common signals (such as car speed, door locks, lamp, etc.) can be decoded easily by using the functions of “Details” of Vehicle Spy.  Keywords: CAN networks of vehicles; Decode; Reverse engineering; Vehicle Spy   1 引言 1.1 汽车后装市场现状和发展趋势   汽车前装市场是中国汽车电子市场发展的主要推动力,但是中国汽车消费市场正在走向差异化和个性化,原厂配备的电子设备不能完全满足消费者的需求,同时电子产品后装市场价格远远低于前装,为后装市场的发展提供了巨大的市场需求 。据中国汽车工业协会发布的“2012 年上半年汽车市场形势分析及市场预测”报告中指出:如果下半年宏观经济向好,经济发展增速回升,全年汽车销量有望达2000万辆,相比去年全年销量1850.51万辆,增长 8%,这样中国的汽车保有量将达到约 1.24 亿辆,这就为后装市场的发展提供了广阔的增量空间。中国汽车电子后装和改装市场目前主要集中在车载电子领域。汽车防盗、汽车音响(包括多媒体系统)和车载导航产品在目前后装和改装市场中拥有重要的市场份额,而随着技术越来越成熟,服务越来越完善,以及政府对汽车改装限制的放宽,汽车电子后装市场产品种类将不断丰富,底盘、发动机改装业务将出现在后装市场,将大大推动后装汽车市场的发展。 虽然发展空间很大,但是也存在很大的挑战,那就是竞争,汽车后装市场的竞争比前装市场激烈得多,因为汽车后装市场的技术门槛比较低,大部分企业普遍存在的一个问题就是技术含量比较低。正像上面说的一样,娱乐系统、智能控制装置、底盘、发动机改装业务将出现在后装市场,而现在的底盘和发动机也都是通过 CAN 总线网络用电控单 元(ECU)来控制的,要想改装底盘和发动机就必须获得一些相应的控制参数,但是后装市场的企业与整车厂没有合作关系,无法获得相关的 CAN 总线中 CAN 报文的参数。为了在残酷的市场要做这方面的业务又必须获得这些参数,这就需要相关的总线解析工具,专业点说就是汽车逆向工程。就目前市场上的这类工具来说,美国英特佩斯的 Vehicle Spy无疑是最好用的一款。   1.2 汽车逆向分析过程 我认为汽车 CAN 网络逆向分析过程主要可以分为四个步骤:筛选、定位、解析、验证和保存。 如图 1 所示,这个过程中开始主要是要选择好分析工具(Vehicle Spy),验证和保存这一步如果验证不对的话就需要重复筛选到验证这一个过程。   2 Vehicle Spy 简介 Vehicle Spy 是一款非常强大的汽车测试工具,其主要功能有: 网络监控 网络、节点仿真、模拟 DBC 数据库建立,修改 CCP/XCP 标,Asap2 editor ISO14229,KW2000 诊断、数据记录 ECU 程序刷新   可见 Vehicle Spy 集成了网络监控、诊断、节点/ECU 仿真、数据获取和记录分析、自动测试等功能,但是本文主要讲的是解析汽车 CAN 总线(在 Vehicle Spy 中称为逆向工程),所以本文的焦点在于逆向工程方面。   Vehicle Spy 的报文界面能让用户同时查看、筛选、分类、定制和记录多种总线网络的信号和报文。特别是其自动的报文高亮显示能准确清晰的指示车辆总线上正在变化的数据,且显示的颜色也可以自己设置。一般的网络报文监视软件都是文本式的显示,要查找变化的报文很费劲,而 Vehicle Spy 的这些特性就使得对于总线的逆向分析和解析工作 简单了很多。 找到对应的变化报文后,对于一些比较复杂的数据还是难以判断出某个报文的具体哪几个位表示的是我们想要知道的信号,Vehicle Spy 提供的Details 功能可以很好的解决这个问题。   3 Vehicle Spy 的逆向工程 这一部分主要从特殊的报文显示方式、报文过滤、报文信号分析三个方面讲述基于 Vehicle Spy 的逆向工程。 报文显示方式:帮助你快速的缩小想要解析的报文的范围; 报文过滤方式:帮助你快速定位到想要解析的报文; 报文信号分析:帮助你快速解析出想要得到的信号。   3.1 特殊的报文显示方式 Vehicle Spy 的报文显示方式主要可以分为高亮显示,区别颜色显示等(图 2)。 图 2 报文显示方式   Vehicle Spy 的基本显示模式分为两种:一是静态模式,这种模式显示所有已经出现过的报文;二是滚动模式,按照接收和发送的顺序显示报文 。   3.1.1 高亮显示 在主显示区,单击任何一行都会以绿色显示,高亮显示有助于指出变化的数据。灰色表示变化“快”的数据(变化时间小于 1s);蓝色表示变化“慢”的数据(变化时间大于 1s);停止变化的数据则会逐渐的从高亮灰色变为白色。当然如果当前高亮的数据里面没有你感兴趣的,也可以通过点击一个按钮来抑制这种高亮。还有一些其它的相关显 示方式:(1)高亮变化:将没有变化的数据变为灰色,只有当报文的数据开始变化的时候才会变为正常的颜色。这个特性的目的在于突出显示变化的报文。 (2)突出最近的:设置一个最近的时间点,在这个时间点之内的报文正常显示,其它的变暗。 (3)模板模式:使能这个功能后可以快速的将一个 ID 的报文改变到另外一个 ID 的报文中去。这个功能对于知道报文的译码却不知道具体的 ID时是非常有用的。 (4)改变高亮样式:根据变化强度和变化梯度可以设置在改变多少数据字节之后再让它高亮。这个功能有助于确定改变的速率有多快的数据。   3.2.2 区分颜色显示 通过对报文操作,可以将接收到的所有报文都添加到在报文编辑窗口中的接收报文这一栏下,这样在这里可以设置每个接收到的报文的颜色,再次监控的时候这些报文就会按照设置的颜色显示,且上面提到的高亮设置也不会引起颜色变化。   3.2 报文过滤方式 Vehicle Spy 提供了两种报文过滤方式:一个是报文视图列过滤器;一个是报文过滤栏过滤器。各有特点,重点是可以互相配合使用。   3.2.1 报文视图列过滤器 Vehicle Spy 报文显示窗口的每一列都有一个列过滤器并且多个列可以同时进行过滤。这对于很多报文的情况下对报文进行筛选和排序非常有用。这个过滤器也支持两种过滤方式(图 3): 图 3 报文视图列过滤器   一是采用下拉列表。双击每一列的空白区域,都会弹出相应的下拉列表,这个下拉列表中包括这一列的所有信息,所以在这里可以选择感兴趣的内容。 二是采用输入区域。输入区域其实就是这个空白区域,在这里可以自由输入。在工作中,如果对于某条报文只知道其中一个数字,或者只知道所处的 ID 范围,或者只知道某个描述,都可以过滤出一个满足你要求的范围。如在 ArbID/Header 这一列下 面输入 3??,那么对应的会输出 ID 的第一位是 3 的报文;如输入 100—400,就会过滤出这个 ID 范围内的报文;如果输入 323,129 就是说用逗号隔开,就会过滤出这两个 ID 的报文。这些操作方式也适用于其它列。   3.2.2 报文过滤栏过滤器 Vehicle Spy 集成了很多标准的过滤器,只需要激活相应的过滤器就会按照设置过滤出对应的报文。 如图 4 中的 HS CAN 这个过滤器,如果激活这个过滤器,那么在报文显示窗口就只会显示高速CAN 这个网络的报文,下面其它的如单线 CAN、J1850、发送的报文、错误的报文等过滤器也类似。   另外也可以自定义过滤器,可以将毫不相关的各种报文信息等包含在一起,也可以将不感兴趣的报文直接排出在外。   3.3 报文信号分析 通过前面描述的功能定位好 ID 后,选择这个 ID,使用 Details 功能可以帮助解码 CAN 报文为具体的信号。 (1)突出显示信号区域(图 5)。 选择的 ID对应的字节在这里显示,Bytes 表示各个字节的值,Bits 表示各个位的值,如果需要解析的是数字量,那么这里可以非常清楚的看到各个位的变化,很容易识别出数字量。 图 5 信号字节显示区域   (2)信号即时反馈(图 6)。 如果需要解析的信号时模拟量,那么在上面的信号字节显示区域一般要选择 8 位或者 16 位的数据长度,而旁边的信号图就会将二进制转换为十进制的数值,调整数据的位置,信号图中的数值也会跟着变化。 图 6 显示解码信息的信号图   信号图中可以很直观的看到当前信号的变化趋势和规律等,这样对于已知变化规律的信号的判断是非常有用的。这个功能的作用就是找出符合规律的数据字节。   (3)使用数据点确定系数(图 7)。模拟量信号与直接解码出来的十进制数值一般都有一定的函数关系。这个功能的作用是在你确定两个数据点之后,软件会自动确定最佳的系数(比例因子和偏移量)。 图 7 使用数据点确定系数   (4)使用跟踪信号。这里的跟踪信号主要是起对比的作用。这个的典型应用就是使用一个已知报文的信号来解码一个正常模式下的报文的未知信号。设置一个跟踪信号,这个跟踪信号会显示在信号图中,这样在信号图中就有跟踪信号和未知信号两个信号的图像,跟踪信号的图像对于未知信号来说是一个很好的参照。   最后,在确定好之后可以直接将该 ID 的报文和信号设置添加到报文编辑窗口接收项里面,然后就可以导出为标准的 dbc 文件,并可将该 dbc 文件导入到其它软件中使用。   4 Vehicle Spy 的其它操作 (1)验证报文的正确性。在确定 ID 后,也可以直接将报文视图中选择的 ID 连同数据一起拷贝到报文编辑窗口中的发送项,再将这个 ID 的报文发送出去,以验证找到的报文是否正确。 (2)保存文件。报文视图中的所有报文都可以保存到 csv 文件中,当然也可以只保存过滤器过滤出来的报文,如只保存发送出去的报文。这样就便于分析和存档。 (3)数据回放。可以将上面保存的 csv 文件通过 Vehicle Spy 回放,如果连接有相关 CAN 的硬件,也可以按照保存的报文的时间顺序,重新将这些报文发送出去。   5 结束语 本文详细描述了使用Vehicle Spy进行汽车的逆向的分析的过程,经过筛选报文、过滤和定位报文、解析报文信号等几个步骤,可以帮助工程师极大的提高解析的工作效率。   参考文献 http://www.motorlink.cn/html/marketInfo/10000123dccb20c 52009092410181862_3.html Vehicle Spy Help file.   作者简介 罗伟光,助理工程师,广州虹科电子科技有限公司。 本论文由Colin整理,如需转载,请注明出处。
相关资源