我想使用arrdio调用.net NationalInstruments.Visa.dll来实现用仪器设备用通讯,先用串口进行测试验证,结果可以正常写入,但是回读的时候报错“ivi.visa.timeoutexception异常”,经查资料有可能是因为终止符的原因,但是我写入的数据是带有"\n"终止符的(USB串口工具TX-RX短接验证)。请各位大牛帮看一下有哪里不对。
aardio验证代码如下:
import console;
import dotNet;
dotNet.reference(
["Ivi.Visa"] = $"~\lib\visa\.res\Ivi.Visa.dll";
["NationalInstruments.Visa"] = $"~\lib\visa\.res\NationalInstruments.Visa.dll";
)
dotNet.import("Ivi.Visa")
dotNet.import("NationalInstruments.Visa")
var power=NationalInstruments.Visa.SerialSession("ASRL6::INSTR");
power.SendEndEnabled=true
power.TerminationCharacterEnabled=true
power.TerminationCharacter=10 //终止符10=LF=\n
power.TimeoutMilliseconds=2000
power.RawIO.Write("hello world!\n"); //写串口命令,用Bus Hound抓包确认是写成功的
sleep(1000)
var pdata=power.RawIO.ReadString() //读串口命令,此处报Ivi.Visa.IOTimeoutException异常,用Bus Hound抓包确认是有数据输入的
console.log(pdata) //
以上验证所使用的dll在C#中验证OK,且有测试写的字符串去掉"\n"也会报Ivi.Visa.IOTimeoutException异常。
与C#代码相比,串口的打开方式不同,C#代码如下:
using System;
using NationalInstruments.Visa;
using Ivi.Visa;
namespace SerialPortExample_NationalInstruments
{
class Program
{
static void Main(string[] args)
{
// 1. 创建 VISA 资源管理器实例
NationalInstruments.Visa.ResourceManager powerrs = new ResourceManager();
NationalInstruments.Visa.SerialSession powerseesion = (NationalInstruments.Visa.SerialSession)powerrs.Open("ASRL6::INSTR");
//2. 设置串口配置(如果需要)
powerseesion.SendEndEnabled = true;
powerseesion.TerminationCharacterEnabled = true;
powerseesion.TerminationCharacter = 10;
powerseesion.TimeoutMilliseconds = 2000;
// 3. 发送数据
powerseesion.RawIO.Write("hello world!\n");
// 4. 读取响应
string response = powerseesion.RawIO.ReadString();
// 5. 输出响应
Console.WriteLine("Response: " + response);
Console.ReadKey();
}
}
}