我在Zaber 控制台中编写了一个脚本来控制我的阶段,但现在我想在移动过程中获取一些传感器读数。我想移动阶段,阅读,然后再次移动阶段。有时传感器读数会影响我需要做的动作。如何协调运动与传感器读数?
我想在一个串口上与我的 Zaber 设备通信,而在第二个串口上与我的传感器通信。
我在Zaber 控制台中编写了一个脚本来控制我的阶段,但现在我想在移动过程中获取一些传感器读数。我想移动阶段,阅读,然后再次移动阶段。有时传感器读数会影响我需要做的动作。如何协调运动与传感器读数?
我想在一个串口上与我的 Zaber 设备通信,而在第二个串口上与我的传感器通信。
当您编写 Zaber 控制台脚本时,您可以访问 Microsoft.NET 框架中的所有内容,因此您可以自己打开第二个串行端口。这是一个尝试在压力传感器上保持恒定压力的简单示例。每次通过回路时,它都会读取压力传感器,然后缩回设备以增加压力或伸出设备以降低压力。
// C# example that shows how to communicate with a second serial port
#template(simple)
const string LOAD_PORT = "COM9";
const int MAX_SPEED = 20000;
const int TARGET_PRESSURE = 1000; // in thousandths of a pound
// set up load cell on serial port
using (var port = new System.IO.Ports.SerialPort())
{
port.PortName = "COM9";
port.BaudRate = 9600;
port.ReadTimeout = 500;
port.WriteTimeout = 500;
port.Open();
port.WriteLine("ct0\r");
port.ReadLine();
while ( ! IsCanceled)
{
port.WriteLine("o0w1\r");
var pressure = Int32.Parse(port.ReadLine());
int velocity = (pressure - TARGET_PRESSURE) * 20;
int speed = Math.Min(Math.Abs(velocity), MAX_SPEED);
velocity = speed * Math.Sign(velocity);
Conversation.Device.Send(Command.MoveAtConstantSpeed, velocity);
}
}
该using
块确保即使发生错误也关闭串行端口。我使用的压力传感器理解ct0
为去皮命令和o0w1
返回当前压力的命令,您需要查看传感器的手册以了解它理解哪些命令。您还需要查看要使用的波特率和其他设置。该SerialPort
文档列出了您可以设置的所有通信参数。
如果要记录传感器读数中的数据,一种选择是仅使用Output.WriteLine(data)
在输出窗口中转储数据值。然后,您可以将它们复制并粘贴到电子表格或其他文件中。如果要直接写入文件,看File.CreateText()
方法。