Adams与外部程序通信:Command Server应用

多体动力学仿真软件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开头的查询指令:

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  

输出如下:

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空