ADAMS与外部程序通信(Adams Command Server)
2017-09-29 09:41
751 查看
The Adams Command Server is an Adams View (or Adams Car) component that manages communication between Adams View and external software. Examples of external software include user-written applications created in Microsoft Visual Basic, Python, C, Java or similar. The server listens for either commands or queries from an external application and manages the command or query interaction with the Adams model. The server has a simple interface that is accessible from other programming languages that implement the TCP/IP communication protocol. The server also contains an interface for Microsoft Visual Basic that simplifies the communication protocol.
多体动力学仿真软件ADAMS可以通过Adams Command Server与外部程序进行TCP通信。首先需要打开ADAMS中的服务端,在Tool→Command Navigator中找到command_server,点击show会弹出一个图形界面的对话框。可以在对话框上点击Start Server开启服务器。如下图所示5002端口已经开启,可以通过TCP socket接收字符串指令:
由于控制或查询指令通过TCP以字符串形式发送给command server,因此客户端程序可以采用Python、C++等语言编写,只要指令是合法有效的Adams View Commands(具体语法可以参考官方文档中的Adams View Command Language Help)。外部程序发送的字符串指令主要分为两种,一种是以cmd开头的控制指令,另一种是以query开头的查询指令:
cmd指令在相对于ground的(10, 15, 10)位置处创建了一个点,命名为POINT_1:
发送指令后收到cmd:0,说明指令执行成功
连续发送多条控制指令时必须通过新建的socket,下面代码创建了一个整型设计变量integer_numbers,然后又将其指改为16:
输出如下:
参考:
Adams/2017/help/adams_view/Exchanging Data in Adams / Adams Command Server
Command Language Help
多体动力学仿真软件ADAMS可以通过Adams Command Server与外部程序进行TCP通信。首先需要打开ADAMS中的服务端,在Tool→Command Navigator中找到command_server,点击show会弹出一个图形界面的对话框。可以在对话框上点击Start Server开启服务器。如下图所示5002端口已经开启,可以通过TCP socket接收字符串指令:
由于控制或查询指令通过TCP以字符串形式发送给command server,因此客户端程序可以采用Python、C++等语言编写,只要指令是合法有效的Adams View Commands(具体语法可以参考官方文档中的Adams View Command Language Help)。外部程序发送的字符串指令主要分为两种,一种是以cmd开头的控制指令,另一种是以query开头的查询指令:
Issuing Commands
import socket client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(("localhost", 5002)) # formulate valid Adams View command language that starts with the string "cmd" cmd = "cmd point create point_name = POINT__1 location = 10 , 15 , 10 relative_to = ground " client_socket.send(cmd) # receives feedback from the server. The server responds with the string "cmd: 0" for successful command processing response = client_socket.recv(1024) print response # Returns: cmd: 0 (on success) cmd: 1 (error detected in View command)
cmd指令在相对于ground的(10, 15, 10)位置处创建了一个点,命名为POINT_1:
发送指令后收到cmd:0,说明指令执行成功
连续发送多条控制指令时必须通过新建的socket,下面代码创建了一个整型设计变量integer_numbers,然后又将其指改为16:
import socket import time cmds = ["cmd variable create variable_name=integer_numbers integer_value=12 range=10,20", "cmd variable set variable_name=integer_numbers integer_value=16"] # Each command must be sent to the server over a new socket for cmd in cmds: client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) start_time = time.time() dt = time.time() - start_time while dt < 60: # wait for a new server connection: dt = time.time() - start_time try: client_socket.connect(("localhost", 5002)) break except socket.error: pass print "Connected to socket, sending cmd: %s" % cmd client_socket.send(cmd) data = client_socket.recv(1024) print "Response from cmd was: %s" % data
Issuing Queries
下面代码查询了零件PART_2的位置信息:import socket # create a socket & connect to the proper port/host client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(("localhost", 5002)) # queries must always start with the string "query" followed by an Adams View expression the_query = "query part_2.location" client_socket.send(the_query) # server replies with a description of the data query_description = client_socket.recv(1024) # Description of result: query: float : 3 : 12 # server waits for an "OK" command before sending the actual data client_socket.send("OK") query_data = client_socket.recv(1024) # accepts the actual server data # parse query data based on type: description_list = query_description.split(':') data_type = description_list[1] data_length = int(description_list[2]) data_bytes = int(description_list[3]) print "Query returned %i values of data type %s" % (data_length, data_type) print "Query data as a string is: %s" % query_data
输出如下:
参考:
Adams/2017/help/adams_view/Exchanging Data in Adams / Adams Command Server
Command Language Help
相关文章推荐
- 一个有用的Windows服务小程序——用来完成Server端的Socket通信[转载]
- Android中与外部进程通信和调用外部程序
- Flash与外部程序之间的通信
- 【Little_things】简单的Client/Server通信小程序(java socket)
- 解决VS2010 command prompt error:nmake 不是内部或外部命令,也不是可运行的程序或批处理文件
- 深入Boost.asio的异步Tcp通信的server、client,可用来当程序骨架。
- Qt Creator错误:“command failed with exit code 9009, 'cl' 不是内部或外部命令,也不是可运行的程序”
- Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
- 简单的网络通信程序,客户端发送hello,server 服务器反馈 ok UDP
- delphi不同计算机程序间通信用TServerSocket实现
- Android中与外部进程通信和调用外部程序
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序
- 最简单client和server通信程序
- 最简单client和server通信程序
- vue中"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序"的报错
- hMailserver设置外部反病毒扫描程序
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序
- EM界面 ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的 SID (DBD ERROR: OCIServerAttach)
- Rayeager PX2测试tcp与PC机通信的测试程序分享
- Unix socket server 程序的设计方法