我想获取一个图像,向串行端口发送命令,获取另一个图像,发送新命令,等等(使用GMS 2.3x)。
使用LaunchExternalProcess()
似乎很麻烦(对于串行端口的每个命令,您必须具有唯一的命令提示符表达式,对吗?)。
我认为SerialControl.dll
会更易于使用,但我不知道从哪里获得。使用SerialControl.dll
中的命令是否比使用LaunchExternalProcess()
更有效?
图像获取时间长,因此通信速度不是主要因素。
答案 0 :(得分:0)
不幸的是,我不知道在哪个GMS配置SerialConrol.dll
中安装了-当然只能在在线安装中使用-但如果您具有DLL,则在其中使用命令似乎是更好的方法进行串口通讯。特别是,如果您希望它是双向通讯,则脚本也应该通过该连接接收某些内容。
但是,如果您的安装程序没有DLL,我强烈建议您不要从具有该DLL的其他安装程序中复制它,因为不能保证版本之间的兼容性,并且不匹配确实会惹上您。
到目前为止,我从未尝试过LaunchExternalProcess
进行串行通信。如果您进行测试并且速度足够快,那我也看不到任何问题。它肯定会为您提供更大的灵活性,并且我不会太担心它的“麻烦”。最后,总是有人必须在某些地方放置一些代码。根据您的需要,您可以将一个或两个脚本方法整齐地包装在命令周围,从那里开始,也只是一个“简单的调用”而已。
不过,与“ LaunchExternaProcess”进行双向通信比较棘手,并且需要一点创意,并将其中间存储到文件位置。
请注意,SerialControl.DLL中的脚本命令目前尚无正式文档,并且它们不是Gatan支持的功能,这通常意味着:如果可以使用,可以使用它们,但是可以如果没有,或者在以后的版本中将其删除,请不要抱怨或寻求帮助。
SerialControl.dll中用于RS232C接口的命令是:
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 )
由命令打开的任何串行端口也必须由脚本关闭,否则它将保持打开状态(因此被阻止)。