• 用户手册
  • 通讯文档
  • Sdk接口
  • 实用工具
  • 常见问题
  • 更新日志

›SDK接口

快速上手

  • 简介

SDK接口

  • Api_V1
  • Api_V2
  • sdk/api_v6

Api_V2

  • V2源码发布版Sdk和V1动态库发布版的差异
  • V2源码发布版Sdk的目的
  • V2源码发布包的结构
  • V2源码发布包的使用方法
  • RMAxis类功能实现简介
  • Config.h的配置自定义
  • 连接轴

V2源码发布版Sdk和V1动态库发布版的差异

除了轴创建函数外并无其他不同。

V2源码发布版Sdk的目的

主要是为了解决以下问题

  1. V1版Sdk的共享库发布模式不方便用户深度集成
  2. 存在共享库跨平台兼容性问题
  3. c#/py等接口下的dll/config路径配置生产环境增加发布难度
  4. V1版Sdk中存在对RM CanOpen轴的通讯控制, 而CanOpen部分功能依赖于专用RMCanOpen调试器 不方便用户集成自己的硬件。

V2源码发布包的结构

根目录结构

路径功能
/sdk_common/sdk本体的c++11源码
/sdk_c/sdk的c99接口导出
/sdk_csharp/sdk的c#接口导出, 基于clr类
/sdk_py/sdk的py接口导出
/sdk_node/sdk的node接口导出
/sdk_java/sdk的java接口导出, 基于jni接口
/sdk_语言接口/待添加的其他接口支持

Sdk功能介绍

文件功能
/sdk_common/libmodbus依赖的modbus通讯库, lgplv2协议
/sdk_common/Config控制器寄存器地址配置等, 如需修改点位指令占用等修改此文件
/sdk_common/Exception通讯等异常抛出实现, 如需自定义异常可修改此文件
/sdk_common/ModbusModbus通讯库的简易封装
/sdk_common/RMAxisRM轴动作的封装

V2源码发布包的使用方法

  1. c++用户, 可以直接把sdk_common文件夹下的源码直接全部引入到工程文件中去, 然后包含RMAxis.h头文件即可使用
  2. c用户可以用/sdk_c/文件夹下的cmake生成并编译一个动态库导出给c项目使用
  3. c#用户, 打开/sdk_csharp/sdk_csharp.vcxproj工程文件, 右键项目属性配置所需要使用的x86/x64还有.net framework版本等, 确认后编译, 即可在生成文件夹获得编译出来的Sdk库dll文件。 在要使用的sdk的项目中右键添加引用并选中生成的dll即可。
  4. python用户, 在sdk_py文件夹下执行 sudo python3 setup.py install , 即可触发setup_tool 的自动编译安装, 自动编译安装成功后在python3 repl环境下 直接键入 import motormaster 即可导入sdk包。
import motormaster
axis = motormaster.create_axis_modbus_rtu('/dev/ttyUSB0', 115200, 0')
print(axis.get_version()) 

C++用户需要注意编译器需要支持最低c++11标准。

Linux Python用户需要注意, 使用setup_tool, 需要确保build_essentials和cmake已经安装, windows用户同样需要确保msvc和cmake的安装。

RMAxis类功能实现简介

对RM控制器的控制主要依赖于

  1. 对IO线圈寄存器的操作(触发执行/停止等动作)
  2. 对保持寄存器的读写(位置/推力等数据)

以回原点的实现为例

void RMAxis::go_home()
{
    this->set_input_signal("go_home", false);
    std::this_thread::sleep_for(IO_GAP_TIME);
    this->set_input_signal("go_home", true);
}
  1. 设置输入io信号"go_home" 为低
  2. 等待IO_GAP_TIME, 约10ms 消抖时间
  3. 再次设置输入io信号"go_home" 为高, 以上升沿触发 执行回原点操作

以触发特定index的点位指令的实现为例

void RMAxis::trig_command(int index)
{
    this->set_parameter<int>("selected_command_index", index);
    this->set_input_signal("start", false);
    std::this_thread::sleep_for(IO_GAP_TIME);
    this->set_input_signal("start", true);
}
  1. 写入保持寄存器"selected_command_index" 为 要触发的指令序号
  2. 设置输入io信号"start" 为低
  3. 等待IO_GAP_TIME, 约10ms 消抖时间
  4. 再次设置输入io信号"start" 为高, 以上升沿触发 执行点位指令操作

Config.h的配置自定义

  1. IO消抖时间
#define IO_GAP_TIME 10ms

因RM控制器的IO寄存器存在和外部IO映射的关系, 一般情况下为10ms, 如遇到通讯无法触发IO或者在极高速通讯时IO读写无动作的情况可以适当改大该值范围在 10ms ~ 100ms之间。

  1. SDK指令占用的控制器点位指令槽
#define EXECUTE_COMMAND_INDEX 15
#define COMMAND_REACH_SIGNAL "reach_15"

SDK执行绝对运动/相对运动/推压运动等时占用的控制器点位表位置, 默认情况为点位表最后一位第15条指令, 并以第15条指令到位为到位信号, 如有特殊需求可以修改该位置范围0~15。

  1. SDK所使用的参数
inline void init_parameters(std::map<std::string, param_t>& params)
{
    params["current_command_position"] =        { PARAM_FLOAT, PARAM_NORMAL, 4902 };
    // ...
}

该函数会在sdk被初始化的时候调用, 并初始化参数表的地址。 params["参数名字"] = { 参数数据类型, 参数编辑级别, 参数地址 } 一般情况下无需对其做出改动, 如有变更需要联系技术售服协助修改。

连接轴

C
CPP
CSharp
Python
// 函数原型
rm_handle_t rm_create_modbus_rtu(const char* device, int baudrate, uint8_t slave_id);
rm_handle_t rm_create_modbus_tcp(const char* address, int port, uint8_t slave_id);

// 使用示例
rm_axis_handle handle = rm_create_modbus_rtu("\\\\.\\COM8", 115200, 0);
rm_axis_handle handle = rm_create_modbus_tcp("192.168.50.9", 502, 0);
// 函数原型
static RMAxis* create_rmaxis_modbus_rtu(std::string device, int baudrate, uint8_t slave_id);
static RMAxis* create_rmaxis_modbus_tcp(std::string address, int port, uint8_t slave_id);

// 使用示例
auto axis = RMAxis::create_rmaxis_modbus_rtu("\\\\.\\COM8", 115200, 0);
auto axis = RMAxis::create_rmaxis_modbus_tcp("192.168.50.9", 502, 0);
// 函数原型
public static Axis CreateModbusRtu(string device, int baudrate, ushort slave_id);
public static Axis CreateModbusTcp(string address, int port, ushort slave_id);

// 使用示例
var axis = Axis.CreateModbusRtu("\\\\.\\COM8", 115200, 0);
var axis = Axis.CreateModbusTcp("192.168.50.9", 502, 0);
## 函数原型
def create_axis_modbus_rtu(device, baudrate, axis_no):
def create_axis_modbus_tcp(address, port, slave_id):

## 使用示例
axis = sdk.create_axis_modbus_rtu('\\\\.\\COM8', 115200, 0)
axis = sdk.create_axis_modbus_tcp('192.168.50.9', 502, 0)
变量描述
device串口设备 \\.\COM8 或 /dev/ttyS0 等
baudrate波特率
slave_id轴号
变量描述
addressip地址
port端口
slave_id轴号

连接到指定设备上的控制器。

Last updated on 8/8/2023
← Api_V1sdk/api_v6 →
开发资料
通讯参数Sdk接口常见问题更新日志
更多
产品资料微信公众号技术支持
Copyright © 2024 佛山市增广智能科技有限公司
备案/许可证号:粤ICP备19021060号