AutomationDirect STP-MTRD-17038RE 驱动器经串口转 USB 接到 PC,VISA 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 为 1024,Return 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 Error:VISA: (Hex 0xBFFF0015) Timeout expired before operation completed。
写是成功的、读是空的,这一点很关键:说明端口、波特率和指令本身都没问题,卡在"发完之后收不到可读的数据"。
02 根因
本例给出的方向只有一个:发出的报文末尾可能少了回车。原话是"给发送的消息加一个回车试试,puTTY 也会这么做,也许就有差别"—— 这是怀疑方向,不是已确认的修复。
顺着这个方向看配置就对得上了:I/O Settings 里 End Mode For Writes 用的是 Termchar、终止符配成 Carriage Return - \r(0xD),也就是这套端口设置是按"报文以回车结束"工作的。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 - \r(0xD),并和 puTTY 里能通的配置对齐。
-
如果补了回车还是超时,再往下看这几处:Bytes to Read 是否和驱动器实际的回包长度匹配、Timeout 2000 ms 够不够、以及会话是不是真的打开了(发出去的 "HR" 有没有回包)。
04 记住这几条
- 写能通、读超时,先怀疑报文格式而不是线路:最常见的就是结尾终止符对不上。
- 终端软件默认会帮你补回车,自己用 VISA Write 的时候这个字节要显式加上。
- 0xBFFF0015 只说明"等到超时也没读到数据",本身不含原因,别拿它当线路故障的证据;也别靠加大 Timeout 来绕,2000 ms 收不到,多半不是等得不够久。
- 补回车这个做法在本例里用的是"也许有差别"的口径,属于先试的方向,不是已经确认的修复。
我们专注 LabVIEW 软件开发与测试测量系统集成,从硬件选型、方案设计到现场交付调试,提供一站式服务。手上有一台设备想接进 LabVIEW,或者几台设备要串成一套系统,欢迎在评论区留言;身边朋友有类似项目,也欢迎帮忙引荐。