6 个版本
使用旧的 Rust 2015
0.1.0-beta0 | 2018年5月25日 |
---|---|
0.1.0-alpha4 | 2018年5月21日 |
#1151 in 硬件支持
49KB
1K SLoC
TMCL.rs
在 Rust 中使用 Trinamic 运动控制语言 (TMCL)
许可协议
根据您的选择,许可协议为以下之一:
-
Apache 许可协议,版本 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
-
MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义的,任何有意提交以包含在工作中的贡献,都应如上所述双重许可,不附加任何额外条款或条件。
lib.rs
:
TMCL - Trinamic 运动控制语言
如TMCL 参考中所述
示例
Socketcan
要使用此示例,必须启用 socketcan 功能。并且必须存在名为 vcan0
的 socketcan 接口。
extern crate tmcl;
extern crate socketcan;
use std::cell::RefCell;
use tmcl::modules::tmcm::instructions::*;
use tmcl::modules::tmcm::axis_parameters::*;
use tmcl::modules::tmcm::TmcmModule as Module;
fn main() {
# std::process::Command::new("sudo ip link add dev vcan0 type vcan").output();
# std::process::Command::new("sudo ip link set up vcan0").output();
let interface = RefCell::new(socketcan::CANSocket::open("vcan0").unwrap());
let module1 = Module::new(&interface, 1);
let module2 = Module::new(&interface, 2);
module1.write_command(ROR::new(0, 250)).unwrap();
module2.write_command(ROL::new(0, 250)).unwrap();
}
Socketcan 和多线程
要使用此示例,必须启用 socketcan 功能。并且必须存在名为 vcan0
的 socketcan 接口。
extern crate tmcl;
extern crate socketcan;
use std::sync::Mutex;
use std::sync::Arc;
use tmcl::modules::tmcm::instructions::*;
use tmcl::modules::tmcm::axis_parameters::*;
use tmcl::modules::tmcm::TmcmModule as Module;
fn main() {
# std::process::Command::new("sudo ip link add dev vcan0 type vcan").output();
# std::process::Command::new("sudo ip link set up vcan0").output();
let interface = Arc::new(Mutex::new(socketcan::CANSocket::open("vcan0").unwrap()));
let module1 = Module::new(interface.clone(), 1);
let module2 = Module::new(interface, 2);
std::thread::spawn(move || {
module1.write_command(ROR::new(0, 250)).unwrap();
});
std::thread::spawn(move || {
module2.write_command(ROL::new(0, 250)).unwrap();
});
}
无需std
当使用无std时,您可以在要使用的接口上实现 Interface
。
# // TODO: change ignore to no_run once panic_implementation is stabilized
#![no_std]
extern crate tmcl;
use core::cell::RefCell;
use tmcl::Interface;
use tmcl::Reply;
use tmcl::Command;
use tmcl::Instruction;
use tmcl::modules::tmcm::instructions::*;
use tmcl::modules::tmcm::axis_parameters::*;
use tmcl::modules::tmcm::TmcmModule as Module;
# struct MyInterface();
# struct MyInterfaceError();
# impl MyInterface { fn new() -> Self {unimplemented!()} }
impl Interface for MyInterface {
type Error = MyInterfaceError;
fn transmit_command<T: Instruction>(&mut self, command: &Command<T>) -> Result<(), Self::Error> {
// Implement transmit_command for your interface
# unimplemented!()
}
fn receive_reply(&mut self) -> Result<Reply, Self::Error> {
// Implement receive_reply for your interface
# unimplemented!()
}
}
fn main() {
let interface = RefCell::new(MyInterface::new());
let module1 = Module::new(&interface, 1);
let module2 = Module::new(&interface, 2);
module1.write_command(ROR::new(0, 250)).unwrap();
module2.write_command(ROL::new(0, 250)).unwrap();
}
依赖项
~6–370KB