看起来serial protocol for Zaber devices的实现非常简单,但C ++中是否有可用的示例代码?
答案 0 :(得分:0)
如果您正在编写托管C ++,则可以像在C#或Visual Basic项目中一样使用我们的.NET库DLL。您可以使用Zaber Console source code找到更多信息。这些示例都在C#或Visual Basic中,但您可以在托管C ++中执行相同的操作。
如果您没有编写托管C ++,则必须直接写入串行端口。我们有一些example C code将向您展示如何将命令转换为字节流。此代码段准备将六个字节写入串行端口。
txBuffer[0] = deviceNum;
txBuffer[1] = command;
// Position 2 is LSB; Position 5 is MSB
txBuffer[2] = ( data & 0x000000FF);
txBuffer[3] = ((data >> 8) & 0x000000FF);
txBuffer[4] = ((data >> 16) & 0x000000FF);
txBuffer[5] = ((data >> 24) & 0x000000FF);
此代码段处理从串行端口收到的六个字节。
deviceNum = rxBuffer[0];
command = rxBuffer[1];
// Position 2 is LSB; Position 5 is MSB
data = ( rxBuffer[2] & 0x000000FF)
+ ((rxBuffer[3] << 8) & 0x0000FF00)
+ ((rxBuffer[4] << 16) & 0x00FF0000)
+ ((rxBuffer[5] << 24) & 0xFF000000);
如何连接到串口可能与我们的示例不同,但C ++编译器文档应该能够帮助您。下载示例代码以查看更多详细信息,例如,如果协议不同步则重置协议。
有关串行通信协议的更多说明,请参阅the user manual。
您也可以使用C ++编写Zaber Console scripts,尽管我们尚未创建C ++脚本模板。
答案 1 :(得分:0)
注意使用Zaber协议的熊陷阱:如果微控制器与Zaber电机失去同步,它可能会卡住读取一个数据包的后半部分和下一个数据包的前半部分(你应该使用一个定时器来检测互联网) -packet timing gap以重置协议状态机)