多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

VISA Read 报 0xBFFF0015 超时

VISA Read 报 0xBFFF0015 超时 AutomationDirect STP-MTRD-17038RE 驱动器经串口转 USB 接到 PCVISA Write 发指令驱动器都照做可一调 VISA Read 就报超时。同一套硬件在驱动器自带软件和 puTTY 里收发都正常。钥匙可能在报文结尾VISA Write 发出去的字符串末尾少了回车驱动器就不认为一条报文收完也就不会有回包。串口设置页Baud Rate 9600、Data Bits 8、Stop Bits 1、Parity None。I/O Settings 页Timeout 2000 ms终止符为 Carriage Return - \r。Basic I/O 页发 BS、Bytes to Read 为 1024Return Data 报超时。01 现象设备是 AutomationDirect 的 STP-MTRD-17038RE 电机/驱动器经串口转 USB 适配器接到 PC用 VISA 串口方式通信。串口能配对VISA Write 发指令驱动器也有反应 —— 文档里给出的指令发下去都能执行HR 用来打开一个会话、QT 用来关闭会话这几步都成功。可只要调用 VISA Read返回的就是超时。硬件本身可以排除同一套连接在驱动器自带的 SureMotion Pro V1.0.4 里收发正常用 puTTY 终端收发也正常。再看 VISA Interactive Control 里的状态。资源是 ASRL11::INSTR。Serial Settings 页Baud Rate 9600、Data Bits 8、Stop Bits 1、Parity None。I/O Settings 页Timeout 2000 ms、Send End On Writes 勾上、Enable Termination Character 勾上、End Mode For Reads 和 End Mode For Writes 都是 Termchar、Termination Character 选的是 Carriage Return - \r、Value 为 0xD。Basic I/O 页里选中指令点 Write能正常返回缓冲区日志记着写操作返回 2 字节紧接着点 Read右边就出现 Read Operation ErrorVISA: (Hex 0xBFFF0015) Timeout expired before operation completed。写是成功的、读是空的这一点很关键说明端口、波特率和指令本身都没问题卡在发完之后收不到可读的数据。02 根因本例给出的方向只有一个发出的报文末尾可能少了回车。原话是给发送的消息加一个回车试试puTTY 也会这么做也许就有差别—— 这是怀疑方向不是已确认的修复。顺着这个方向看配置就对得上了I/O Settings 里 End Mode For Writes 用的是 Termchar、终止符配成 Carriage Return - \r0xD也就是这套端口设置是按报文以回车结束工作的。VISA Write 发出去的字符串末尾如果没有这个字节驱动器可能不认为一条报文已经收完也就不会回数据Read 等不到结束条件最后就报超时。另外要顺带确认会话本身HR 用来打开一个会话、QT 用来关闭会话是成对使用的如果会话没打开写出去同样等不回来回包。另一件要自己对的是串口参数VISA 这一侧的 9600 / 8 / 1 / None要和 puTTY 里能通的参数一致。图里给的只是 VISA 这一侧的设置puTTY 那侧要自己比对。03 怎么做先试最省事的一步在命令字符串末尾补上一个回车再发。也就是把 HR、BS、QT 这类指令发成带结尾回车的字符串字符串里接一个回车或者用 0xD。在 VISA Interactive Control 里直接验Basic I/O 里选中指令点 Write再点 Read看还报不报超时。图里 Bytes to Read 设的是 1024。这一页还有一个 Query 按钮等于把写和读连着做一次用来试发一条问一条的指令更省事。核对终止符相关的几项Enable Termination Character 是否勾上、End Mode For Reads 和 End Mode For Writes 是否都用 Termchar、Termination Character 是否是 Carriage Return - \r0xD并和 puTTY 里能通的配置对齐。如果补了回车还是超时再往下看这几处Bytes to Read 是否和驱动器实际的回包长度匹配、Timeout 2000 ms 够不够、以及会话是不是真的打开了发出去的 HR 有没有回包。04 记住这几条写能通、读超时先怀疑报文格式而不是线路最常见的就是结尾终止符对不上。终端软件默认会帮你补回车自己用 VISA Write 的时候这个字节要显式加上。0xBFFF0015 只说明等到超时也没读到数据本身不含原因别拿它当线路故障的证据也别靠加大 Timeout 来绕2000 ms 收不到多半不是等得不够久。补回车这个做法在本例里用的是也许有差别的口径属于先试的方向不是已经确认的修复。我们专注 LabVIEW 软件开发与测试测量系统集成从硬件选型、方案设计到现场交付调试提供一站式服务。手上有一台设备想接进 LabVIEW或者几台设备要串成一套系统欢迎在评论区留言身边朋友有类似项目也欢迎帮忙引荐。
返回列表