是否存在用于在不加载到数据记录器中的情况下运行、测试和调试代码的模拟软件?
唯一要验证代码的是CRBasic编辑器中的预编译器,但它不提供任何类型的运行时反馈。
问候,Dana
谢谢
嗨,我意识到这是一条老线索。我找到它是因为我在寻找同样的东西。
这可能是CSI开发的一个很好的工具。
谢谢
克里斯
这已经讨论过好几次了,我们总是被困在如何处理读取信号或控制外部设备的指令的问题上。在读取信号(例如模拟、数字或串行)的情况下,程序运行的方式通常由测量值决定,因此必须设置和更改一些值,以完全测试程序的操作。如果没有对I/O进行一些模拟,模拟器的用处几乎会减少。
我想我们可以要求用户输入并手动更改值,就像输入指令所读取的一样,但由于这种情况只能缓慢发生,您将失去与其他信号和序列的所有形式的同步性。模拟程序的时序也很困难,我们也无法真正模拟与远程设备的通信。
也许你可以解释一下你需要它模仿什么,看看是否可以在考虑到上述限制的情况下做一些有用的事情。
我知道这不是您想要的,但以下代码可以帮助您进行调试。您仍然需要一个数据记录器来运行程序,但只要在编码方面付出一点额外的努力,您就可以创建一个“;调试“;输出流。该输出可以在执行期间或执行之后进行记录和审查。类似的情况是添加“;系统输出打印输入”;或“;Console.Write(控制台写入);行,使用控制台监视程序中的调试消息。如果您进行了增强或提出了更好的想法,我鼓励您将代码发布回这个线程。
享受
---------------------------------------
公共PTemp,电池电压
公共I
构造表
Const调试=真
Const DebugTo=表'表,ComRS232,Com1,Com2,Com3,Com4
结束构造表
#如果调试,则
#如果DebugTo=表格,则
将调试消息分为字符串*31
数据表(调试,True,1000)
示例(1,DebugMsg,字符串)
床头柜
#结束如果
Sub_Debug(消息为字符串*31)
'包装以备将来支持其他选项
“未来的选项可能包括:打印到串行端口,
'IP端口,或写入平面文件
#如果DebugTo=表格,则
DebugMsg=消息
调用表(调试)
#ElseIf(DebugTo=ComRS232)OR(DebugTo=Com1)OR(DebugTo=Com2)OR(DebugTo=Com3)OR(调试To=Com4)
串行打开(调试到,-115200,0100)
串行输出(DebugTo,Msg+CHR(13)+CHR(10),“&”;,0,0)
串行关闭(调试到)
#结束如果
EndSub公司
#结束如果
数据表(测试,11000)
数据间隔(0,15,秒,10)
最小值(1,batt_volt,FP2,0,False)
样品(1,PTemp,FP2)
床头柜
开始进度
扫描(5,秒,0,0)
面板温度(PTemp,250)
蓄电池(蓄电池电压)
#如果调试,则
调用(_Debug(“进入FOR循环”)
#结束如果
对于I=1到10
batt_volt=batt_volt+100
#如果调试,则
调用(_Debug(“I=”+I))
呼叫(_Debug(“电池=”+电池电压))
#结束如果
下一个I
调用表测试
下一次扫描
结束程序
所以,如果Loggernet的编译器告诉我,我正在编写的程序在运行时没有进入某个do循环,那可能是因为do循环被传感器激活了?
新对话如下:SMM中,
我不确定你在问什么。这是与提供的程序示例有关还是与您正在经历的实际错误有关?如果这是您遇到的错误,请发布确切的错误或给我发一张屏幕截图sutley*a/t campbellsci dot.com。
新对话如下:嗨,山姆!
我正在进行数据记录器程序,但仪器还没有到货。我希望记录器每15分钟记录一次一些天气变量。同时,当翻斗式雨量计倾斜时,我希望记录器打开RS232端口的电源,并轮询一个雨量计,直到雨停。
我将第一次扫描设置为每15分钟运行一次,然后是一个无限的do循环,包含一个从最初的雨量计尖端运行到测量强度为零的do循环。这个内部do循环运行disdrometer。
在编译程序时,我收到了两条消息:
第120行:警告:运行时永远不要到达
第153行:警告:运行时从未达到循环
线120是外部Do循环的Do,而线153是循环,直到内部Do循环的Intensity=0。
所以,在所有这些之后,我想知道这些信息是什么意思。
新对话如下:我认为这不是这个问题的正确线索。把你的程序(上面的电子邮件地址)发给我,我会看一看。
新对话如下:嗨,Sam和APS,
非常感谢您深思熟虑的答复。对我来说,现在(今天)我只需要从现场借用一台正在运行的数据记录器,这样我就可以测试我的程序了。
我现在主要测试的是Modbus通信。
我确实看到了时间问题会严重限制模拟器的通用性。这让我很好奇一些PLC模拟器是如何工作的。我会更多地研究它,如果我发现任何有趣的东西,我会把它发布在这里。
谢谢
克里斯
新对话如下:这已经讨论过好几次了,我们总是被困在如何处理读取信号或控制外部设备的指令的问题上 ;
是否有可能为程序员提供一种方法,通过用户定义的函数生成数据,从而模拟输入 ;
我认为模拟器的有用性主要在于验证您的程序逻辑是否会正确响应一组有限的场景,这些场景通常是在代码开发过程中预期的 ;额外的几行代码(以函数的形式?)可以根据程序员的兴趣定义一个时变值,然后可以通过编程将其引导到模拟平台中适当的数据记录器通道  ;
新对话如下:
CRS公司-
您可以使用随机数生成器“模拟”传感器 ;注释掉你的模拟或数字测量,并添加一些函数或算法来代替它。你可以编写不同的算法来做不同的事情。这里有三个:
公共PTemp,Batt_volt 公众压力,压力1 公共i 开始进度 扫描(1,秒,0,0) 面板温度(PTemp,60) 蓄电池(蓄电池电压)
随机化(Batt_volt) '电压S(压力,1,mV5000,1,0,0,_6Hz,1,零) i=净现值 压力=压力+i'变量缓慢攀升 压力1=数据中的100+i'随机噪声 如果i>;0.95然后压力1=压力1+100*i'数据中的随机峰值
下一次扫描 结束程序
此外,在可能有多个条件语句和分支的复杂程序中,可以使用变量作为跟踪器。在程序的每个条件分支中,将跟踪器变量设置为唯一值。您可以在公共表中实时观察跟踪器变量的变化,也可以将其添加到数据表中,在数据表中还可以查看影响代码执行哪些分支的其他变量的值。
编辑-为了模拟控制,我使用了连接到控制端口的LED来查看它们何时关闭和打开。当然,你可以随时将变量保存到数据表中,以了解控制端口何时切换。
新对话如下:出于开发目的,我没有现成的数据记录器,所以单独的软件模拟器会很有帮助 ;目前,我必须停止正在进行的数据收集,上传我的新程序进行测试,然后在完成后更改回来 ;与此同时,我失去了将要收集的数据  ;
新对话如下:出于开发目的,我没有现成的数据记录器,所以单独的软件模拟器会很有帮助 ;目前,我必须停止正在进行的数据收集,上传我的新程序进行测试,然后在完成后更改回来 ;在此期间 蛇io ,我失去了将要收集的数据 ;