经过罗伯特·凯悦|更新:2016年11月10日|评论:5

想象一下,您有一个数据记录器站三个小时,可以收集您的测量数据。要从身体上到达车站,您不仅要开车三个小时,而且您必须在雪覆盖的山上徒步一个小时。
几天前,您对CRBASIC数据记录程序程序进行了更改,并且不确定更新的效果。但是您需要进行更改,然后继续将更新的程序发送到数据记录器。不幸的是,那是您从车站听到的最后一次听到。
尽管您发现数据记录程序中有什么问题导致您失去沟通,但您现在必须等待晴朗的一天,以便您可以使山上跋涉以纠正该计划。如果您不必前往网站而不必再次启动车站,这会不会容易得多?
好消息是,有一个简单的解决方案可以防止您的程序更新导致与电台失去通信。在您的CRBASIC程序中,使用runprogram()说明,并引用您的新程序将要替换的程序名称。在下面的示例中,runprogram()指令是引用一个名为的先前程序prognamerev1.cr6。注意runprogram()指令放置在条件中如果然后/endif指示 - 仅在计时器下方。
为你推荐:有关指导方式的其他帮助和信息,请参阅CRBASIC编辑器的帮助runprogram()操作说明。要访问文件,请突出显示运行程序在指令列表中,然后单击帮助列表上方的按钮。 |
“ Prognamerev2”主计划开始扫描(1,SEC,0,0)Public ChangeBackTimer ‘Declaration of variable ChangeBackTimer = Timer (10,Min,0 ) ‘Result of timer is assigned to variable If ChangeBackTimer >= 10 Then ‘Conditional statement evaluates variable RunProgram ("CPU:ProgNameRev1.cr6",4) ‘Points to another program on CPU, Set to run now. EndIfNextScan Endprog
此代码允许您新上传的程序运行10分钟(足够的时间测试您的通信是否受到影响)。然后,它自动恢复到您以前的程序。
如果您发送新程序,您的数据记录器似乎按计划运行,并且通信正在正常运行,您可以继续发表评论或删除代码的“变化”部分。然后再次发送程序。恭喜!您的电台现在正在启动并运行,您的数据记录仪已恢复日志记录数据,并且您不必花几个小时来回前往车站站点进行操作。虽然runprogram()指令还有许多其他用途,在此应用程序中,它可能只会使您免于意外的旅行。
笔记:听起来很棒,runprogram()指令不是故障安全指令。合并时可能会出现可能的并发症runprogram()带有其他说明,例如setSetting()。如果您正在使用setSetting()您程序中的指示。
小费:经常下载数据并保留数据记录程序和配置文件的当前备份始终是一个好习惯。
如果您认为runprogram()指导可以帮助您在应用程序中,我邀请您在办公室中的独特程序中尝试几次。如果您对使用该说明有任何疑问或评论,请在下面发布。
注释
Kcopeland|2016年11月10日在02:32 PM
这是一个很好的功能!如果我正确理解,如果您的程序有汇编错误,这将无济于事。最近,我们遇到了特定于OS29的功能的问题,该功能已通过OS27.04发送到远程记录仪,并且板载编译器失败,并且我们的端口控制调制解调器不会打开。当编译失败时,我们需要一种方法来运行程序。
SonoAutomated|2016年11月11日下午03:49
科普兰先生,这确实是另一个例外,感谢该意见。我将提交工程学以查看可以做什么。如果确实发生了什么事,您可以确定它将在新操作系统上上传。:) - 培训我的朋友。
thinkitCodeit|2016年11月17日在上午02:30
您可以实现恢复通信的默认值(或取决于记录器类型)。如果程序未能编译或运行,并且在电源周期后没有运行程序后,Datalogger将自动为您运行此默认程序。这是将一些基本通讯启动代码放置在尝试和测试中以确保访问权限的好方法。
Luisfgranada|06/07/2018 at 06:56 AM
您好,使用此说明时我有问题。该程序如下:
公共数字
公共文件(10)作为字符串
const MeasurementProgram =“ CPU:template.cr1”
昏暗的
Beginprog
扫描(1,SEC,3,0)
numfiles = filelist(“ cpu”,files())
对于i = 1到数字
如果strcomp(files(i),measurementprogram)= 0,则
RunProgram(MeasurementProgram,4)
万一
下一个我
NextScan
末端
我要做的是在内存“ CPU”中查看特定程序。在示例中(CPU:Template.CR1)。如果找到它,请尝试运行它。问题是,如果程序不在内存中,则指令运行程序不应运行(BeaCause在IF循环中),但确实如此。我已经测试了循环,很好。你能帮忙吗?
谢谢
SonoAutomated|06/07/2018 at 08:45 AM
亲爱的Luisfgranada,
在记录器上,我刚刚用最新的操作系统擦拭清洁,我无法通过我的test.cr1程序复制您的问题。
但是后来我决定上传一个名为“ template.cr1”的程序,我的test.cr1程序中的运行程序指令将寻找它,并且正如预期的那样,它找到了它。因此,我决定使用FileManage指令将其隐藏,而不是删除模板。CR1。因此,在这一点上,“文件控制”对话框不再有一个名为template.cr1的文件,但是当我运行我的test.cr1时,程序仍然找到了名为template.cr1的文件并开始运行它。正如应该拥有的。
您是否有可能看到一个隐藏的程序?这可能是Runprogram指令找到您认为不存在的此文件的原因。如果是这种情况,您至少有两个选择。1-您可以使用FileManage指令删除该隐藏的文件。2-您可以将持续操作系统上传到记录器。在使用最新操作系统更新记录器之前,请记住下载可能需要的任何数据和程序,也许可以完成完整的记录器备份。备份记录器始终是一个聪明的想法,可以通过设备配置实用程序来完成。
希望这有用。如果您还有其他问题,请告诉我。
请登录或注册评论。