你好,
我想知道crbasic代码从开始到结束的时间戳从雨事件。
例如:
零时10分开始
结束在一点
我有一个降水类型传感器,因此当类型为>0时,它应该保存一个时间戳(开始降水事件),一旦类型为0,则保存另一个时间戳(结束降水事件)。
有了这个例子,我可以认为它也可能从大风或零度以下的温度开始和结束时间戳。
在RTMC中也可以有一个报表范围(一天)吗?
使用一分钟表。
致以最亲切的问候。
我认为它可以用dataevent和或timer完成,但我不知道如何编码:(
在降水类型为>时使用时间戳,在降水类型再次为0时使用时间戳。
我知道如何从沉淀类型为>0时获得时间戳,但只要类型为>0,我就会每分钟有一个时间戳(一分钟表)。
但不知道如何得到结束时间戳。
当我设置结束时间戳为0时,当时间戳为0时,我将丢失时间戳。
理想情况下,只需要一个开始时间戳和一个结束时间戳的数据字符串。
致以最亲切的问候。
你好,
我有q子例程类似于您需要的,我修改了一点,为雨的开始和停止添加时间戳,但没有测试。也许它会起作用,或者你需要对它进行修补。
Sub Rain_Chk If Rain_mm > 0 Then如果TMR = 1 Then Rain_Start = rTime(3)&"/"&rTime(2)&"/"&rTime(1)&" "&rTime(4)&":"&rTime(5)-1 Rain_Status = "正在下雨!!"Rain = True TMR = Timer(1,Min,0) EndIf If TMR <> 0 AND Rain_mm = 0 Then Rain_Stop = rTime(3)&"/"&rTime(2)&"/"&rTime(1)&" &rTime(4)&":"&rTime(5) Rain_Status = "Raining Stopped!! "雨= False咯=计时器(1分钟3)EndIf如果TimeIsBetween(0 60 60分钟)然后RF_PH0 = RF_PH0 + Rain_mm RF_PH = RF_PH0如果TimeIntoInterval(0 60分钟),那么RF_PH0 = 0结束如果TimeIntoInterval(0 1440分钟),那么RF_PD = TRF_mm TRF_mm = 0结束如果终端接头
您可能只需要前两个“如果”情况。请让我知道,它是否工作或如何工作。
祝好
登
嗨登,
谢谢你展示这段代码。
我现在正在跑步,等着下雨:)
致以最亲切的问候。
嗨登,
这是工作:)
如您所见,我让它由沉淀类型触发。
我已经删除了sub和结束sub,因为一个错误,不知道这是否可以做?
用事件的开始和事件的结束做了一个字符串。
下一个挑战将是获得事件期间的降水数量和降水类型,分别为0、10、20、30、40和50。
以及一个带有完整字符串的数据表。
致以最亲切的问候。
'Sub Rain_Chk If Precip_Type > 0 Then If TMR = 1 Then Rain_start = RTime(3)&"/"&RTime(2)&"/"&RTime(1)&" "&RTime(4)&":"&RTime(5) Rain_Status = "Raining Now!! "Rain_mm = True TMR = Timer(60,Sec,0) EndIf If TMR <> 0 AND Precip_Type = 0 Then Rain_Stop = rTime(3)&"/"&rTime(2)&"/"&rTime(1)&" "&rTime(4)&":"&rTime(5) Rain_Status = "Raining Stopped!! "Rain_mm = False TMR = Timer(60,Sec,3) EndIf 'End Sub StringA = Rain_start + "," + Rain_Stop
嗨Makada,
它的伟大。它可以拿出子程序,把代码放在主扫描或子扫描。我通常在扫描外部作为子程序进行计算,每当neccessay调用sub,而不是在扫描循环内部混乱。但还是很乱:-)。
由于有IPIs, Weather Sensors, PZs, SGs, WSPs, Camera, SMS & Email系统等其他仪器,所以很抱歉不能分享整个项目。还有很多子程序。
祝你下次挑战好运,我想再放几个定时器,比如tmr1,2,3 ..等。我能胜任这份工作。
最好的问候,
登
我看到计时器功能是非常不准确的。
有时从2开始,而不是1,有时Timer从8到10,而不是8 9 10…
因为Timer从1开始,所以它错过了第一个提示。
因此,total函数不会重置,因为“如果Timer =1,那么…”
致以最亲切的问候。
嗨Makada,
很高兴知道这个。当然,你会找到更好的方法来做这件事。
“编辑”…我觉得你的计时器出问题了。我给出的示例代码是“TMR = Timer (1,Min,0)”,“1”表示定时器编号1,“Min”表示定时器计数方式。你看到的整数TMR值将以分钟为单位,如果你使用“Min”,它将以秒为单位,如果你使用“Sec”。有更了解的人可以审查这个,或者你可以在定时器功能的帮助打架。你在你的第一篇文章中说,你的程序以1分钟间隔或1分钟表运行,这就是为什么我给了一个分钟计时器的例子,即使我减去1分钟的开始时间,因为计时器将开始后,第1分钟扫描的雨事件,我猜想。
你的timesr是Timer(60,Sec,0),这意味着你的计时器数是60(这无关紧要),并按秒计数。你的扫描间隔以秒为单位。我不知道这将如何运作。在我的第二篇文章中,得到10分钟、20分钟、30分钟……雨的强度,我应该说计时器不。2、3、4 ..等,如果你已经使用定时器no。1.
我希望你能找到更好的解决办法。
最好的问候,
登
我尝试了一下计数器功能。
我已经使用风速作为降水传感器,所以我有数据时,它不下雨。
与下面的代码,我有计数器重置在一定的值工作ok。
此外,总工作是好的。
但我不能得到总数复位时,计数器为零,其添加的数据在总数一旦条件为真。
BeginProg Scan (1,Sec,0,0) RealTime(RTime) voldiff (Wind_Spe,1,mV2500,1,True,0,_60Hz,0.025,-12.5) counter=counter+1 If Wind_Spe >=4 Then tot=tot+Wind_Spe EndIf If Wind_Spe <4 Then tot=tot counter= 0 EndIf NextScan EndProg
我发现这段代码工作正常。
但我注意到它包括一个值<3时,表被调用。
因此,总数是不对的。
Public EventStarted As Boolean Public EnableOutput As Boolean, DisableStats As Boolean Public EventTrigger As Boolean ' this is the Event trigger Public counter As Long, PTemp, AirTemp, DeltaTemp '测试变量Const 1 = 1 '测试常量DataTable(Stats,EnableOutput,3000)'注意:必须指定一个表大小,不要auto-allocate平均(1 DeltaTemp IEEE4 DisableStats)最大(1 DeltaTemp FP2, DisableStats假)最低(1 DeltaTemp FP2, DisableStats假)样品(1、计数器、FP2)总计(1一个FP2, DisableStats)都包含在这告诉你有多少样本输出EndTable BeginProg DisableStats = True扫描(1秒,0,0)'==================== 测试部分的代码counter = counter + 1 PanelTemp (PTemp _60Hz)'测量参考温度TCDiff (AirTemp,1,mV2_5C,1, type,PTemp,True,0,_60Hz,1.0,0)“测量空气温度DeltaTemp = AirTemp-PTemp”计算温度的差异如果DeltaTemp > = 3的测试事件条件(s)其他EventTrigger = false EndIf EventTrigger = true '==================== 结束测试的部分代码如果EventStarted = False和EventTrigger = true那么'EventStarted告诉如果它已经开始EventStarted = trueDisableStats=False EndIf CallTable(Stats)如果EventStarted=True和EventTrigger=False然后'事件结束所以输出Stats,并为下一个事件重置控制变量。EventStarted=False DisableStats=True EnableOutput=True CallTable(Stats) EnableOutput=False DisableStats=True EndIf NextScan EndProg