python opc

时间: 2023-08-16 11:15:37 浏览: 32
OPC (OLE for Process Control) is a set of standards and specifications for industrial automation and control systems. It stands for Object Linking and Embedding (OLE) for Process Control. OPC allows different software applications to communicate with each other and exchange data in real-time. In Python, you can utilize OPC functionality using libraries such as "pyOPC" or "pyOPC-UA" to connect to OPC servers, read data from tags, write data to tags, and perform other operations. These libraries provide an interface to interact with OPC servers using Python code. Here is an example of how you can use the "pyOPC-UA" library to connect to an OPC server and read a tag: ```python from opcua import Client url = "opc.tcp://localhost:4840" # OPC server URL client = Client(url) try: client.connect() # Connect to the OPC server node = client.get_node("ns=2;s=MyTag") # Get the node representing the tag you want to read value = node.get_value() # Read the value of the tag print("Tag value:", value) finally: client.disconnect() # Disconnect from the OPC server ``` Please note that the specific implementation details may vary depending on the OPC library you choose and the OPC server you are working with. Also, make sure to install the required library using pip before running the code.

相关推荐

Python OPC UA客户端是使用Python编程语言开发的一种工具,用于与OPC UA服务器进行通信和交互。OPC UA是一种开放式标准,用于实现工业自动化系统中不同设备和系统之间的通信。 Python OPC UA客户端提供了一些功能,使用户能够连接到OPC UA服务器,读取和写入数据,订阅和发布事件,以及执行其它操作。 要使用Python OPC UA客户端,首先需要安装相应的Python库,如FreeOpcUa和Python-opcua。然后,可以通过编写相应的Python代码来实现连接到OPC UA服务器的功能。以下是一个简单的示例代码: from opcua import Client # 连接到OPC UA服务器 client = Client("opc.tcp://localhost:4840") # 连接到服务器 client.connect() # 从服务器读取数据 node = client.get_node("ns=2;i=1001") value = node.get_value() # 向服务器写入数据 node.set_value(42) # 订阅服务器事件 handler = lambda event: print("Event received:", event) sub = client.create_subscription(500, handler) sub.subscribe_events(node) # 执行其它操作 # ... # 断开与服务器的连接 client.disconnect() 上述代码示例了如何连接到OPC UA服务器,读取数据,写入数据,订阅事件和执行其它操作。在实际使用中,可以根据具体需求进行修改和扩展。 Python OPC UA客户端提供了一个方便的方式,使用户能够与OPC UA服务器进行通信,并实现自动化控制和监控等功能。对于工业自动化和物联网应用来说,Python OPC UA客户端是一个强大而灵活的工具。
处理Python与OPC通讯的一种方法是使用OPC UA库。OPC UA(Open Platform Communications Unified Architecture)是一种通用的工业自动化通信协议,允许不同设备和系统之间进行数据交换。 在Python中,可以使用opcua库来实现与OPC服务器的通讯。首先,你需要安装opcua库。可以使用以下命令来安装: pip install opcua 接下来,你可以使用以下示例代码连接到OPC服务器并读取数据: python from opcua import Client # 连接到OPC服务器 client = Client("opc.tcp://localhost:4840/") # 替换为你的OPC服务器地址 client.connect() # 访问节点并读取数据 node = client.get_node("ns=2;i=1234") # 替换为你要访问的节点ID data = node.get_value() # 打印数据 print("Data:", data) # 断开连接 client.disconnect() 在上面的示例代码中,我们首先创建了一个Client对象,并使用connect()方法连接到OPC服务器。然后,我们使用get_node()方法获取要访问的节点,并使用get_value()方法读取该节点的值。最后,我们使用disconnect()方法断开与OPC服务器的连接。 请注意,示例中的地址和节点ID是示范用途的,你需要根据实际情况替换为你的OPC服务器地址和节点ID。 这只是一个简单的示例,你可以根据具体需求进行扩展和修改。另外,opcua库还提供了其他一些功能,例如写入数据和订阅数据变化等。你可以查阅opcua库的官方文档以获取更多详细信息。
在Python中,使用OPCUA模块进行OPC UA的编程时,如果需要实现重连功能,可以通过以下步骤实现: 1. 首先,导入所需的模块和库,例如opcua和time。 2. 创建一个函数,用于连接到OPC UA服务器。在函数内部,使用opcua.Client类创建一个客户端对象,并使用client.connect()方法连接到服务器。 3. 在连接成功后,可以执行其他操作,例如读取或写入变量值。 4. 如果连接断开,可以使用client.disconnect()方法断开连接。 5. 在需要重连的情况下,可以在连接断开后的一段时间后重新连接。可以使用time.sleep()函数来延迟重连的时间。 6. 在重连时,可以再次调用连接函数来重新连接到服务器。 下面是一个示例代码,演示了如何实现OPC UA的重连功能: python import opcua import time def connect_to_server(): client = opcua.Client("opc.tcp://localhost:4840") # 连接到OPC UA服务器 client.connect() # 连接到服务器 # 执行其他操作,例如读取或写入变量值 # ... return client def reconnect(): while True: try: client = connect_to_server() # 重新连接到服务器 break except opcua.ua.uaerrors.BadConnectionClosedError: print("连接断开,正在尝试重新连接...") time.sleep(5) # 延迟重连的时间 # 执行其他操作,例如读取或写入变量值 # ... # 主程序 client = connect_to_server() # 执行其他操作,例如读取或写入变量值 # ... # 在需要重连的情况下 reconnect() 在上述示例代码中,connect_to_server()函数用于连接到OPC UA服务器,reconnect()函数用于实现重连功能。在主程序中,首先连接到服务器,然后执行其他操作。如果连接断开,将会尝试重新连接。 #### 引用[.reference_title] - *1* *2* [Python-opcua 编程(1)](https://blog.csdn.net/yaojiawan/article/details/131162849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python 通过OPC UA 连接PLC](https://blog.csdn.net/yaojiawan/article/details/131013056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
### 回答1: OPC(开放式连续控制协议)是一种通讯协议,用于连接工业控制系统(ICS)和计算机系统,以实现实时监测和控制的需求。 在 Python 中,你可以使用第三方库 freeopcua 来实现 OPC 服务器和客户端互相发送信息。以下是一个简单的实例: # 服务器端代码 import time import sys import FreeCAD from opcua import Server server = Server() url = "opc.tcp://localhost:4840" server.set_endpoint(url) name = "OPCUA_Server_Test" addspace = server.register_namespace(name) node = server.get_objects_node() Param = node.add_object(addspace, "Parameters") temp = Param.add_variable(addspace, "Temperature", 0) temp.set_writable() server.start() print("Server started at {}".format(url)) while True: time.sleep(1) # 客户端代码 import sys import time import FreeCAD from opcua import Client client = Client("opc.tcp://localhost:4840/") client.connect() print("Client connected to OPC UA Server") while True: try: temp = client.get_node("ns=1;i=1002") temperature = temp.get_value() print("Temperature: ", temperature) time.sleep(1) except KeyboardInterrupt: client.disconnect() sys.exit(0) 上面的代码实现了一个服务器端,监听来自客户端的请求,并且客户端连接到服务器端并不断读取数据。你可以修改代码以实现自己的需求。 ### 回答2: Python OPC服务器和客户端可以通过互相发送信息来实现数据交换。OPC(OLE for Process Control,工业自动化控制系统的标准)是一种通信协议,用于在工业控制系统中传输数据。 下面是使用Python编写的简单示例,演示了如何在Python OPC服务器和客户端之间互相发送信息。 首先,我们需要安装所需的Python库。使用pip命令安装opcua库。 pip install opcua 然后,我们创建一个Python OPC服务器。服务器将在本地主机的地址opc.tcp://localhost:4840上运行,监听来自客户端的连接。 python from opcua import ua, Server server = Server() server.set_endpoint("opc.tcp://localhost:4840") # 创建命名空间 uri = "my_namespace_uri" idx = server.register_namespace(uri) # 添加对象到根节点 objects = server.get_objects_node() myObject = objects.add_object(idx, "MyObject") # 添加变量到对象 myVar = myObject.add_variable(idx, "MyVariable", 0) myVar.set_writable() # 启动服务器 server.start() print("OPC服务器已启动") # 持续更新变量值 count = 0 while True: myVar.set_value(count) count += 1 上述代码创建了一个名为MyVariable的变量,并不断更新其值。 接下来,我们创建一个Python OPC客户端,以连接到上述服务器并获取变量的值。 python from opcua import ua, Client # 创建客户端 client = Client("opc.tcp://localhost:4840") client.connect() # 获取根节点 root = client.get_root_node() # 获取对象和变量 myObject = root.get_child(["0:Objects", "2:MyObject"]) myVar = myObject.get_child(["2:MyVariable"]) # 获取并打印变量的值 value = myVar.get_value() print("变量值:", value) # 断开客户端连接 client.disconnect() 上述代码创建了一个客户端,并连接到本地主机的opc.tcp://localhost:4840地址上的OPC服务器。然后,它获取了服务器上的变量并打印其值。 这是一个简单的示例,演示了如何在Python OPC服务器和客户端之间互相发送信息。根据实际需求,可以进一步扩展和定制服务器和客户端的功能。 ### 回答3: Python OPC(OLE for Process Control)服务器和客户端是用于在工业自动化系统中进行数据交互的重要工具。服务器是用来提供数据的地方,而客户端则用来请求并接收这些数据。 下面是一个简单的Python OPC服务器和客户端互相发送信息的实例: python # OPC服务器端示例 from opcua import Server # 创建服务器对象 server = Server() # 添加一个命名空间 uri = "opc.tcp://localhost:4840" server.set_endpoint(uri) name = "OPCServer" addspace = server.register_namespace(name) # 创建节点对象并添加根节点 root_node = server.get_objects_node() object_node = server.get_objects_node().add_object(addspace, "Object") # 添加变量节点 var_node = object_node.add_variable(addspace, "Variable", 0) # 启动服务器 server.start() # 循环更新变量值 count = 0 while True: count += 1 var_node.set_value(count) time.sleep(1) # 关闭服务器 server.stop() python # OPC客户端示例 from opcua import Client # 创建客户端对象 client = Client("opc.tcp://localhost:4840") # 连接到OPC服务器 client.connect() # 获取服务器对象 objects = client.get_objects_node() # 获取变量节点对象 var_node = objects.get_child(["0:opcserver", "0:Object", "0:Variable"]) # 循环读取变量值 while True: value = var_node.get_value() print("Variable value:", value) time.sleep(1) # 断开连接 client.disconnect() 以上示例中,OPC服务器通过创建变量节点,并在循环中更新该节点的值,客户端则通过连接到服务器,并在循环中读取该节点的值。通过这种方式,服务器和客户端可以互相发送信息并交换数据。 在实际应用中,可以根据需要添加更多的节点和变量,以及相应的读写操作来满足特定的数据交互需求。
### 回答1: 首先,您需要安装 python-opcua 库,可以使用以下命令完成安装: pip install opcua 然后,以下是简单的客户端和服务端代码: 客户端代码: from opcua import Client # 建立客户端连接 client = Client("opc.tcp://localhost:4840/") client.connect() # 获取服务端节点 root = client.get_root_node() print("Root node is: ", root) # 关闭客户端连接 client.disconnect() 服务端代码: from opcua import Server # 建立服务端对象 server = Server() # 启动服务端 url = "opc.tcp://0.0.0.0:4840/" server.set_endpoint(url) # 设置服务端名称空间 name = "MyServer" addspace = server.register_namespace(name) # 启动服务端事件循环 server.start() # 停止服务端 server.stop() 客户端代码将连接到服务端,然后获取服务端根节点。服务端代码将启动一个OPC-UA服务器并设置名称空间。希望这些代码能帮助您解决您的问题。 ### 回答2: 使用Python编写OPC UA客户端和服务器代码可以实现互相通信。下面是一个简单的示例代码: 服务器端代码(server.py): from opcua import Server # 创建服务器 server = Server() # 添加命名空间 uri = "opcua.example" ns = server.register_namespace(uri) # 定义对象和变量类型 obj = server.get_objects_node().add_object(ns, "Object") var = obj.add_variable(ns, "Variable", 0) # 设置对象和变量值 var.set_writable() # 启动服务器 server.start() print("Server started!") while True: value = input("输入要设置的变量值:") var.set_value(int(value)) 客户端代码(client.py): python from opcua import Client # 连接服务器 url = "opc.tcp://localhost:4840" client = Client(url) client.connect() # 获取对象和变量节点 obj = client.get_objects_node().get_child("2:Object") var = obj.get_child("2:Variable") # 读取变量值 value = var.get_value() print("变量值:", value) # 设置变量值 new_value = int(input("输入要设置的变量值:")) var.set_value(new_value) # 断开连接 client.disconnect() 以上是一个简单的OPC UA客户端和服务器互相通信的示例代码。通过服务器端定义对象和变量,客户端可以连接服务器并访问对象和变量节点。客户端可以读取和设置服务器端的变量值,实现双方的通信。 ### 回答3: 下面是一个使用Python OPC UA库编写的客户端和服务端互相通信的基本代码示例: 服务端代码: python from opcua import Server, ua # 初始化服务器 server = Server() url = "opc.tcp://localhost:4840" server.set_endpoint(url) # 创建名称空间 uri = "urn:myserver" idx = server.register_namespace(uri) node = server.get_objects_node() # 创建对象 obj = node.add_object(idx, "MyObject") var = obj.add_variable(idx, "MyVariable", 0) var.set_writable() # 启动服务器 server.start() print("Server started at {}".format(url)) try: while True: value = float(input("Enter a value to update the variable: ")) var.set_value(value) except KeyboardInterrupt: server.stop() print("Server stopped.") 客户端代码: python from opcua import Client # 连接到服务器 client = Client("opc.tcp://localhost:4840") client.connect() # 读取变量的值 var_node = client.get_node("ns=2;i=2") value = var_node.get_value() print("Current value of the variable: {}".format(value)) # 更新变量的值 new_value = float(input("Enter a new value to update the variable: ")) var_node.set_value(new_value) print("Variable updated successfully.") # 断开连接 client.disconnect() 要使这两个代码能够正常工作,请确保已通过pip安装了opcua库,将服务端代码保存为server.py并运行,在另一个终端中运行客户端代码。
### 回答1: "The node id refers to a node that does not exist in the server address space" 这个错误信息通常意味着您在尝试访问的OPC服务器上不存在所请求的节点。 解决方案如下: 1. 确保您正在使用正确的节点ID。 2. 确保OPC服务器已正确配置并正在运行。 3. 如果您是从数据库或其他来源获取节点ID,请检查这些资源是否已更新或是否存在错误。 4. 尝试使用不同的客户端软件连接OPC服务器,以确定问题是否在客户端还是在服务器端。 如果以上方法都不能解决问题,建议您寻求技术支持或者在OPC服务器和客户端相关的论坛上寻求帮助。 ### 回答2: 在Python中,OPC通信出现"The node id refers to a node that does not exist in the server address space"这个错误通常是由于以下几个原因引起的: 1. 服务器端没有对应的节点:这种情况下,需要确认服务器端是否存在与所请求的节点相匹配的节点。可以使用OPC客户端软件查看服务器的地址空间,检查是否存在请求的节点。 2. 节点ID输入错误:请检查所使用的节点ID是否正确。可能是由于输入错误导致的。可以再次检查节点ID,并确保使用正确的语法和命名约定(例如,使用点符号来分隔节点的命名空间)。 3. 服务器信息不正确:请确保在使用OPC客户端连接到服务器时,提供了正确的服务器信息,如服务器地址、端口号和连接类型等。这些参数都需要正确配置,才能与服务器建立连接并访问节点。 解决此错误的方法包括: 1. 确认服务器是否存在请求的节点,并且节点ID输入正确。 2. 检查服务器信息是否正确配置。 3. 确认所使用的OPC客户端库是否支持所需的通信协议。 4. 尝试使用其他OPC客户端软件连接到服务器,以验证是否存在连接问题。 5. 可以参考Python OPC库的文档或示例代码,以了解如何正确配置和使用该库进行通信。 如果上述方法仍然无法解决问题,可能需要更详细的调试信息来确定问题的根本原因。可以查看Python的日志文件或尝试使用调试工具来进一步分析和解决问题。 ### 回答3: 出现"The node id refers to a node that does not exist in the server address space"错误通常是由于在服务器地址空间中找不到指定的节点引起的。要解决这个问题,可以采取以下步骤: 1. 检查节点ID:检查代码中指定的节点ID是否正确。确认节点ID与服务器地址空间中存在的节点相匹配。可以查看OPC服务器或文档以获取正确的节点ID。 2. 检查服务器连接:确保与OPC服务器的连接正常。检查网络连接是否正常并确保能够访问服务器。可以尝试重新连接服务器或重新启动OPC服务器以确保连接正常。 3. 检查服务器地址空间:检查OPC服务器的地址空间,确认是否存在指定的节点。可以使用OPC客户端工具(如OPC Scout)来检查服务器的地址空间,以确保节点存在。 4. 更新OPC客户端:确保使用的OPC客户端库或软件是最新版本。有时,旧版本的OPC客户端可能出现与服务器地址空间不匹配的问题。更新到最新版本可能会解决此问题。 5. 检查权限:某些情况下,访问某些节点可能需要特定的权限。检查是否具有足够的权限来访问服务器的节点。如果没有正确的权限,联系服务器管理员添加所需的权限。 如果以上步骤都没有解决问题,可以尝试联系OPC服务器的技术支持团队或查阅相关文档,以获取更详细的错误信息和解决方案。
Python OpenOPC Server是一个用Python编写的开放式OPC服务器。OPC(OLE for Process Control)是一种通信协议,用于连接和交换不同设备和应用程序之间的数据。 Python OpenOPC Server可以用于创建一个可以通过OPC协议与其他设备和应用程序进行通信的服务器。它可以作为中间人,接收来自客户端的请求,并将其转发给对应的设备或应用程序。 Python OpenOPC Server具有以下特点: 1. 灵活性:由于它使用Python编写,因此可以轻松地进行自定义和扩展。用户可以根据自己的需求对其进行定制,添加新的功能或修改现有功能。 2. 跨平台:Python是一种跨平台的编程语言,因此Python OpenOPC Server可以在各种操作系统上运行,包括Windows、Linux和Mac。 3. 易于使用:Python OpenOPC Server提供了简单易用的API,使用户能够快速上手并使用服务器功能。 4. 强大的性能:Python OpenOPC Server使用了一些效率优化的技术,以确保高性能和低延迟的数据交换。 使用Python OpenOPC Server,用户可以轻松地实现与其他OPC客户端和设备的数据交互。它可以用于监测和控制各种设备,如传感器、工业控制系统等。同时,它也可以与其他应用程序进行数据交换,如数据采集、数据分析等。 总结起来,Python OpenOPC Server是一个功能强大、易于使用和灵活定制的开源OPC服务器,可以用于构建各种应用程序和设备之间的数据交互。

最新推荐

基于python的opc读写和导入MSSQL/MYSQL

KepOPC是基于python语言自主开发的OPC client(OPC客户端)中间件软件,他支持目前市面上绝大多数国内外OPC SERVER的OPC DA协议的数据读写,如(Kepserver、Matrikon、GE IGS、亚控、力控等),不同的是KepOPC实时...

ChatGPT技术在客户服务中的应用效果与用户满意度评估.docx

ChatGPT技术在客户服务中的应用效果与用户满意度评估

学科融合背景下“编程科学”教学活动设计与实践研究.pptx

学科融合背景下“编程科学”教学活动设计与实践研究.pptx

ELECTRA风格跨语言语言模型XLM-E预训练及性能优化

+v:mala2277获取更多论文×XLM-E:通过ELECTRA进行跨语言语言模型预训练ZewenChi,ShaohanHuangg,LiDong,ShumingMaSaksham Singhal,Payal Bajaj,XiaSong,Furu WeiMicrosoft Corporationhttps://github.com/microsoft/unilm摘要在本文中,我们介绍了ELECTRA风格的任务(克拉克等人。,2020b)到跨语言语言模型预训练。具体来说,我们提出了两个预训练任务,即多语言替换标记检测和翻译替换标记检测。此外,我们预训练模型,命名为XLM-E,在多语言和平行语料库。我们的模型在各种跨语言理解任务上的性能优于基线模型,并且计算成本更低。此外,分析表明,XLM-E倾向于获得更好的跨语言迁移性。76.676.476.276.075.875.675.475.275.0XLM-E(125K)加速130倍XLM-R+TLM(1.5M)XLM-R+TLM(1.2M)InfoXLMXLM-R+TLM(0.9M)XLM-E(90K)XLM-AlignXLM-R+TLM(0.6M)XLM-R+TLM(0.3M)XLM-E(45K)XLM-R0 20 40 60 80 100 120触发器(1e20)1介绍使�

docker持续集成的意义

Docker持续集成的意义在于可以通过自动化构建、测试和部署的方式,快速地将应用程序交付到生产环境中。Docker容器可以在任何环境中运行,因此可以确保在开发、测试和生产环境中使用相同的容器镜像,从而避免了由于环境差异导致的问题。此外,Docker还可以帮助开发人员更快地构建和测试应用程序,从而提高了开发效率。最后,Docker还可以帮助运维人员更轻松地管理和部署应用程序,从而降低了维护成本。 举个例子,假设你正在开发一个Web应用程序,并使用Docker进行持续集成。你可以使用Dockerfile定义应用程序的环境,并使用Docker Compose定义应用程序的服务。然后,你可以使用CI

红楼梦解析PPT模板:古典名著的现代解读.pptx

红楼梦解析PPT模板:古典名著的现代解读.pptx

大型语言模型应用于零镜头文本风格转换的方法简介

+v:mala2277获取更多论文一个使用大型语言模型进行任意文本样式转换的方法Emily Reif 1页 达芙妮伊波利托酒店1,2 * 袁安1 克里斯·卡利森-伯奇(Chris Callison-Burch)Jason Wei11Google Research2宾夕法尼亚大学{ereif,annyuan,andycoenen,jasonwei}@google.com{daphnei,ccb}@seas.upenn.edu摘要在本文中,我们利用大型语言模型(LM)进行零镜头文本风格转换。我们提出了一种激励方法,我们称之为增强零激发学习,它将风格迁移框架为句子重写任务,只需要自然语言的指导,而不需要模型微调或目标风格的示例。增强的零触发学习很简单,不仅在标准的风格迁移任务(如情感)上,而且在自然语言转换(如“使这个旋律成为旋律”或“插入隐喻”)上都表现出了1介绍语篇风格转换是指在保持语篇整体语义和结构的前提下,重新编写语篇,使其包含其他或替代的风格元素。虽然�

xpath爬虫亚马逊详情页

以下是使用XPath爬取亚马逊详情页的步骤: 1. 首先,使用requests库获取亚马逊详情页的HTML源代码。 2. 然后,使用lxml库的etree模块解析HTML源代码。 3. 接着,使用XPath表达式提取所需的数据。 4. 最后,将提取的数据保存到本地或者数据库中。 下面是一个简单的示例代码,以提取亚马逊商品名称为例: ```python import requests from lxml import etree # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x

基于Internet的数据安全上传软件设计.doc

基于Internet的数据安全上传软件设计.doc

无监督视频对象分割的层次特征对齐网络(HFAN)

+v:mala2255获取更多论文用于无监督视频对象分割的裴根生1,沈福民2(),姚亚洲1,谢国森1(),唐振民1,唐金辉11南京理工大学,中国yazhou. njust.edu.cn2电子科技大学,中国https://github.com/NUST-Machine-Intelligence-Laboratory/HFAN抽象的。 光流是一个容易构思和宝贵的线索,为推进无监督视频对象分割(UVOS)。以往的方法大多是在UVOS环境下直接提取和融合运动和外观特征来分割目标对象。然而,光流本质上是连续帧中所有像素的瞬时速度,从而使得运动特征与对应帧中的主要对象为了解决上述挑战,我们提出了一个简洁,实用,高效的外观和运动特征对齐架构,被称为层次特征对齐网络(HFAN)。具体而言,HFAN中的关键优点是顺序特征匹配(FAM)模块和特征匹配(FAT)模块,其用于分层地处理表观和运动特征FAM能够分别将外观和运动特征与主要对象语义表�