指令之间的时间安排 _Campbellsci论坛问答

更多问题。。。

我正在使用CR1000对反射光等进行一些测量。这是通过打开LED、读取、关闭LED、读取等方式对一定数量的样本进行的。

指令之间的时间安排
_Campbellsci论坛问答

如:

'循环
对于i=1至样品
'打开LED
端口集(TRB_LED_CTRL,1)
'进行测量
电压S(t_high,1,mv5000,TRB_CHAN,True,0250,1,0)
'关闭LED
端口集(TRB_LED_CTRL,0)
'进行测量
电压等级(t_low,1,mv5000,TRB_CHAN,True,0250,1,0)

'计算
t_samples(i)=t_高-t_低
下一个

我遇到的问题是PortSet和VoltSE命令之间的时间不同。我需要一致的定时,因为光传感器的输出经过各种滤波器,因此当信号因电容器充电等而衰减时,它会产生影响。

无论如何要这么做?我考虑过用VX1和VX2线路控制LED,因为它们似乎要等待一段确切的时间才能进行测量

新对话如下:

地理,

只是在黑暗中的一个镜头,看看在SequentialMode与PipeLineMode中编译,你的程序可能默认为这种模式。

岛民

新对话如下:

如果数据记录器中的操作系统不是很旧,那么它可能会在顺序模式下自动编译,因为PortSet命令存在于循环中。也许在PortSet和VoltSE之间具有精确延迟的Delay指令可以改善时序。

新对话如下:

为了获得准确的计时,您必须编写程序以运行到管道模式。原因是,在顺序模式中,即使与记录器的大量通信活动也会给测量时间增加抖动。

要进入流水线模式,请使用子扫描指令(无间隔)替换for循环。请参阅下面的示例。


公共PTemp、batt_volt、i、t_high、t_low、t_samples(10)

构造TRB_LED_CTRL=1
构造trb_chan=1
Const样本=16


'主程序
开始进度
扫描(1,秒,0,0)
i=1
'循环
子扫描(0,秒,样本)

'打开LED
端口集(TRB_LED_CTRL,1)
'进行测量
VoltSe(t_high,1,mv5000,trb_chan,True,0250,1,0)
'关闭LED
端口集(TRB_LED_CTRL,0)
'进行测量
VoltSe(t_low,1,mv5000,trb_chan,True,0250,1,0)
'计算
t_samples(i)=t_高-t_低
i=i+1
下一个子扫描

下一次扫描
结束程序

新对话如下:

大家好,

谢谢你的回复。正如您所说,它是以顺序模式编译的。我将更改程序以使用SubScan命令——不知怎么错过了这个命令——并进行一些测试。如果一切正常的话,会发回来的。非常感谢您提供的信息!

罗斯

新对话如下:

管道模式起作用。现在时机正好,测量结果非常一致。

然而,在阅读了更多的手册之后,我只想确定程序是否会按预期运行。

基本布局为:

扫描

端口设置为打开传感器
传感器沉降延迟

传感器1的子扫描
下一个子扫描
传感器1的计算

传感器2的子扫描
下一个子扫描
传感器2的计算

传感器3的子扫描
下一个子扫描
传感器3的计算

传感器4的子扫描
下一个子扫描
传感器4的计算

端口设置为关闭传感器

所有传感器的平均值和标准偏差计算

调用表

下一次扫描


这一切似乎都很好,但我想确保计算和端口集是按这个顺序发生的。例如,平均值和标准偏差计算是否总是在所有子扫描完成后进行,以及端口设置是否会在正确的时间打开传感器。


我遇到的另一个问题是,我必须每两个小时操作一次伺服电机。

以前,我使用以下代码执行此操作:

慢速序列
扫描(120,最小,0,0)
尺寸k
昏暗的工作周期

'打开伺服电源
端口集(2,1)

'使用PWM操作伺服
对于k=1到8
如果k=1,则dutycycle=0.105
如果k=2,则dutycycle=0
如果k=3,则dutycycle=0.045
如果k=4,则dutycycle=0
如果k=5,则dutycycle=0.105
如果k=6,则dutycycle=0
如果k=7,则dutycycle=0.045
如果k=8,则dutycycle=0
PWM(工作周期,4.20,毫秒)
延迟(1700毫秒)
下一个

'关闭伺服电源
端口集(2,0)

下一次扫描

现在,在管道模式下,PortSet(2,x)命令不会运行。

同样,在可能是操作系统错误的情况下,扫描中每个PWM通道只能有一个PWM命令。在第二次扫描之后,PWM命令不再工作。

谢谢
罗斯

新对话如下:

问题一:在流水线模式下,所有的测量都完成了,并在任何处理开始之前缓冲在内存中。只要避开条件处理,这种缓冲就可以很好地工作。一般来说,任何不太可能工作的东西都会迫使记录器进入顺序模式,所以为了确保安全,请在程序中省略“管道”命令,并确保在编译程序时,它是在管道模式下编译的,并且不会试图切换到顺序模式。

附录:在少数情况下,如将writeio放入慢速序列,编译器可能会采取谨慎的方法并切换到顺序模式,但在这种情况下,过度使用自动模式选择和强制管道模式是有效的。

BTW:如果您的系统可能非常繁忙,您可以通过增加扫描指令中的扫描缓冲区来增加数据缓冲。这将允许记录器在处理落后的情况下继续进行更长时间的测量。

管道模式的关键是,所有的测量和某些其他指令,包括Portset,都是以精确的顺序和时间运行的,所以你可以确信这在你的程序中是可以的。

谈到第二个问题,在慢速序列中重新使用端口集。在管道模式下,在慢序列中使用端口集可能会出现问题。选中:在这种情况下,这是因为端口集仍在与测量进行排序,而您的延迟被设置为处理延迟-它们将与端口集命令异相,在这种情况中,端口集命令将打开并立即关闭该端口。

您应该使用WriteIo指令而不是Portset,因为即使在管道模式下运行的条件语句或慢序列中也可以使用它——尽管如果在主扫描中需要对端口设置测量值的时间进行紧密排序,则不应该使用它。

我将检查PWM命令的问题,尽管我预计每次扫描运行一个PWM是一个限制,并且尝试运行更多应该已经被捕获。

*最后更新者:aps于2009年9月9日上午11:51*

新对话如下:

关于PWM问题,你能给我发电子邮件给我整个程序吗?它显示PWM在第二次扫描后停止。发送电子邮件至(编辑以删除反垃圾邮件更改):

安德鲁·多特·桑福德在坎贝尔西多特·科多特·英国

您能否确认PWM在第一次和第二次扫描中是否改变了八次,但保持打开或关闭?之后

新对话如下:

空白的

*最后更新者:aps于2009年9月9日上午11:59*

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 指令之间的时间安排 _Campbellsci论坛问答
「指令之间的时间安排 _Campbellsci论坛问答」评论列表

发表评论