You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:39:04