1. 一文看懂 OPEN Alliance TC8:汽车以太网 ECU 的 Layer 3–7 测试到底测什么?

本文以 OPEN Alliance《Automotive Ethernet ECU Test Specification Layer 3-7 V3.0》为基础,介绍 TC8 上层协议测试的范围、测试方法以及项目中容易踩坑的地方。重点不是逐条翻译规范,而是帮助第一次接触 TC8 的同学快速建立整体认识。

1. TC8 是什么?

做汽车以太网 ECU 测试时,经常会听到“这个控制器需要过 TC8”。

这里的 TC8,指的是 OPEN Alliance 的 Technical Committee 8。它负责制定汽车以太网 ECU 的测试规范和一致性测试方法,覆盖 OSI 模型的七个层级。

TC8 的核心目的并不复杂:不同供应商开发的 ECU 接入同一车载以太网后,至少要能够按照相同的协议规则通信。

例如,一个 ECU 的 TCP/IP 协议栈在普通通信场景下看起来没有问题,但遇到下面这些情况时,表现就不一定一致:

  • 收到错误校验和的 IPv4 报文;

  • 收到重复或冲突的 ARP 信息;

  • TCP 报文发生乱序、重传或窗口异常;

  • DHCP 服务器返回不完整的选项;

  • SOME/IP 报文中的长度字段不正确;

  • 对端发送不存在的 Service ID 或 Method ID。

如果不同 ECU 对异常报文的处理方式差异很大,整车集成时就容易出现偶发断连、通信恢复失败甚至资源耗尽。TC8 的作用,就是把这些正常场景和异常场景整理成相对统一的测试用例。

根据 OPEN Alliance 官方说明,TC8 同时负责 ECU 测试规范、测试过程以及测试机构相关要求,为 ECU 一致性验证提供统一基础。OPEN Alliance TC8 官方介绍


2. TC8 和普通功能测试有什么区别?

TC8 更接近“协议一致性测试”,并不是整车功能测试。

以 TCP 通信为例,普通功能测试可能只关注:

  1. ECU 能不能建立 TCP 连接;

  2. 数据能不能正常收发;

  3. 断开连接后能不能重新连接。

而 TC8 还会继续检查:

  • TCP 首部字段是否符合要求;

  • 序列号和确认号处理是否正确;

  • 收到重复报文时如何响应;

  • 收到非法标志位组合时是否丢弃;

  • 超时后是否按照预期重传;

  • 连接状态迁移是否正确;

  • 收到错误报文后,协议栈能否继续正常工作。

因此,“业务通信正常”并不代表“TC8 一定能通过”。

反过来也一样。通过 TC8 只能说明被测协议实现满足规范覆盖的基本要求,并不能替代业务功能、性能、网络压力、网络安全以及整车场景测试。


3. Layer 3–7 规范包含哪些内容?

OPEN Alliance 官方路线图中列出的 Layer 3–7 最新批准版本为 V3.0,发布时间为 2020 年 5 月。该版本将测试范围分为两大类:OPEN Alliance Automotive Ethernet Specifications

3.1 TCP/IP Protocol Family

主要包含:

测试模块主要检查内容
ARP地址解析、ARP 缓存、静态及动态表项、异常 ARP 报文
ICMPv4Echo、差错报文、未知类型、校验和及异常处理
IPv4首部字段、地址、TTL、校验和、分片与重组
IPv4 Link-Local链路本地地址选择、探测、宣告及地址冲突处理
UDP端口、长度、校验和、数据收发及异常数据报处理
DHCPv4 Client地址申请、续租、重绑定、多个服务器及异常响应
TCP建连、断连、状态迁移、重传、窗口、序列号及异常报文

需要注意的是,V3.0 的这部分重点是 IPv4 协议族,并不是看到“Layer 3–7”就默认包含 IPv6、DoIP、TLS、PTP 或所有应用层协议。

3.2 Automotive Protocols

汽车应用协议部分主要包含:

  • SOME/IP;

  • SOME/IP Service Discovery;

  • 用于辅助测试的 Enhanced Testability Service,也就是 ETS。

这也是 TC8 与通用 TCP/IP 一致性测试比较明显的区别:它不仅检查基础网络协议,还覆盖了汽车以太网中常用的 SOME/IP 通信。


4. ARP 测试在测什么?

ARP 的功能是根据 IPv4 地址查找对应的 MAC 地址。原理不难,但实际测试项并不少。

4.1 报文生成

测试系统触发 ECU 向某个目标地址发送数据,然后检查 ECU 是否正确发出 ARP Request。例如:

  • 目标地址不在 ARP 缓存中时,是否发起地址解析;

  • 已经存在静态 ARP 表项时,是否直接使用该表项;

  • 动态表项超时后,是否重新进行解析;

  • ARP Request 中的源地址、目标地址和操作码是否正确。

4.2 报文接收

测试系统还会主动向 ECU 注入不同形式的 ARP 报文:

  • 正常的 ARP Request;

  • 正常的 ARP Response;

  • 与本机地址冲突的 ARP 报文;

  • 字段非法或前后不一致的报文;

  • 广播、单播方式不符合预期的报文。

这里很容易出现一种现象:ECU 能正常完成 Ping,但某些 ARP 缓存更新、老化或冲突处理用例仍然失败。

问题通常不在以太网驱动,而在协议栈配置、ARP 缓存管理或者测试控制接口上。


5. IPv4 和 ICMPv4 测试不只是 Ping

很多人看到 ICMPv4,第一反应就是 Ping。实际上 Echo Request/Echo Reply 只占其中一部分。

ICMPv4 测试还会关注:

  • 目的端口不可达;

  • 协议不可达;

  • 未知 ICMP 类型;

  • 错误校验和;

  • 不应针对某些 ICMP 差错报文再次发送差错报文;

  • 收到异常报文后是否静默丢弃。

IPv4 部分则会检查:

  • Version 和 IHL;

  • Total Length;

  • Header Checksum;

  • 源地址和目的地址;

  • TTL;

  • 分片标志与偏移;

  • 报文分片后的重组行为;

  • 重组超时;

  • 重叠、缺失或异常分片的处理。

测试工具经常会故意构造“不太像正常设备会发出来”的报文。这并不是故意刁难,而是要确认协议栈面对异常输入时不会错误响应,也不会影响后续正常通信。


6. IPv4 Link-Local 地址测试

当 ECU 无法从 DHCP 服务器获得地址时,部分项目会启用 IPv4 Link-Local,也就是常见的 169.254.0.0/16 地址段。

TC8 会检查 ECU 是否按照规定完成:

  1. 候选地址选择;

  2. ARP Probe 地址探测;

  3. 地址宣告;

  4. 地址冲突检测;

  5. 冲突后的防御或重新选址;

  6. Link-Local 地址的数据发送与转发限制。

这部分测试很依赖 ECU 的启动状态和时间参数。

实际调试时,常见问题包括:

  • DHCP 还没有真正超时,Link-Local 流程就开始了;

  • ARP Probe 次数或间隔不正确;

  • ECU 重启后复用了旧地址,但没有重新探测;

  • 测试结束后地址和定时器没有清理干净;

  • 连续执行用例时,前一个用例留下的 ARP 缓存影响了后一个用例。

因此,测试前后的状态清理往往比单条报文是否正确更重要。


7. UDP 测试的重点

UDP 没有连接状态,看起来比 TCP 简单,但测试时仍然可能遇到不少问题。

TC8 主要检查:

  • Source Port 和 Destination Port;

  • UDP Length;

  • UDP Checksum;

  • 奇数长度数据;

  • 零长度负载;

  • 不存在的目标端口;

  • 广播或特定目标地址下的数据处理;

  • UDP 与 ICMP Port Unreachable 之间的关系。

一个典型场景是:测试系统向 ECU 上未监听的 UDP 端口发送报文,然后检查 ECU 是否按照配置和协议要求返回 ICMP Destination Unreachable。

如果 ECU 上有防火墙、Socket Adapter 或其他过滤模块,报文可能在到达 TCP/IP 协议栈之前就被丢弃。这时抓包只能看到“ECU 没有响应”,还需要结合内部日志判断报文究竟在哪一层消失了。


8. DHCPv4 Client 测试

DHCP 测试并不只是确认 ECU 能否拿到 IP 地址,而是检查完整的客户端状态流程。

常见测试内容包括:

  • DHCPDISCOVER 的发送;

  • DHCPOFFER 的选择;

  • DHCPREQUEST 和 DHCPACK;

  • 收到 DHCPNAK 后的处理;

  • 租约时间;

  • T1 续租和 T2 重绑定;

  • 多个 DHCP Server 同时响应;

  • Server Identifier、Requested IP Address 等选项;

  • 报文丢失、延迟或内容异常;

  • DHCP 失败后是否进入 Link-Local 流程。

DHCP 用例对时间比较敏感。测试失败时,除了检查报文内容,还要重点确认:

  • ECU 的租约定时器;

  • 测试工具的等待时间;

  • ECU 内部时间基准;

  • 总线负载和任务调度延迟。

有些问题单步执行不出现,批量回归时却稳定复现,通常就与状态残留或定时器边界有关。


9. TCP 是 Layer 3–7 中比较难分析的一部分

TCP 测试用例多,失败原因也比较分散。其测试范围通常包括:

  • 主动打开和被动打开;

  • 三次握手;

  • 正常关闭与异常复位;

  • TCP 状态迁移;

  • Sequence Number 和 Acknowledgment Number;

  • 数据重传;

  • 重复报文;

  • 报文乱序;

  • 滑动窗口;

  • 零窗口及窗口恢复;

  • SYN、ACK、FIN、RST 等标志位;

  • 不同状态下收到异常报文时的处理。

TCP 问题不太适合只看最后一帧报文。

例如,工具报告“没有收到 ACK”,真正原因可能是前面某个报文的序列号已经超出 ECU 的接收窗口;也可能是连接提前进入了其他状态。调试时最好从握手开始完整检查整个会话,而不是只盯着失败步骤。


10. SOME/IP 和 SOME/IP-SD 测试

SOME/IP 测试主要围绕消息格式和通信行为展开,常见检查项包括:

  • Message ID;

  • Service ID 和 Method ID;

  • Length;

  • Client ID 和 Session ID;

  • Protocol Version;

  • Interface Version;

  • Message Type;

  • Return Code;

  • Request、Response、Notification 和 Error;

  • 非法字段组合;

  • 不存在的服务或方法;

  • 会话和请求响应关系。

SOME/IP-SD 则更多关注服务发现流程,例如:

  • OfferService;

  • FindService;

  • SubscribeEventgroup;

  • SubscribeEventgroupAck;

  • TTL;

  • Entry 和 Option 的组合;

  • 服务上线、下线及重新发布;

  • 报文内容异常时的处理。

这部分比较依赖 ECU 的应用层实现。如果业务服务只实现了正常通信路径,没有提供测试触发和状态观察能力,很多异常场景将很难稳定复现。


11. Upper Tester 和 ETS 为什么重要?

在 TC8 测试中,测试工具并不只是在外部发送网络报文,还需要控制 ECU 内部协议栈的行为。

例如,某条用例可能要求 ECU:

  • 清空 ARP 缓存;

  • 添加静态 ARP 表项;

  • 从指定接口发送 UDP 报文;

  • 主动建立 TCP 连接;

  • 关闭某个 Socket;

  • 启动或停止 SOME/IP 服务;

  • 返回协议栈内部接收到的数据。

这些操作无法只靠外部抓包完成,因此规范引入了 Upper Tester 的概念。

一个简化的测试关系如下:

                  控制通道
测试系统  -------------------------->  Upper Tester / ETS
   |                                      |
   |                                      | 调用内部接口
   |                                      v
   |                                TCP/IP、SOME/IP
   |                                      |
   +---------- 汽车以太网测试报文 --------> ECU

Upper Tester 负责配置和触发,测试网口负责发送、接收和检查协议报文。

项目中经常出现“抓包结果没问题,但用例仍然失败”的情况,原因可能就是 Upper Tester 没有正确返回状态、命令执行时机不对,或者控制命令与网络报文不同步。


12. 一条 TC8 用例通常怎么执行?

虽然不同协议的具体步骤不一样,但整体结构比较固定:

准备 ECU 状态
    ↓
通过 Upper Tester 配置或触发 ECU
    ↓
测试系统发送正常或异常报文
    ↓
监听 ECU 的响应
    ↓
检查字段、顺序和响应时间
    ↓
清理连接、缓存和定时器

规范中的用例一般会给出:

  • Synopsis:测试目的;

  • Prerequisites:前置条件;

  • Test Setup:测试拓扑;

  • Test Input Parameters:输入参数;

  • Test Procedure:执行步骤;

  • Pass Criteria:通过条件;

  • Reference:对应的 RFC 或 AUTOSAR 规范;

  • Notes:补充说明。

执行时不要只关注 Pass Criteria。很多问题其实来自前置条件不满足,比如 ECU 不支持对应特性、测试接口配置错误,或者上一个用例没有完成清理。


13. 是否需要执行所有用例?

通常不需要不加区分地执行所有测试项。

TC8 的测试范围应根据 ECU 实际实现的功能确定。例如:

  • ECU 不使用 DHCP,相关用例可能不适用;

  • ECU 不支持 IPv4 Link-Local,就不应直接套用对应流程;

  • ECU 只有 SOME/IP Client,没有 SOME/IP Server,需要按照角色选择用例;

  • TCP、UDP、SOME/IP-SD 是否启用,也会影响测试范围。

OPEN Alliance 的测试流程要求先收集 DUT 信息,再根据 ECU 支持的功能制定测试计划,完成执行和结果评估后输出测试报告。TC8 ECU and Network Test Process

项目开始前,最好先整理一份 ECU Feature List,至少说明:

  • 网络接口数量;

  • MAC 和 IP 地址配置方式;

  • TCP/UDP 端口;

  • DHCP 和 Link-Local 支持情况;

  • SOME/IP 服务角色;

  • 服务、方法和事件组信息;

  • Upper Tester 或 ETS 的访问方式;

  • 各类缓存及超时参数。

这一步做得越完整,后面的无效失败越少。


14. 实际项目中的几个建议

14.1 尽早测试

不要等软件冻结后才开始跑 TC8。协议栈配置、Upper Tester 和应用服务接口都可能涉及软件架构调整,越晚发现问题,修改成本越高。

14.2 保留完整抓包

失败用例至少应保留:

  • 测试网口的完整 PCAP;

  • 控制通道日志;

  • ECU 内部日志;

  • 软件版本和配置;

  • 用例输入参数;

  • 用例开始前后的 ECU 状态。

只有一张“Fail”截图,通常不足以定位问题。

14.3 先判断问题在哪一层

收到异常报文后 ECU 没有响应,可能是:

  • 交换机没有转发;

  • 以太网驱动丢包;

  • 防火墙过滤;

  • TCP/IP 协议栈丢弃;

  • Socket 层没有上报;

  • 应用没有处理;

  • Upper Tester 没有返回结果。

先确定报文走到了哪一层,再分析协议规则,会比直接修改参数有效得多。

14.4 注意用例之间的状态隔离

ARP 缓存、TCP 连接、DHCP 租约、SOME/IP Session ID 和 SD TTL 都可能影响后续测试。

如果一个用例单独执行通过、连续执行失败,应优先检查:

  • Cleanup 是否完成;

  • ECU 是否真正恢复到初始状态;

  • 缓存和定时器是否残留;

  • 测试工具是否复用了旧会话。


15. 总结

TC8 Layer 3–7 测试可以理解为对 ECU 上层通信协议的一次系统性“体检”。

它关心的不只是 ECU 能不能通信,还关心:

  • 报文是否符合标准;

  • 状态机是否正确;

  • 异常输入是否被合理处理;

  • 超时和重传是否符合预期;

  • 协议栈在错误发生后能否继续稳定工作;

  • SOME/IP 服务是否能够与其他厂商的 ECU 正常配合。

对于刚开始接触 TC8 的项目,建议按照下面的顺序推进:

  1. 明确 ECU 实现了哪些协议和功能;

  2. 准备 Upper Tester 或 ETS;

  3. 根据 Feature List 筛选适用用例;

  4. 先单模块调通,再做批量回归;

  5. 同时保存网络抓包、控制日志和 ECU 内部日志;

  6. 对失败项回到对应 RFC、AUTOSAR 规范和 TC8 用例逐步分析。

TC8 文档页数很多,但真正进入项目后会发现,它的组织方式比较清晰:准备状态、构造报文、观察响应、判断结果。先建立协议层级和测试框架,再去看具体用例,会比从第一页开始逐条硬啃轻松得多。


参考资料

  1. OPEN Alliance TC8 – Automotive Ethernet ECU Test Specification

  2. OPEN Alliance Automotive Ethernet Specifications

  3. TC8 Test Process – ECU and Network Test

说明:本文用于技术交流,测试范围和适用用例仍应以项目要求及 OPEN Alliance 发布的对应版本规范为准。

CANoe测试TC8 车载以太网 阅读详情

相关推荐

电子电气架构 TC8测试概述及控制算法

在现代汽车中,电子电气架构(Electrical/Electronic Architecture,简称 E/E 架构)起着关键的作用,它负责管理车辆中的各种电子系统和设备。为了确保 E/E 架构的稳定性和性能,必须进行全面的测试和验证。电子电气架构 TC8 测试是指对汽车中的电子系统、网络和接口进行验证和验证的过程。通过功能测试、兼容性测试、稳定性测试、性能测试和安全性测试,可以验证和验证电子电气架构的各个方面。控制算法在电子电气架构中起着重要的作用,它们负责监控和控制车辆的各个系统和设备。

EmCode的博客 1405

车载以太网-TC8测试

TC8测试的用例数量 TC8测试基本流程 TC8测试内容

天赐好车的博客 3604

电子电气架构——车载以太网TC8测试策略

而在Test Setup中,可以勾选所需运行测试用例(如图18所示),或编辑修改选中Test Unit中的相关测试参数(如图19所示),测试完成后,可以关联打开Test Report Viewer查看自动生成的测试报告(如图20、21所示)。此次,为了更好演示TC8测试包相关功能,在CANoe.Ethernet中,已通过CAPL程序,实现了仿真DUT功能,即在仿真模式(Simulated Bus)下,可以(部分/完整)运行TC8测试用例,演示真实场景下的测试状况。其中,引入了一个重要测试概念,被称为【

Soly_kun的博客 1428

2. TC8测试中的Upper Tester(UT)是什么?一文讲清作用、架构与实现思路摘要

本文结合OPEN Alliance TC8 Layer 3—7 V3.0,介绍Upper Tester的用途、适用范围和典型执行流程,并说明DHCP控制、SOME/IP TestStub及ETS之间的区别。

struggle_22_58的博客 402

车载以太网测试-1【TC8物理层测试基础】

车载以太网物理层是车载网络的基础,负责将数字数据转换为适合在物理介质上传输的信号,并确保数据传输的可靠性、稳定性和高效性。它在车载网络系统中扮演着至关重要的角色,直接影响着车辆内部通信的性能和效率。1. 主要物理层标准车载以太网标准由IEEE 802.3和标准名称速率线缆类型编码方式应用场景100BASE-T1100 Mbps单对非屏蔽双绞线车载摄像头、传感器1 Gbps单对屏蔽/非屏蔽双绞线自动驾驶域控制器、高清视频10BASE-T1S10 Mbps单对双绞线幅移键控(ASK)

车载网络测试工程师的博客 4373

什么是TC8测试?

首先,TC8全称是。它是由AUTOSAR组织制定的一套针对车载网络TCP/IP协议栈的一致性测试标准。虽然名字叫“TCP/IP测试规范”,但TC8的实际测试范围远不止传统的TCP和IP,它涵盖了车载以太网相关的几乎所有核心协议,其中就包括SOME/IP和SOME/IP-SD。TC8测试的目的不是为了验证功能是否正确,而是为了确保不同厂商开发的协议栈软件能够严格遵循标准,从而实现互联互通。

usstmiracle的博客 1200

车载以太网-TC8测试-UT(Upper Tester)

车载以太网-TC8测试-UT(Upper Tester)

天赐好车的博客 1453

TC8车载以太网测试规范

Open Allicance 发布的TC8 ECU测试规范;V2.0最终版,包括物理层PMA测试和IOP测试,以及协议层SOME/IP测试;

OPEN Alliance TC8测试规范(1/3)

车载以太网一致性测试Part1

西门子1200数据块BD详解

定义 DB(Data Block)是用于存储用户数据的区域,分为两种类型:核心作用 四、DB块的访问方式 1. 全局DB访问 符号访问(优化块): 绝对地址访问(非优化块):(假设SetPoint占用2字节) 2. 背景DB访问 与FB关联后自动生成,通过FB调用时传递: 五、高级功能与注意事项 数据块的初始化运行时修改DB数据块的下载常见问题 通过合理使用DB块,可显著提升程序的可读性和可维护性。建议优先启用优化块访问并使用符号名编程。如何使用DB数据块 数据块用于存储程序数据。因此,数据块

weixin_51020122的博客 3419

YOLO-World:从入门到实战的多模态目标检测全指南

想象一下,你给模型一张“公园”的图片,再输入文字“红色的郁金香”,它能直接在图中框出所有红色郁金香的位置——这就是多模态目标检测:结合图像视觉信息和文本语义信息,同时完成“是什么”(分类)和“在哪里”(定位)的任务。传统目标检测(如YOLOv5、YOLOv8)只能识别预定义的类别(比如训练时学过“猫”“狗”),但多模态目标检测摆脱了“类别预定义”的限制,只要文本能描述,它就能检测,这就是“开放词汇检测(Open-Vocabulary Detection)”的魅力。

know_F0727的博客 199

在Ubuntu系统中安装和使用wxPython进行Python图形用户界面(GUI)开发

在本文中,我将向您展示如何在Ubuntu系统上安装和使用wxPython,并提供一些示例代码来帮助您开始使用这个强大的工具。在MyFrame的构造函数中,我们创建了一个wx.Panel和一个按钮,并将按钮的点击事件绑定到一个自定义的方法on_button_click上。最后,我们创建了一个wx.App的实例,创建了一个MyFrame对象并显示它,最后通过调用app.MainLoop()启动应用程序的主事件循环。这只是一个简单的示例,但它演示了如何使用wxPython创建一个基本的GUI应用程序。

qq_37934722的博客 1034

unitree-G1外接 USB 麦克风完整配置指南

首先,将type-c麦克风插入G1机器人的USB口后,记录下USB麦克风的卡号(card)和设备号(device),通常显示为 card 1: Device [USB Audio Device]

m0_47999117的博客 577

【学习系列】SAP RAP 3:添加多层级的子节点

本文详细介绍了在SAP ABAP RAP开发中如何创建多层级业务对象。主要内容包括:1)创建明细和计划行层级的数据库表及CDS视图;2)使用association和composition关键字建立父子关联关系;3)创建各层级的投影视图并设置层级关系;4)更新行为定义,添加关联、操作权限等控制;5)更新服务定义公开新增视图;6)创建元数据扩展优化UI展示。通过这一系列步骤,实现了从抬头到明细再到计划行的完整业务对象层级结构,为后续UI功能扩展奠定了基础。

DeveloperMrMeng的博客 579

【QT开发教程】Qt中的跨平台文件系统操作

文件系统操作是应用程序开发中经常需要处理的任务。Qt提供了一套跨平台的文件系统操作API,使开发者能够在不同操作系统上无缝地进行文件和目录操作。本文将介绍Qt中的跨平台文件系统操作,包括基本概念、常用类和方法以及实际示例。

科技改变人类,技术成就未来 974

告别 GENERATE_SUBPOOL_DIR_FULL:用 RTTC 平替 CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE 的一套更稳方案

文章摘要:本文探讨了ABAP开发中动态内表的创建问题,重点分析了使用CL_ALV_TABLE_CREATE方法可能遇到的GENERATE_SUBPOOL_DIR_FULL错误。该错误源于临时subroutine pool的36次创建上限,常在批量处理或频繁调用时出现。文章提出基于RTTC技术的替代方案ZCL_ALV_TABLE_CREATE_RTTC,通过运行时类型服务直接创建动态内表,无需生成临时代码,从而规避了资源限制。该方法保持接口兼容性,只需简单替换类名即可实现无缝迁移,是解决动态表创建瓶颈的有效方

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 212

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

下一篇: 2. TC8测试中的Upper Tester(UT)是什么?一文讲清作用、架构与实现思路摘要
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值