您好,我需要使用DM软件来分析txt文件并获取数字。每个号码都发送到Labview软件,该软件控制移动阶段。然后Labview告诉它完成,然后DM将拍照并保存文件。那么如何才能做到这一点?我用DM脚本找到了很少的样本。请给出一个方向。谢谢
答案 0 :(得分:1)
如果速度没有问题,您可以让Labview保存一个空的.txt。您的dm软件可以检查文件是否存在并尽快拍照。当然,存在更好,更快/更安全的方法,但我不知道你的dm软件是多么神奇。一个虚拟的命令,例如ActiveX,有许多选项可以使软件相互通信。
答案 1 :(得分:1)
没有很多'向外'或者'向内'当前DigitalMicrograph中的通信可能性和一些选项仅在以后的GMS版本中可用。 我也不知道Labview的选项,所以你需要找出哪些有效,什么无效。建议是:
如果您使用的是 GMS 2.3 或更高版本,则可以使用命令
LaunchExternalProcess()
从DigitalMicrograph中启动任何例程,方法与在命令提示符下执行相同。
如果Labview允许通过从命令提示符调用参数来触发某些功能,这可能是最简单的选项。 DM脚本将在启动的过程完成时或在指定的超时后继续。
如果您使用 GMS 3.1 或更高版本,则可以执行oposite并让外部程序使用命令行参数调用DigitalMicrograph.exe来触发DM脚本的启动。
基本上,这与第一个建议相反。 Labview需要打电话给#34; DigitalMicrograph,只要它想要执行下一个动作。我不知道Labview是否足以判断这是否可能。
如果您的安装在plugin-folder中有 SerialControl.dll ,则有通过COM端口(RS232)进行串行通信的脚本命令。
如果Labview支持此功能,您可以使用此功能建立程序间通信。串行通信脚本调用不受官方支持,但命令相当不言自明:
Number SPOpen( Number port, Number baud, Number stop, Number parity, Number data )
Number SPOpen( String prefix )
void SPClose( Number serialPortL )
Number SPSendString( Number serialPortL, String string )
Number SPSendHex( Number serialPortL, String string )
void SPFlushInput( Number serialPortL )
Number SPGetPendingBytes( Number serialPortL )
Number SPGetTime( )
String SPReceiveString( Number serialPortL, Number maxLength, NumberVariable actual )
String SPReceiveHexString( Number serialPortL, Number maxLength, NumberVariable actual )
void SPSetRTS( Number serialPortL, Boolean on )
void SPSetDTR( Number serialPortL, Boolean on )
您还可以建立通信'根据Gelliant在他的回答中提出的解决方法。 DM脚本可以监控'硬盘驱动器上的特定文件夹,只要创建或修改此文件夹中的(特定)文件,就会触发某些操作。
如果Labview能够使用类似的功能,那么这就是“写入磁盘”#34;和"观察变化"方法可以用于使两个程序彼此同步工作。
如果Labview不直接支持,您可以实现类似的"黑客攻击"使用第三方编写同步脚本'一般系统的语言。我过去亲自使用了一个名为AutoIt的软件来将其他不兼容的软件与控制硬件同步。
如果您了解C ++编程,您可以获得DigitalMicrograph的"软件开发工具包(SDK)" ,并为DigitalMicrograph创建自己的Labview通信插件。
此选项当然是最通用的,因为您只能受到自己的C ++代码所能达到的限制。缺点是,您可能需要为不同版本的DigitalMicrograph重新编译插件DLL。