VB.net调用VISA库通过GPIB发送指令终止符无法改为回车问题
你对instrEprobe.IO.TerminationCharacter的理解完全正确,该配置仅作用于接收数据时的终止符识别逻辑,不会影响发送消息时自动追加的终止符类型。你当前的问题是混淆了VISA库中两个作用不同的终止符配置:IMessageSession(即instrEprobe.IO)下的终止符参数负责接收,FormattedIO488对象本身的终止符参数才负责控制WriteString方法自动追加的发送终止符。
解决方案
你可以选择以下任意一种方式实现发送时追加回车符(ASCII 13):
方案1:修改
FormattedIO488对象的发送终止符配置,保持自动追加逻辑不变
直接在打开设备后增加一行配置,指定发送时自动追加的终止符为回车:instrEprobe.TerminationCharacter = 13原
WriteString("I")调用无需修改,默认会自动在命令末尾追加上述配置的回车符。方案2:关闭自动追加终止符,手动拼接回车符
调用WriteString时将第二个参数设为False,关闭默认的换行符追加逻辑,手动在命令末尾拼接回车符:instrEprobe.WriteString("I" & Chr(13), False)该方式无需修改全局终止符配置,逻辑更直观,适合单条命令需要特殊终止符的场景。
补充建议
如果你的仪器还要求GPIB总线发送完命令后触发END信号,可以额外增加配置:
instrEprobe.IO.SendEndEnabled = True
该配置会在发送完最后一个字符后拉低GPIB的END线,兼容性更好。
修改后完整代码示例
Public Function InitEprobe(ByVal strGpib As String, ByVal Type As String) ioMgr = New Ivi.Visa.Interop.ResourceManager instrEprobe = New Ivi.Visa.Interop.FormattedIO488 Try Dim Out As String = "" instrEprobe.IO = ioMgr.Open("GPIB0::" & strGpib) '设置GPIB端口 ' 接收相关配置:识别回车为接收终止符 instrEprobe.IO.TerminationCharacter = 13 instrEprobe.IO.TerminationCharacterEnabled = True ' 发送相关配置:指定自动追加的终止符为回车 instrEprobe.TerminationCharacter = 13 instrEprobe.IO.SendEndEnabled = True instrEprobe.WriteString("I") '向仪器发送命令 Wait(500) Out = instrEprobe.ReadString '读取仪器返回数据 Return Out Catch exp As Exception Return exp.ToString End Try End Function
内容的提问来源于stack exchange,提问作者Niklas A
相关产品推荐
相关产品推荐

