serial-port - 2.3x DM 串行端口连接
问题描述
我想获取图像,向串行端口发送命令,拍摄另一个图像,发送新命令等(使用 GMS 2.3x)。
使用起来似乎LaunchExternalProcess()
很麻烦(对于串行端口的每个命令,您必须有一个唯一的命令提示符表达式,对吗?)。
我认为SerialControl.dll
会更容易使用,但我不知道从哪里得到它。使用命令SerialControl.dll
会比使用更有效LaunchExternalProcess()
吗?图像采集时间较长,因此通信速度不是主要因素。
解决方案
不幸的是,我不知道SerialConrol.dll
安装了哪些 GMS 配置——肯定只是在线安装——但如果你有 DLL,那么使用其中的命令似乎是进行串行端口通信的更好方法。特别是,如果您希望它是双向通信,脚本也应该通过该连接接收某些内容。但是,如果您的安装没有 DLL,我强烈建议您不要从拥有它的不同安装中复制它,因为无法保证版本之间的兼容性,并且不匹配可能会让您感到困惑。
到目前为止,我从未尝试过LaunchExternalProcess
用于串行通信。如果您对其进行测试并且它对您来说足够快,那么我也看不到任何问题。它肯定会给你更多的灵活性,我不会太担心它“麻烦”。最后,总要有人在某处放一些代码。根据您的需要,您可以在命令周围巧妙地包装一两个脚本方法,从那里开始它也只是“一个简单的调用”。使用“LaunchExternaProcess”进行双向通信比较棘手,需要有一点创意,并将内容中间存储到文件位置。
应该注意的是,目前没有关于 SerialControl.DLL 中脚本命令的官方文档,并且它们不是 Gatan 支持的功能,这通常意味着:如果它们有效,您可以使用它们,但您不能抱怨或请求帮助如果他们不这样做或在以后的版本中被删除。
RS232C 接口的 SerialControl.dll 中的命令是:
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 )
命令打开的任何串行端口也必须被脚本关闭,否则它将保持打开状态(因此被阻塞)。
编辑:更高版本的 GMS 调用 DLLSerialControlPlugin.dll
推荐阅读
- excel - 从字符串单元中提取数据;整数类型不匹配
- r - 测试对象的类:以类为条件,类 [1] 与是?
- java - 如何处理域中大量外部条带ID
- python - 将列表导出为 CSV
- java - SharedPreferences 总是返回自定义对象的默认值
- coq - coq 字段策略未能简化,产生“m <> 0%R”
- laravel - 在 Laravel 嵌套关系中排除对象属性
- python - python venvs 是可移植的吗?
- spring - Spring Controller 映射值正则表达式
- react-redux - Mapbox-GL:事件处理程序无权访问 useSelector() 变量