2

我正在写我的硕士论文,我坚持编程串行端口设备通信。

我正在写光声扫描仪。允许创建热图像的应用程序。

我正在使用 USB 设备来控制更陡峭的电机,并使用 National Instruments 设备来获取信号。

我的应用程序正在控制两个步进电机(它应该控制)。

我有一个 USB 控制器来控制这些电机,它在系统中作为 COM 设备可见。我可以用超级终端和一个简单的应用程序来控制它,所以通信不是问题。

我在设备和我的应用程序之间建立双向通信时遇到问题。

我正在向设备发送字符串,如下所示:

serial.Write("CAL\r");- 这会校准设备。但它可以返回两个响应——“CAL OK”或“BUSY”——校准正常或设备现在正在做其他事情。

我可以在串口上监听 DataRecived 事件,然后执行 string.equals。

我的应用程序必须控制电机并等待响应。

在一个简单的场景中:

  1. 开始申请
  2. 使用输入输入将被扫描的样本大小。
  3. 按下轮廓按钮 - 应用程序开始将电机首先移动到左上角,然后是右上角、右下角和左下角。(我可以发送简单的命令,但是如何发送一个,等待响应,然后发送另一个,然后在 GUI 上的第四个启用按钮之后?)
  4. 如果区域定义正确,请单击下一步并开始扫描。
  5. 电机移动到点 1,1(让我们这样称呼它)并开始信号采集。
  6. 处理收集的数据,然后我们转到点 1,2
  7. 整个区域已完成,用户收到扫描完成的消息。

我不知道如何从串行端口通信开始。如何实现双向通信。

我有一个简单的类(单例),它打开 com 端口、发送命令并在收到的每个数据上引发事件。

在我的班级中创建一个堆栈并在其上发送所有命令然后循环将它们发送到设备会是一个很好的解决方案吗?

但是如何在威胁中处理呢?做威胁睡眠,然后检查是否所有命令都被处理,如果没有,那么再次威胁睡眠?

我将不胜感激任何建议。

我正在编辑它以显示我希望我的应用程序的外观/工作方式

我有一个简单的应用程序,它有一个 TabControl(在应用程序中隐藏选项卡的修改版本,我只能在设计模式下看到它们)。

第一个选项卡有一些文本和信息(主要是统计数据)。其次允许收购。

用户单击第一个选项卡“Go to Acquisition”上的按钮,该选项卡显示,但所有按钮都被禁用。

他必须单击“打开校准”对话框。然后在该对话框中,他校准设备并输入所有采集参数(在该对话框中,他可以选择在将要测量的样本上进行轮廓移动电机到 4 个角)。校准完成后,他可以关闭该对话框,然后所有控件都在主窗体上处于活动状态。现在他可以点击“开始采集”按钮了。之后,较陡的电机将移动到特定位置(针对每个点计算),将获取该点的数据,处理,保存到文件并在 imagebox 中显示为像素。然后电机将移动到另一个点,并重复该过程直到样品结束。基本上我会扫描一个方形样本,将激光移动到特定点,收集数据并从中构建热图像,就像逐个像素地构建图像一样。

我将尝试用图表或屏幕截图来说明我的想法。

4

0 回答 0