更多问题。。。
我正在使用CR1000对反射光等进行一些测量。这是通过打开LED、读取、关闭LED、读取等方式对一定数量的样本进行的。
如:
'循环
对于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*