☰
基于实操经验提炼AFSim 2.9仿真全流程:从安装到高级功能解析
2026/10/5 5:38:34 网站建设 项目流程

AFSim 2.9这套软件,我最早接触还是在做体系级仿真预研的时候,当时项目要求把雷达、通信、电子战设备放到一个统一的仿真框架里跑任务级场景,折腾了STK和MATLAB一圈,最后发现AFSim才是真正能干这个活儿的工具。最近看到2.9中文手册出来了,还有配套的B站视频,说实在的,我挺感慨,因为前几年这软件在国内几乎没有成体系的中文资料,想学真的只能啃英文文档,效率低得让人抓狂。

这篇博文我就基于自己从2.8到2.9的实操经历,把安装流程、场景构建、传感器配置、脚本控制这些核心环节重新捋一遍,不念官方文档的摘抄,只写我踩过坑之后沉淀下来的东西。针对已经装了软件但不知道怎么上手的新手,或者用了一段时间但卡在高级功能上的老手,这篇内容应该能帮你少走很多弯路。配套的B站视频我看了几集,讲得偏入门操作,文字版我这边会补上更多参数层面的分析,两者配合着看,效果会好很多。

1. 先弄清楚AFSim 2.9究竟是干什么的

1.1 它不是画曲线的工具,而是“把装备放进战场”的框架

很多人第一次用AFSim,会拿它跟STK比,也有人把它当Multigen Vega一类的视景软件,其实都不准确。AFSim的核心定位是仿真框架,不是单点工具。它擅长的是把一件件装备(雷达、通信电台、干扰机、导弹、飞机、舰船)抽象成可配置的实体,然后放到一个虚拟战场环境中,让它们按照预设的逻辑或外部注入的数据跑起来。说得直白些,STK擅长告诉你“卫星在某个时刻看见哪里”,AFSim更关心“这颗卫星的雷达真的在扫描一个区域时,能不能发现目标、数据链能不能把信息送回去”。

2.9版本在底层架构上延续了之前“主控组件+服务组件”的设计思路。所有模型都挂在Entity(实体)下面,每个Entity可以挂多个Component(组件),比如雷达组件负责探测、通信组件负责收发数据。这种组件化的好处是,新增一种装备不用从零写引擎,只要把相应组件加上去,再配置参数就行。

1.2 典型应用场景:预警探测、电子战、通信链路仿真

从实际项目看,AFSim的主要用途有这么几类:

  • 雷达探测与预警场景:飞机、舰船携带雷达对区域搜索,评估发现概率、覆盖范围、跟踪稳定性。
  • 电子战场景:干扰机对雷达的压制效果,烧穿距离变化的动态评估。
  • 通信网络仿真:节点间链路通断、时延、吞吐量随平台移动的变化。
  • 任务规划与训练模拟:用脚本驱动红蓝双方按照任务想定行动,配合3D视景输出画面。

我见过不少做装备论证、战术战法研究的团队,把AFSim当“试验台”用,先用它把体系级逻辑跑通,再接入半实物设备做更细的验证。这套流程在2.9版本里更顺滑了,因为SDK接口比老版本规整了许多,后面会细说。

1.3 为什么中文手册和视频值得看

AFSim原本的官方文档覆盖面很广,但组织方式偏工具书,遇到具体问题不好查。中文手册解决了一个“从哪开始”的问题,把安装、界面、基础操作、常用配置这些路上的石头提前搬开了。B站视频更适合看操作过程,比如鼠标在哪个菜单点了什么、窗口之间怎么联动,这是静态文字很难完全表达的。视频配合文字,再对照软件一起点,基本两三天就能把哑巴式英文文档挡住的入门门槛过掉。

我更建议的做法是:看视频之前先把软件装上,视频里点到什么功能,你就同步在软件里操作一遍。光看不练,记忆留存率很低,尤其AFSim这种界面复杂、术语多的工具。

2. 安装与初始配置:跑通第一个场景是成功的一半

2.1 运行环境要求

AFSim 2.9在Windows和Linux下都有版本,实际使用中绝大多数人用的是Windows版。官方给出的配置要求偏向保守,实测下来,影响体验的主要是三块:

  • 内存容量:建议至少32GB。场景里实体数量达到几百个、打开3D视景并开启光照阴影时,16GB会很吃力。
  • 显卡:需要支持OpenGL 3.3及以上的独立显卡,显存建议4GB以上。集显能跑,但3D界面掉帧会很严重。
  • 操作系统:Windows 10/11 64位。部分旧版Windows Server系统缺少OpenGL完整支持,会导致视景窗口黑屏。

安装之前,先到显卡厂商官网装好最新驱动,这一点不比装软件本身次要。我遇到过好几次用户反复重装AFSim都打不开3D窗口,最后发现是Windows自带的通用驱动不认OpenGL高级特性,换了厂商驱动就正常了。

2.2 详细安装步骤

第一步:获取安装包与许可证

安装包可以从官网申请试用版,或者从团队内部共享渠道获取。AFSim安装包一般在3-5GB左右,许可证文件是一个单独授权的文件,通常是.lic格式。

第二步:关闭杀毒软件再运行安装程序

这一步不是套路话。AFSim的安装过程会释放大量动态库和脚本文件到系统目录,部分杀毒软件会把其中的授权服务进程误判为可疑程序。我建议安装包解压完,右键“以管理员身份运行”setup.exe之前,先把实时防护暂时关掉,装完并激活成功后再恢复。

第三步:按默认路径安装

执行安装程序后,保持默认安装路径即可,一般位于C:\Program Files\Adaptive\AFSim或类似目录。安装类型选择“Complete”(完全安装),不要选自定义去裁剪组件。后续SDK开发、Python脚本接口、示例工程都用得到完整组件,少装一个回头就得补。

第四步:配置许可证

安装完成后,需要把许可证文件放到指定位置。不同版本的授权方式有差异,常见的两种:

  • 把.lic文件放到安装目录下的license子文件夹中。
  • 打开License Manager工具(开始菜单里可以找到),手动指定许可证文件路径。

如果是网络浮动授权,还得设置服务器地址和端口。配置完成后打开License Manager,如果显示许可状态为“Available”或“Active”,就说明授权没问题。

第五步:启动Simulation Workbench

Simulation Workbench是AFSim的主集成环境。第一次启动时,软件会进行环境初始化,加载注册表和模型库,可能需要几分钟。如果启动卡住,大概率是许可证没有生效,或者上一次运行残留的进程没有完全关闭,打开任务管理器结束所有带“AFSim”“SimulationWorkbench”字样的进程后重新启动。

2.3 安装后的快速验证

安装验证最好的方式不是去看帮助菜单,而是直接加载一个自带示例。

从菜单栏打开File → Open Scenario,安装目录examples(或data/scenarios)下能找到一堆现成场景文件,后缀一般是.scn。选一个名字里带demo或example的场景,加载之后点击运行按钮。如果能看到地图、实体符号,并且时间轴在向前推进,说明软件本身已经能正常工作了。

这里我特别提醒:第一次跑示例前,最好先看一下场景对应的说明文件(readme.txt),里面通常写了场景包含多少实体、需要跑多久、预期输出是什么。这一步能帮你建立“场景-运行-结果”的对应关系,后面自己建场景时就有参照物了。

3. 核心概念与界面导航:磨刀不误砍柴工

3.1 Scenario、Entity与Component的关系

AFSim里最核心的三个抽象概念,理解透了,整个软件的逻辑就通了一半。

Scenario(场景)是整个仿真世界的容器。它定义了时间基准、坐标系(经纬高/地心坐标系)、环境条件,以及所有实体和事件。一个场景就是一次完整的推演过程。

Entity(实体)是场景中的“事物”。一架飞机、一艘舰艇、一座雷达站、一颗卫星,都可以建模成一个Entity。每个Entity有位置、速度、姿态,以及挂载的设备。

Component(组件)是实体能力的最小单元。雷达组件、通信组件、干扰组件、运动组件、决策组件,都是Component。实体本身是壳,组件决定它能干什么。

实际配置时的逻辑就是:创建Entity → 给Entity添加Components → 在每个Component内部配置具体参数。比如要建一架带搜索雷达的无人机,那就新建一个Entity叫UAV01,添加运动组件(设置飞行性能)、雷达组件(设置频段、功率、波束宽度)、通信组件(设置数据链参数)。

3.2 界面主要区域与作用

Simulation Workbench的界面布局,正式上手前花十分钟熟悉一下,后面能省很多时间。

  • 场景浏览器(Scenario Browser):左侧面板,显示所有实体和组件的树状结构,相当于场景的“文件管理器”。
  • 地图窗口(Map View):主视图区,以二维地图形式显示实体位置和运动轨迹。
  • 3D视景窗口(3D View):可单独弹出的三维视角,用于观察实体交战过程。
  • 时间控制工具栏:播放/暂停/停止/倍速,仿真时钟的控制入口。
  • 消息窗口(Message Log):运行过程中系统输出的调试信息和错误提示,排查问题的最重要窗口。

很多人犯的错误是只盯着3D窗口看热闹,忽略消息窗口。程序报错时第一反应是“画面卡了”,其实错误原因早就在消息窗口里写着。遇到任何异常,第一件事就是拉消息窗口的滚动条。

3.3 脚本控制接口:比图形界面更强大的方式

图形界面适合搭场景和单步调试,一旦场景复杂起来(尤其是需要批量修改、循环运行、参数扫掠时),用脚本才是最有效率的。AFSim支持多种脚本接口,包括内置的事件脚本和Python接口。

事件脚本可以挂在组件上,比如定义“当雷达检测到目标时,执行某个动作”。Python脚本则更适合外部控制:生成场景、修改参数、启动仿真、导出结果,全程自动化。

后面第5节我会展开讲脚本的具体玩法,这一节只需要建立一个认知:AFSim的场景文件本质上是文本格式,图形界面只是一种编辑器,直接改脚本文件往往比在界面里点几百次鼠标快得多。

4. 实战案例:构建一个雷达探测任务

讲了一堆概念,现在进入真正有参考价值的部分——从零开始搭一个“雷达搜索无人机”任务。这个案例虽然小,但五脏俱全,包含了建场景、添实体、配传感器、跑仿真、取结果的全流程。

4.1 案例背景与想定

假设场景是这样的:在某个海岸区域,一座岸基雷达站对空搜索,一架无人机从内陆方向飞向海岸。我们需要评估:雷达在什么时刻第一次发现目标,之后能不能连续跟踪。

这个案例适合初学者,因为只涉及两个实体、一台雷达、一条直飞航迹,所有参数都在UI里能直接改,不需要写代码。但它反映的“探测-跟踪”过程,跟大型体系级仿真里的逻辑是一致的。把这里搞明白,后面做复杂场景只是数量上的堆叠,不存在认知上的跳跃。

4.2 分步操作:从创建场景到运行仿真

第一步:新建场景

打开Simulation Workbench后,点击File → New Scenario,或工具栏的新建按钮。弹出窗口中需要设置:

  • Scenario Name:给场景起个名字,比如Demo_Radar_Track。
  • Time Settings:仿真持续时间,先设10分钟,步长0.5秒。这里步长决定最小时间分辩度,太大会漏掉过程事件,太小数据量太大,0.5秒对雷达探测评估足够。
  • Coordinate System:选择“Geodetic”(经纬高),对人造目标任务最直观。

点击OK进入编辑界面。

第二步:创建雷达站点实体

在场景浏览器中右键选择“Add Entity”。Entity Type选择“Fixed Ground”或“Static Site”,实体名称填RadarSite。创建完成后,在属性面板设置:

  • Position:输入经纬度和海拔,比如东经122.5度、北纬30.8度、高度30米。
  • Category:选择Ground Radar或类似分类。

这一步的关键是坐标系选择。在AFSim里,实体位置既可以直接输入经纬高,也可以指定相对于某个参考点的偏移。忘了输入参考点直接填偏移量,会导致实体跑到完全不相干的地方——这是我见过最多的低级错误之一。

第三步:添加雷达组件

选中RadarSite实体,右键选择“Add Component”,在设备列表中找到“Radar”组件并添加。双击新加组件,进入参数配置界面。核心参数包括:

  • Frequency:工作频段,设3GHz(对应S波段,典型的远程搜索雷达频段)。
  • Peak Power:峰值功率,设1MW(兆瓦级,对应远程雷达量级)。
  • Antenna Gain:天线增益,设35dB。
  • Waveform:脉冲宽度、带宽、重频等。先用默认值,对趋势评估影响不大。
  • Scan Pattern:扫描方式,选择“2D Search”两维搜索,方位0-360度,俯仰0-30度。
  • Detection Threshold:检测门限,默认即可,影响虚警率和灵敏度。

这些参数的物理含义,我在5.4小节会展开讲。这里只要先知道“在哪里填参数”,知道每个值大概代表什么,就能跑通流程。

第四步:创建无人机实体

点击场景浏览器右键,添加一个Air Platform类型的实体,命名UAV01。在属性面板设置初始位置(比如雷达站以东300公里处)、初始高度(5000米)、初始速度(每秒150米,方向朝雷达站)。

为了模拟直飞效果,需要给UAV01添加“Route Plan”或“Motion”组件,定义一个航迹点:起点在300公里外,终点设在雷达站正上方附近。这样运行仿真时,飞机会自动沿航迹飞行。

第五步:运行仿真

先点击“Reset”把时钟归零,然后点击“Play”启动仿真。此时地图窗口应看到雷达站和无人机的符号。打开3D视景窗口,转到雷达站视角,可以观察雷达波束的扫描效果。

运行过程中,注意观察消息窗口。当雷达第一次“发现”无人机时,会产生一条检测消息,给出行人时刻和目标信息。发现时刻一般用仿真时间表示,比如“T+00:02:15”,表示从开始运行到第2分15秒时首次发现。

4.3 查看结果与数据导出

仿真运行结束后,AFSim会自动记录每个实体的状态变化和事件消息。查看结果的方式有三个层次:

第一层:直接看界面。在地图窗口点击目标实体,可以查看它的位置、速度、被探测状态。雷达站点上也会显示当前跟踪列表。

第二层:查看事件消息。消息窗口里记录了所有事件,包括检测、丢失、重新捕获等。可以右键消息,把整个消息记录导出为文本文件,方便后续分析。

第三层:创建图表。通过工具栏的“Plot”功能选中想看的量,比如目标距离随时间的变化、信噪比曲线、检测状态。曲线可以直接导出为CSV或Excel格式。

对初学者而言,跑完一个小场景后,把“距离-时间曲线”和“SNR-时间曲线”导出来,跟雷达方程的理论计算结果对比一下,是很好的实操练习。

4.4 关键参数背后的物理意涵

很多人建完雷达模型,发现仿真结果与理论计算对不上,原因往往出在参数设置上。这里挑三个最重要的参数展开解释。

峰值功率与平均功率:雷达的探测距离跟“平均功率”直接相关,而平均功率等于峰值功率乘以占空比(脉冲宽度乘重频)。如果波形默认的占空比很小,就算峰值功率设到1MW,实际平均功率也不高,探测距离自然上不去。所以调参数时要同时看峰值功率和波形参数,不能只盯一个。

天线增益与波束宽度:增益不是“越怎么样越好”的单一维度。天线增益高,探测距离确实远,但波束宽度变窄,扫描一遍空域需要的时间更长。对搜索雷达来说,要在“看得远”和“找得快”之间取平衡。仿真里如果发现雷达漏掉了快速目标,先不要怀疑探测能力,很可能是波束太窄导致扫描刷新率不够。

检测门限与虚警:检测门限设得低,灵敏度高,但虚警也多;门限设得高,虚警少,但漏警概率增加。做体系仿真时,通常用一个恒定门限简化处理,但你要清楚它是简化,不是雷达的真实表现。如果做电子战干扰评估,检测门限这个参数对结果的影响会被放大好多倍,这时候最好用更精细的检测模型。

5. 高级功能详解:脚本控制、自定义模型与分布式仿真

跑通基础场景只是第一步。AFSim真正拉开与普通演示软件差距的,是以下几个高级功能。这些功能不掌握,你只能算是“会用”,远远谈不上“能干活”。

5.1 用Python脚本控制场景:从重复劳动中解放

实际项目里,一次仿真往往需要跑几十组参数,比如雷达架设高度从20米到50米每隔5米试一次,看探测距离变化。如果是手工改参数、点运行、等结果、记数据,一晚上就耗进去了。用Python脚本可以把这个过程完全自动化。

AFSim安装目录下带有Python API库,可以在外部Python环境下调用,也能在软件内置的Python控制台中执行。以下是一个人任务中最常用到的脚本逻辑:

# 连接到正在运行的仿真实例 import afsim session = afsim.connect() # 修改雷达站高度 site = session.get_entity("RadarSite") site.position.altitude = 50 # 重置并启动仿真 session.reset() session.step(duration=600) # 运行600秒 # 导出检测事件 events = session.get_events(entity="RadarSite", type="Detection") for ev in events: print(ev.time, ev.target, ev.snr_db)

我实际用下来最大的感触是:脚本的价值不在“能跑”,而在“能批量跑、能复现、能自动出报表”。团队汇报时,同一个场景,只需要改动一个变量循环跑五次,就能画出一条性能曲线,远比五张截图有说服力。

Python API的文档在安装目录下的doc文件夹里有明确说明,每个函数都有参数列表、返回值类型和常见用例。初次上手时建议先把“获取实体”“修改属性”“步进仿真”“读取事件”这四个基础操作练熟,后面几乎所有脚本都是它们的排列组合。

5.2 自定义模型:当你需要仿真一个AFSim没有的设备

AFSim自带了一整套常用装备模型,但项目总有“自定义特殊装备”的需求。这时需要在SDK环境下用C++开发自定义Component。

整体流程是这样的:

定义组件类:继承AFSim提供的Component基类,实现初始化、更新、事件处理等虚函数。比如要做一个自定义雷达干扰机,就定义一个JammingComponent类,重写它的update()方法,在里面放干扰方程的计算逻辑。

编译组件库:把代码编译成动态链接库(Windows下DLL),放到AFSim的models目录下。编译需要用AFSim自带的SDK头文件和构建脚本,安装目录里自带示例工程,可以直接模仿。

加载组件:在场景里创建实体时,组件列表里就会出现你自定义的组件名称。选中它,填参数,跟使用内置组件一样。

这个功能的门槛在于需要C++编程能力,同时对AFSim内部的数据流有理解。建议从改造现有示例入手。安装目录的examples/models下有几个自定义组件的模板,比如一个简单传感器模型和一个简单通信模型。把它们编译通过、加载进场景看效果,再逐渐往里面加逻辑。

我个人的建议是:能用参数配置解决的问题就不要开发新组件。AFSim自带的模型已经内置了非常多的可调参数,很多所谓“新装备”其实只是现有模型参数组合的差异。真正需要写代码的,往往是原理上就有本质区别的设备(比如一种全新的干扰策略),这时候才值得动SDK。

5.3 分布式仿真与时间同步

单机仿真总有算力天花板。实体数量上千、场景范围覆盖整个战区级别时,一台再好的工作站也顶不住。AFSim支持分布式仿真部署,把不同区域的实体分配到不同计算节点上运行,节点之间通过网络同步状态。

架构上是典型的中央时间服务器模式:一台机器作为仿真主机(Host),管理全局时钟;其他节点作为客户端(Client),接收主机的时间步进指令,反馈本节点的运行结果。

实际配置的核心动作:

  • 在主机上启动Scenario,并选择“Distributed Run”模式。
  • 在客户端机器上启动AFSim,连接到主机IP和端口。
  • 配置每个节点负责的实体范围。

分布式模式下的性能瓶颈几乎都在网络延迟上。时间步长设到0.1秒以下,网络延迟稍微高一点就会导致节点之间状态不同步,现象就是“目标跳变”。如果确实需要更小的步长,可以考虑把节点之间通信的数据压缩率调高,或者物理链路换成万兆内网。

5.4 数据回放与批处理分析

项目评审时,经常需要把一次完整仿真过程展示给领导或甲方看。AFSim的模型运行速度可以多倍于真实时间,因此要逼真地回放,必须开启数据记录功能。

在仿真运行前,通过主菜单的Data Collection配置记录项。需要记录的数据包括:

  • 实体状态:位置、速度、姿态、每个时刻的整条航迹。
  • 传感器数据:检测事件、跟踪列表、SNR值。
  • 通信消息:数据包发送/接收时间、源/目的节点、内容摘要。

运行结束后,可以把记录文件在3D视景里回放,也可以在单独的Analysis工具里绘制各种曲线。对大批量评估来说,最好是把所有关注数据通过脚本一次性导出成CSV或MATLAB格式,再用外部工具统一分析。AFSim自己的二维绘图功能做了不少增强,但在复杂图表处理上还是外部工具更顺手。

6. 实战中一定会遇到的坑与排查经验

这个板块的内容,是我认为整篇博文里最有价值的部分。以下是这几年在AFSim使用过程中反复踩过、也帮别人排查过的典型问题。

6.1 安装与许可证相关的坑

现象一:软件启动即闪退。排查思路:先看License Manager是否显示有效授权。很多闪退是许可证没激活导致的,软件启动时检查授权不通过就自动退出。这时重新指定许可证文件,或者检查系统时间是否与授权服务器时间偏差过大。

现象二:装完后找不到某些示例场景。原因是安装类型不是Complete,把示例和模板组件给省略了。不需要重装软件,只需运行安装包里的“Modify/Repair”项,把缺失组件补装上。

现象三:杀毒软件误隔离启动组件。这个在2.9版本里仍有发生。处理方式是把AFSim安装目录加入杀毒软件信任区,然后重新安装被隔离的组件。

6.2 场景搭建与运行时的坑

现象一:实体位置显示“消失”或跑到地图外面。原因通常有两个,一是坐标系选择不对,二是经纬度/相对位置搞混。解决办法是在属性面板里明确查看实体的绝对经纬高坐标,看它到底在哪。

现象二:点击运行后,时间在走但所有实体都不动。先检查实体是否配置了运动组件。光有一个实体壳,没有Motion或Route,它是不会动的。这是新手最常见的错误。

现象三:雷达完全探测不到目标。排查方向从发射端往接收端走:

  • 发射功率是否为0。
  • 天线俯仰角是否覆盖到目标高度。
  • 目标RCS是否设了0(默认值有时很坑,会把隐身目标设为RCS=0)。
  • 检测门限是否不合理的高。

现象四:3D视景窗口黑屏,地图窗口正常。绝大多数情况是显卡驱动不支持特定OpenGL特性。升级显卡驱动;如果还不行,关闭阴影、反射等高级渲染效果后重试。

6.3 仿真结果与预期不符的处理思路

仿真结果出现偏差时,先不要怀疑是软件“坏了”。AFSim在逻辑上是很可靠的,绝大多数偏差都源于参数设置或模型理解错误。

我的排查顺序是:先看消息日志里有没报错或异常事件,确认运行过程没问题;然后单独检查传感器组件的核心参数(功率、增益、频率、扫描范围),看跟理论设计值是否一致;再检查目标的RCS、高度、速度是否合理;最后才是怀疑数值算法问题。这套流程帮我在五六个项目里快速定位到了问题,效率很高。

6.4 性能优化建议汇总

当场景规模一大,仿真速度骤降。几个实测有效的优化方向:

  • 关掉不需要的3D渲染。很多跑批任务根本不需要视觉显示,可以直接用命令行启动仿真,彻底绕过渲染开销。
  • 减少数据记录频率。默认记录每个时间步所有状态,文件会非常庞大。实际记录时,把步长加大到1秒或5秒,数据量缩小一到两个数量级,对结果分析影响很小。
  • 用模块化场景替代全量场景。把一个大场景拆成几个子场景分别运行,再把结果合并分析。AFSim支持这种“分而治之”的运行方式。
  • 升级硬件是最后手段。先优化配置,再考虑换机器。很多时候把日志等级降低、渲染关掉,性能问题就解决了。

写在最后的几句体会

AFSim 2.9这套工具,功能确实庞大,刚开始接触容易懵。但它的学习曲线其实是“陡而不长”,只要过了“场景-实体-组件”这个基本建模思路,后面全是熟练度的问题。

关于学习路径,我建议按这个顺序推进:先照着B站视频把安装和界面熟悉一遍,然后把本文第4节的雷达案例完整复现一遍,中间遇到概念就翻中文手册对应章节,跑通了再读第5节的高级功能。B站视频的实操演示配合手册的体系化文字,是目前中文环境里最舒服的上手方式。视频里每一步鼠标点击、菜单跳转都清晰可见,对照着自己操作一遍,能少走不少弯路。

我对AFSim 2.9最满意的地方,是它把复杂系统仿真的门槛降到了“不写代码也能搭出有意义的场景”这个程度,同时给高阶用户保留了足够的脚本化、二次开发空间。这种“深浅皆可”的工具设计,在同类软件里确实不多见。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询