ADAMS与外部程序通信(Adams Command Server)

  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开头的查询指令:
  • 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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
car与simulink联合仿真大总结-car与simulink联合仿真大总结.rar 一直困扰我的acar与simulink联合仿真今天终于做通了,以发此贴给大家一些建议。我做的这个例子很简单,主要目的是将acar和simulink调通。 使用的软件平台:adams2005r2,matlab7.01 步骤如下: 1, 打开car的例子mdi_demo_vehicle_it,在tools/plugin manger中调出controls 安装如下图片设置control: 然后按ok键 2, 对整车进行仿真,安装如下的图片进行设置,注意mode of simulation选择为files_only. 3, 按ok之后产生几个文件 4, 在matlab中用编辑器打开Controls_Plant_1.m 修改ADAMS_prefix = ' Controls_Plant_1' ;为ADAMS_prefix = 'AA_iso_lane_change' 5, 打开AA_iso_lane_change.m文件,将ADAMS_outputs修改为'testrig.steering_wheel_angle'; 6, 将ADAMS_init = 'file/command=Controls_Plant_1_controls.acf' ;改为ADAMS_init = 'file/command=AA_iso_lane_change_controls.acf' ; 7, 打开matlab,在光标后输入Controls_Plant_1,出现 %%% INFO : ADAMS plant actuators names : 1 testrig.steering_wheel_torque %%% INFO : ADAMS plant sensors names : 1 testrig.steering_wheel_angle 再输入adams_sys弹出一个adams_sub的plant 8, 新建一个simulink model,将adams_sub放入这个控制系统中系统中,plant的输入是转向力矩(再这里是个正弦函数副值为150),输出是转向角度。 9, 设置adams_sub的参数 其中output files prefix设置为‘AA_iso_lane_change’其他的参数如图所示。所建立的控制框图如下,注意这是个开环系统。 点击simulink上的仿真按钮,会弹出adams的dos框图,adams进行不断的迭代,直到仿真结束。 10, 仿真结束之后产生的文件有 这些文件可以在adams的后处理中使用。 11, 个人感觉最重要的的几点就是:将adams_server.py,adams_plant.dll,decode.m这三个文件找到(这三个文件在我的附件中),放入当前的工作目录,这样可以大大减少出错的机会,还有就是adams和matlab的工作目录选为同一个工作目录。Car与simulink仿真 和 view与simulink仿真有点区别的地方就是文件名要一直,否则很容易出问题,这就是为什么要修改m文件的原因所在。 Duanxc314于06.5.19

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值