该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
直接调用VISA32.dll呢?
VISA有三种方式:VISA32.DLL,IVI.VISA,VISA.NET。
我用C#写的。VS2019这三种都支持。PY我就不清楚了。
我代码引用的是VISA32.DLL。目前可以文件传输,但是传图片,总是文本格式
需要注意的:
1,需要看仪器手册,支不支持文件传输。如果不支持文件传输,也是传不了的。MMEM:DATA? 搜索一下这个命令,如果没有不支持,
2,更改命令分隔符,保证文件完整传输。
3,设置超时,以保证充足的时间传送文件
4,“ # “ 开头后边跟着长度位的位数,和长度。
5,VISA的底层应该是C,传出来的数据注意长度,有可能指针溢出。
SEND_VISA(vi_fse, ":SYST:COMM:GPIB:RTER EOI"); // '此命令更改分隔符。
status = viSetAttribute(Conversions.ToInteger(vi_fse), VI_ATTR_TMO_VALUE, 20000); // '设置超时
if (this.FSE_rbtnFSEU3.Checked)
{
SEND_VISA(vi_fse, ":MMEM:MSIS 'D’"); //
}
else
{
SEND_VISA(vi_fse, ":MMEM:MSIS 'C’");
} //
SEND_VISA(vi_fse, @":MMEM:CDIR '\USER\DATA\'"); //
this.SEND_VISA(vi_fse, ":MMEM:DATA? '" + this.FSE_txtHDCP.Text + ("." + lang + "'")); //
var first = new byte[17];
status = viRead(vi_fse, first, 16, out retCount);
if (status != VI_SUCCESS)
{
VisaErrorHandler(vi);
}
this.VI_txtOUT.Text = this.VI_txtOUT.Text + "+" + Conversions.ToString(retCount);
strRes = Encoding.Default.GetString(first);
this.VI_txtfinal.Text = strRes;
int x = Conversions.ToInteger(Strings.Mid(strRes, 2, 1));
int y = Conversions.ToInteger(Strings.Mid(strRes, 3, x));
var fanal = new byte[x + y + 3 + 1];
SEND_VISA(vi_fse, ":MMEM:MSIS 'C’"); //
SEND_VISA(vi_fse, @":MMEM:CDIR '\USER\DATA\'"); //
this.SEND_VISA(vi_fse, ":MMEM:DATA? '" + this.FSE_txtHDCP.Text + ("." + lang + "'")); //
string argreadFmt = "%#y";
int send = x + y + 3;
status = Form1.viScanf(vi_fse, argreadFmt, ref send, fanal);
var fs = new FileStream(Application.StartupPath + @"\FILE." + lang, FileMode.OpenOrCreate);
fs.Write(fanal, 0, x + y + 3);
status = viSetAttribute(Conversions.ToInteger(vi_fse), VI_ATTR_TMO_VALUE, 2000); // '设置超时为默认2秒
SEND_VISA(vi_fse, ":SYST:COMM:GPIB:RTER LFEOI"); // '此命令更改分隔符。