2.3x DM串行端口连接

时间:2019-02-05 18:58:05

标签: serial-port dm-script

我想获取一个图像,向串行端口发送命令,获取另一个图像,发送新命令,等等(使用GMS 2.3x)。

使用LaunchExternalProcess()似乎很麻烦(对于串行端口的每个命令,您必须具有唯一的命令提示符表达式,对吗?)。

我认为SerialControl.dll会更易于使用,但我不知道从哪里获得。使用SerialControl.dll中的命令是否比使用LaunchExternalProcess()更有效? 图像获取时间长,因此通信速度不是主要因素。

1 个答案:

答案 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 )

由命令打开的任何串行端口也必须由脚本关闭,否则它将保持打开状态(因此被阻止)。