1. 项目概述:为什么我们需要一份力控7.2的“避坑指南”?
如果你正在使用或准备接触力控7.2,无论是做SCADA系统开发、工业数据采集,还是组态监控项目,那么这份持续更新的问题与解决方案整理,可能就是你在项目关键时刻的“救命稻草”。力控作为国内工业自动化领域广泛应用的组态软件,其7.2版本在功能、性能和开放性上都有显著提升,但随之而来的,是实际部署和开发中那些官方手册不会细说、搜索引擎也难找全的“暗礁”。
我接触力控系列软件超过十年,从早期的版本一路用到7.2,深知一个稳定、高效的项目背后,往往是对无数个“小问题”的预判和解决。这份整理不是简单的FAQ罗列,而是基于大量一线项目实战的复盘,旨在将那些导致系统卡顿、数据丢失、功能异常甚至崩溃的典型问题,连同其根因分析和已验证的解决方案,系统地呈现出来。无论你是刚入门的新手,还是经验丰富的老手,都能从中找到对应场景的参考,避免重复踩坑,提升开发与运维效率。接下来,我们就从整体设计思路开始,拆解这份“避坑指南”是如何构建的。
2. 内容整体设计与思路拆解
2.1 核心目标:从“救火”到“防火”的思维转变
整理力控7.2的问题,根本目的不是做一个“错误代码查询手册”,而是推动一种思维模式的转变:从出现问题后被动“救火”,转向在项目设计、开发、测试阶段就主动“防火”。因此,这份整理的架构遵循几个核心原则:
问题场景化:单纯记录“XXX报错”没有意义。每个问题都会绑定到典型的使用场景,比如“在画面中大量使用复合动画连接导致运行时卡顿”、“通过OPC UA客户端采集高频数据时的断线重连失败”、“使用历史库查询函数在跨天查询时结果异常”等。场景化描述能让你快速对号入座,即使错误提示不完全一样,也能通过场景关联找到排查方向。
根因追溯:这是区别于普通解决方案的关键。我们会深入分析问题背后的软件机制、系统资源限制或配置逻辑。例如,一个简单的“画面切换慢”问题,可能根因在于图形对象的渲染方式、脚本执行效率,或是数据库连接池配置不当。理解根因,才能举一反三,从根本上规避同类问题。
方案分级:针对一个问题,往往存在临时规避措施和根本解决方案。我们会明确区分“应急处理”(如重启服务、清除缓存)和“根治方案”(如修改设计、优化配置、更新补丁),并说明各自的适用条件和潜在风险,帮助你在不同项目压力下做出合适选择。
持续更新机制:工业软件应用环境复杂,与新操作系统、新硬件、第三方驱动的兼容性问题会不断出现。因此,这份整理采用“核心问题库+动态更新区”的结构。核心问题库涵盖安装部署、图形系统、实时数据库、通信驱动、脚本系统等稳定模块的常见问题;动态更新区则用于收录随着Windows更新、力控小版本升级或新型PLC应用而产生的新问题。
2.2 内容分类与检索逻辑设计
为了便于查阅,所有问题将按照力控7.2的核心功能模块进行归类,这是最符合工程师思维习惯的方式。主要分类包括:
- 安装与授权:涵盖安装失败、授权检测异常、服务启动失败、与操作系统(如Win10/Win11特定版本)的兼容性问题。
- 开发环境(ForceControl):包括工程管理器、画面编辑器、变量数据库、动画连接、脚本编辑器在使用中的各类异常和性能问题。
- 运行系统与图形界面:专注于运行时画面渲染卡顿、窗口管理异常、控件失灵、内存泄漏等问题。
- 实时数据库(pSpace):这是数据核心,问题包括点配置、数据采集、存储、查询效率、报警与事件处理、冗余切换故障等。
- 通信与I/O驱动:涵盖Modbus、OPC(DA/UA)、Siemens S7、三菱、欧姆龙等主流驱动协议的连接、断线、数据抖动、效率瓶颈及驱动配置陷阱。
- 网络与分布式应用:涉及网络节点配置、C/S或B/S架构下的数据同步、Web发布故障、安全权限冲突等。
- 脚本与二次开发:包括VBScript、C#脚本的语法兼容性、执行效率、与外部组件交互(如调用.NET DLL、操作ADO数据库)时的异常。
- 报表与历史数据:聚焦历史报表查询慢、数据导出格式错乱、统计函数计算不准等问题。
- 报警与事件:包括报警不产生、延迟、频繁误报、报警窗口显示异常等。
- 系统集成与第三方交互:如与MES、ERP系统通过API或数据库对接时出现的问题。
注意:在实际查阅时,建议先根据问题现象判断所属大类,再通过关键词(如“卡顿”、“断线”、“报错XXX”)在类别内细化查找。很多复杂问题往往是多个模块交互导致的,我们会尽量在相关类别下建立交叉引用。
3. 核心问题解析与实操要点
3.1 安装部署类:万事开头难
安装部署是项目的第一道坎,这里的问题往往与环境紧密相关。
典型问题1:在Windows 10/11 22H2及以上版本安装时,提示“需要.NET Framework 3.5”且安装失败。
- 现象与根因:力控7.2的部分组件(尤其是早期发布的安装包)依赖.NET Framework 3.5。而新版本的Windows默认未启用此功能,且通过安装程序在线安装常因网络或系统源问题失败。
- 解决方案:
- 根本方案(推荐):从力控官网下载最新的7.2安装包或升级补丁,新版本通常已更新安装逻辑或减少对.NET 3.5的强依赖。
- 离线启用:如果必须使用当前安装包,可离线安装.NET 3.5。挂载Windows安装ISO镜像,以管理员身份打开CMD或PowerShell,执行命令:
其中dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccessD:\替换为你的ISO镜像盘符。执行成功后重启再安装力控。
- 实操心得:建议在干净的虚拟机或测试机上先进行安装测试,确保环境兼容性。对于生产服务器,务必在项目规划初期确认操作系统版本,并优先采用力控官方推荐或验证过的系统版本(如Windows Server 2019 LTSC)。
典型问题2:授权(加密狗)无法识别,或提示“找不到授权”。
- 现象与根因:可能原因包括:USB端口供电不足(尤其是前置USB口)、加密狗驱动未正确安装、与其它USB设备冲突、使用了USB延长线或HUB、杀毒软件/防火墙拦截了授权服务。
- 解决方案与排查步骤:
- 基础检查:将加密狗直接插在主机后置的USB口,避免使用延长线。
- 驱动确认:打开设备管理器,查看“通用串行总线控制器”或“安全设备”下是否有“HASP Key”或“Sentinel”相关设备且无感叹号。若无,需运行力控安装目录下的驱动安装程序(如
haspdinst.exe)。 - 服务状态:检查服务“Sentinel LDK License Manager”或“Sentinel Local License Manager”是否已启动并设置为“自动”。
- 软件冲突:临时关闭杀毒软件和防火墙(特别是Windows Defender的实时保护),测试是否识别。
- 终极测试:在另一台确认可用的电脑上测试该加密狗,以排除硬件损坏可能。
- 避坑技巧:对于工控机,强烈建议为加密狗指定一个专用的、稳定的USB端口,并在系统装机后第一时间安装并测试授权。在项目文档中记录此端口位置。
3.2 图形系统与运行时:流畅体验的关键
图形界面是操作人员最直接接触的部分,其流畅度直接影响使用体验。
典型问题3:工程画面复杂,包含大量动画和脚本后,运行时切换画面卡顿严重。
- 现象与根因:这是最常见的性能问题。根因在于:① 图形对象过多,且动画连接(特别是“闪烁”、“填充”、“移动”等)在每一扫描周期都执行,消耗大量CPU;② 画面中嵌入了执行频率过高的脚本(如窗口动作中的“每100ms”执行的脚本);③ 使用了高分辨率位图或过多渐变填充,加重GPU渲染负担。
- 解决方案:
- 优化动画设计:
- 减少全局动画:检查并减少在“应用程序动作”或“窗口动作”中周期执行的、影响全局的脚本。
- 使用条件抑制:对非关键区域的动画,使用“可见度”或“变量条件”来控制其只在需要时激活。
- 简化图形:用矢量图形代替位图,用纯色填充代替复杂渐变。
- 优化脚本逻辑:
- 降低执行频率:将“每100ms”执行的脚本改为“每500ms”或“每1秒”,除非绝对必要。
- 避免在动画连接中做复杂计算:将复杂的数据处理、查询逻辑移到后台的“数据改变脚本”或“定时器脚本”中执行。
- 使用局部变量:在脚本中频繁访问的力控变量,可先赋值给局部变量再操作,减少通讯开销。
- 利用画面分层与延迟加载:将复杂画面拆分为多个“子画面”或“窗口”,采用“按需加载”的方式。主画面只显示框架,点击相应区域再动态加载子画面内容。
- 优化动画设计:
- 实操心得:在开发阶段,养成使用力控自带的“系统性能监控”工具的习惯。它可以实时查看CPU、内存、脚本执行时间等。在画面卡顿时,首先打开此工具,定位是脚本耗时过长还是图形渲染瓶颈。
典型问题4:自定义ActiveX控件或.NET控件在画面中显示异常,或导致运行系统崩溃。
- 现象与根因:第三方控件可能存在兼容性问题、内存泄漏,或依赖特定运行库(如VC++ Redistributable)未安装。
- 解决方案:
- 测试与隔离:新引入的控件务必在单独的测试画面中充分测试,特别是长时间运行和频繁操作场景。
- 权限与依赖:确保控件所需的运行库在目标机器上已安装。对于需要注册的OCX控件,务必以管理员身份在目标机注册(
regsvr32)。 - 替代方案:如果控件不稳定,考虑是否能用力控原生图形组合或脚本来实现类似功能。对于数据显示,优先使用力控的图表、报表控件。
- 避坑技巧:在生产环境中,尽量避免使用来源不明或版本过旧的ActiveX控件。如果必须使用,将其放置在一个独立的、可重启的运行窗口内,即使该控件崩溃也不至于导致整个力控运行系统退出。
4. 实时数据库(pSpace)核心问题实战
实时数据库是力控的“心脏”,其稳定性直接决定数据可靠性。
4.1 数据采集与存储异常
典型问题5:IO设备通信正常,但实时数据库点值不更新,或更新缓慢。
- 排查流程:
- 检查点配置:确认数据库点的“数据连接”是否正确关联了IO设备的通道和寄存器地址。常见错误是地址格式错误(如忘了加偏移量)或数据类型不匹配(如把32位浮点数读到了16位整数点)。
- 检查扫描周期:在“数据连接”配置中,确认该点的“采集周期”设置是否合理。太长的周期会导致更新慢。
- 检查设备状态:在力控的“IO设备监控”工具中,查看对应设备的“通讯状态”是否为“正常”,以及“故障次数”、“超时次数”是否在增长。状态异常需排查物理链路和驱动配置。
- 检查数据库服务:确认pSpace运行是否正常,可通过力控的“数据库组态”工具连接测试,或查看Windows服务中“pSpace 7.2”服务的状态。
- 根因与方案:多数情况下是配置错误。对于更新缓慢,可能是网络拥堵或设备响应慢,可以适当增加驱动中的“超时时间”和“尝试次数”,但更重要的是优化网络拓扑和设备负载。
典型问题6:历史数据存储失败,或查询历史数据时返回空值。
- 现象与根因:
- 存储失败:可能原因是历史库文件所在磁盘空间已满、NTFS权限不足、历史库配置中“保存时限”或“存储策略”设置有误。
- 查询为空:常见于跨天、跨月查询。力控历史数据默认按“表”存储(如按小时、天),查询函数如果时间范围跨表,而查询参数或函数使用不当,可能导致结果不完整。
- 解决方案:
- 存储失败处理:
- 检查并清理磁盘空间,确保历史库路径有足够容量。
- 确认运行力控服务的账户(如
SYSTEM或指定用户)对历史数据文件目录有“完全控制”权限。 - 在“历史库配置”中,检查“存储时限”是否设置过短导致数据被自动删除,以及“存储策略”(如周期存储、变化存储)是否符合预期。
- 查询为空处理:
- 使用
HisQuery类函数进行复杂查询时,务必注意其StartTime和EndTime参数是包含关系,且时间格式要精确。 - 对于需要查询长时间范围的情况,建议使用
HisSelect等更强大的查询函数,并处理好查询超时和分页。 - 一个关键技巧:在脚本中查询历史数据时,将查询代码放在
OnTimer或独立的线程中执行,避免阻塞主界面响应。对于大量数据查询,考虑使用“异步查询”模式,先发起查询请求,在回调函数中处理结果。
- 使用
- 存储失败处理:
4.2 报警与事件配置陷阱
典型问题7:变量值已超过报警限,但报警窗口未显示,或报警声音未触发。
- 排查步骤:
- 确认报警条件:双击变量,在“报警参数”中确认“报警开关”已打开,且“限值报警”或“变化率报警”的上下限值设置正确。
- 检查报警组态:在“报警组态”中,确认已为该类报警配置了“报警服务器”和“报警显示”。报警信息需要报警服务器处理并分发给报警显示客户端。
- 检查声音配置:在“报警显示”控件的属性中,找到“声音设置”,确认已勾选“启用声音报警”,并指定了有效的
.wav文件路径。文件路径最好使用绝对路径,或放在力控运行目录下。 - 查看报警记录:打开“报警记录”视图,看是否有对应的报警记录生成。如果有记录但未显示,问题在显示端;如果无记录,问题在报警产生或服务器端。
- 实操心得:报警配置是一个链条。建议建立一个标准检查清单:变量报警参数 -> 数据库报警配置 -> 报警服务器运行状态 -> 报警显示控件绑定与过滤条件 -> 声音/打印等输出配置。按照链条逐一排查,效率最高。
5. 通信驱动类典型问题深度剖析
通信驱动是连接物理世界的桥梁,问题最为频繁。
5.1 通用通信故障排查框架
遇到任何通信问题,可以遵循以下通用框架,能解决80%的故障:
- 物理层检查:网线/串口线是否接好?PLC/仪表是否上电?指示灯是否正常?
- 网络层检查:IP地址、子网掩码、网关设置是否正确?电脑和设备的IP是否在同一网段?防火墙是否关闭或添加了例外(力控相关进程及端口)?
- 驱动参数检查:在力控IO设备配置中,设备地址、端口号(如Modbus TCP的502,S7-1200/1500的102)、站号、串口参数(波特率、数据位、停止位、校验)是否与设备侧完全一致?特别注意字节顺序(字交换),这是导致数据值错误的最常见原因。
- 设备状态监控:使用力控“IO设备监控”,观察设备状态、收发字节数、故障次数。如果“故障次数”持续增加,说明链路层有问题;如果状态时好时坏,可能是干扰或网络波动。
- 第三方工具验证:使用Modbus Poll、ModScan、Wireshark、PLC编程软件等第三方工具,直接测试与设备的通信,以确定问题是出在力控驱动还是更底层。
5.2 特定协议问题示例
典型问题8:Modbus TCP/RTU通信,部分寄存器读取正常,部分返回错误值或“问号”。
- 根因分析:这几乎可以肯定是地址映射错误。不同厂家的设备对Modbus地址的“偏移量”处理不同。力控(以及多数软件)通常使用“PLC地址”或“协议地址”,而设备手册可能给出的是“寄存器号”。
- 例如,手册说“保持寄存器40001”,其寄存器号是0(从0开始计数)。在力控中填地址时,如果选择“4x”功能码,地址就应填“0”。如果设备要求填“40001”,你可能需要在力控地址中填“0”,也可能需要填“1”(视驱动解析方式而定)。
- 解决方案:
- 统一偏移量:确定一个基准。通常建议以“寄存器偏移量(从0开始)”为基准进行配置。在力控的数据连接地址中直接填写这个偏移量。
- 使用调试工具:用Modbus Poll等工具,以“从0开始的地址”去读取,确认能读到正确值。然后将这个地址原样填入力控。
- 注意功能码:读线圈(0x)和读输入寄存器(3x)的地址空间是独立的,不要混淆。
- 避坑技巧:为每个型号的设备建立一个“地址映射表”文档,记录其手册地址、实际寄存器偏移量、以及在力控中对应的配置地址。新项目直接套用,能极大减少配置时间。
典型问题9:与西门子S7-1200/1500 via Ethernet通信,经常断线,或连接建立非常慢。
- 根因分析:S7-1500之后的西门子PLC加强了通信安全策略。力控的S7驱动(如S7_TCP)需要与PLC建立ISO-on-TCP连接,可能受以下因素影响:
- PLC侧配置:未在PLC硬件配置中正确设置“连接机制”,未勾选“允许来自远程对象的PUT/GET通信访问”。
- 网络路由:力控PC与PLC不在同一子网,且路由或防火墙规则复杂。
- 驱动参数:TSAP(传输服务访问点)设置错误。本地TSAP和远程TSAP需要匹配。
- 资源限制:PLC的通信连接资源被占满。
- 解决方案:
- PLC侧:在TIA Portal中,进入PLC设备视图 -> “属性” -> “防护与安全” -> “连接机制”,务必勾选“允许来自远程对象的PUT/GET通信访问”。
- TSAP设置:在力控驱动配置中,本地TSAP通常设为
10.01(意为10H,01H),远程TSAP需要根据PLC的机架号和槽号计算。对于S7-1200/1500,通常机架号0,槽号1(对于单机架),则远程TSAP为03.00(03H=3=机架号,00H=0=槽号?注意:这里常为03.02,02H=2=槽号1?此处是关键,需根据PLC实际和驱动手册确认,常见组合是03.02或03.00)。最可靠的方法是查阅力控对应驱动的详细帮助文档。 - 优化连接:在力控驱动高级设置中,适当增加“超时时间”和“尝试次数”。如果数据点不多,可以尝试降低“采集周期”,减轻单次请求压力。
- 实操心得:对于S7通信,在项目初期,务必在测试环境中用一台电脑直连PLC,用最简单的配置(正确IP、TSAP)测试通断。确认驱动本身工作正常后,再将其部署到复杂的项目网络环境中,以便隔离网络问题。
6. 脚本与二次开发中的“坑”
脚本赋予了力控强大的灵活性,但也容易引入不稳定因素。
典型问题10:VBScript脚本执行效率低下,在循环或定时器中操作大量变量导致界面“假死”。
- 根因分析:VBScript是解释型语言,且力控脚本引擎与图形界面渲染在同一个线程(或强关联)。密集的脚本计算或频繁的变量读写(特别是通过
GetData/SetData访问远程变量)会阻塞消息循环,导致界面无法响应。 - 解决方案:
- 算法优化:避免在脚本中进行多层嵌套循环、复杂的字符串拼接或频繁的文件操作。将计算密集型任务转移到后台(如用C#编写计算模块,通过COM调用)。
- 变量访问优化:
- 批量读写:使用
GetGroupData和SetGroupData函数一次性读写一组变量,而不是在循环中逐个读写。 - 使用局部缓存:对于需要反复读取的变量值,先一次性读到脚本的数组或字典对象中,后续操作直接使用缓存。
- 批量读写:使用
- 异步与延时:
- 将长耗时任务拆分成小块,使用
SetTimer设置一个短周期(如100ms)的定时器,在定时器脚本中每次只处理一小部分数据。 - 使用
DoEvents函数(谨慎使用)在长循环中让出控制权,允许界面处理消息,但过度使用会影响整体性能。
- 将长耗时任务拆分成小块,使用
- 考虑升级到C#脚本:力控7.2支持C#脚本,其执行效率远高于VBScript。对于复杂的逻辑和计算,应优先使用C#。
- 避坑技巧:在开发阶段,善用
#DEBUG指令和Trace函数输出脚本执行时间。对于任何计划在“窗口周期执行”或“快速定时器”中运行的脚本,都要预先评估其执行耗时,确保远小于执行周期。
典型问题11:通过脚本调用外部COM组件或.NET DLL时,报“无法创建对象”或“类型未定义”错误。
- 根因分析:权限问题、组件未注册、或脚本引擎(32位 vs 64位)与组件位数不匹配。力控7.2开发/运行环境可能是32位的,而你的DLL是64位的,反之亦然。
- 解决方案:
- 位数匹配:确认你的力控版本是32位还是64位(查看安装目录和任务管理器进程)。然后使用对应位数的组件。32位程序只能加载32位DLL,并在
C:\Windows\SysWOW64下注册COM;64位程序则用C:\Windows\System32。 - 注册与引用:
- 对于COM组件(.dll 或 .ocx),以管理员身份运行
regsvr32 xxx.dll进行注册。 - 在力控的“脚本编辑器”中,通过“引用”对话框添加对.NET DLL或COM库的引用。
- 对于COM组件(.dll 或 .ocx),以管理员身份运行
- 权限提升:如果力控运行在受限用户账户下,可能无权实例化某些需要较高权限的COM对象。尝试以管理员身份运行力控进行测试。
- 依赖检查:使用
Dependency Walker或.NET的Fuslogvw工具检查DLL的依赖项是否全部存在。
- 位数匹配:确认你的力控版本是32位还是64位(查看安装目录和任务管理器进程)。然后使用对应位数的组件。32位程序只能加载32位DLL,并在
- 实操心得:对于关键的外部组件调用,务必编写一个独立的、健壮的测试脚本。脚本应包含完整的错误处理(
On Error Resume Next和Err对象检查),并记录详细的日志。在生产环境部署前,在目标机上完整测试组件调用的全过程。
7. 常见问题与排查技巧实录
这里汇总一些零散但高频的问题和立即可用的技巧。
7.1 环境与配置类
问题:工程拷贝到另一台电脑后,画面字体错乱或控件位置偏移。
- 原因:两台电脑的屏幕分辨率、DPI缩放比例或默认字体不同。
- 解决:在开发机上,尽量使用“宋体”、“微软雅黑”等系统通用字体,避免使用特殊字体。在画面编辑器“工具->选项”中,可以设置工程默认字体。对于重要工程,在目标机上调整分辨率与DPI至与开发机一致。
问题:力控运行系统(View)启动时,一闪而过然后退出,无错误提示。
- 排查:查看Windows事件查看器(
eventvwr.msc)中“应用程序”日志,寻找力控相关进程(如View.exe,pSpace.exe)的崩溃记录。常见原因有:工程路径包含中文或特殊字符、关键文件(如配置文件、授权文件)损坏、与其它软件(如杀毒软件)冲突。 - 技巧:尝试以管理员身份在命令行启动
View.exe,有时会看到更详细的错误输出。
- 排查:查看Windows事件查看器(
7.2 运行与操作类
问题:鼠标点击画面按钮无反应,但其它区域正常。
- 排查:检查该按钮的“弹起时”事件脚本是否有语法错误导致执行中断。更隐蔽的原因是,按钮可能被一个更大的、透明的图形对象(如用于背景色的矩形)覆盖了。在开发环境中,使用“置于顶层/底层”功能调整对象层次。
问题:历史趋势曲线显示不全,或某段时间无数据。
- 排查:
- 确认该变量确实启用了历史存储。
- 检查趋势曲线的时间范围设置是否正确,是否超出了已有历史数据的范围。
- 检查历史库的“保存时限”和“存储策略”,可能数据因达到时限已被自动删除,或因为“变化存储”策略,数值未变化期间未存储。
- 技巧:使用
HisQuery函数在脚本中查询同一时间段的数据,验证数据是否存在。
- 排查:
7.3 网络与分布式应用
- 问题:分布式应用中,客户端无法连接到服务器,或连接后数据不更新。
- 排查:
- 网络连通性:在客户端用
ping和telnet(服务器IP,端口)测试网络和端口(如力控默认的2006、2008端口)是否通。 - 服务器配置:在服务器力控的“网络配置”中,确认“服务器”角色已启用,并绑定了正确的网卡IP。
- 防火墙:在服务器和客户端防火墙中,为力控相关程序(
Server.exe,View.exe等)和端口添加入站规则。 - 主机名解析:如果使用计算机名连接,确保网络能正确解析(可尝试在hosts文件中绑定IP和计算机名)。
- 网络连通性:在客户端用
- 技巧:在服务器端运行力控的“网络诊断”工具,它可以监听端口并测试通信,是排查网络问题的利器。
- 排查:
这份关于力控7.2的问题与解决方案整理,源于无数个加班的夜晚和紧急的现场支持。工业软件的应用,稳定性压倒一切。很多问题看似诡异,但剥丝抽茧后,无非是配置、环境、资源或逻辑上的某个细节被忽略了。我的建议是,为你的每一个项目建立自己的“知识库”,记录下遇到过的独特问题和解决方法。同时,保持对力控官网更新日志和补丁的关注,有时官方的一个小补丁就能解决困扰你许久的大问题。最后,复杂系统出问题时,采用“分而治之”的策略:通过停用部分功能、简化测试工程等方式,逐步缩小问题范围,往往比漫无目的地猜测更有效率。希望这份持续更新的整理,能成为你项目工具箱里一件称手的工具。