[求助]关于用labVIEW调用CH341DLL问题。

在用labVIEW调用CH341DLL.dll,使用IIC模式向EEPROM24L32读取及写入数据,已经实现了读取及写入操作,但发现一些问题。 1。我使用labVIEW7.1时,发现在调用及运行API-CH341ReadEEPROM VI时很不稳写,经常出现labVIEW内存出错,然后自动退出。 2。读取长度很多时候不能受控,现象是当设定读100个字节时,会读出100个安节的EEprom内容,但后面还带有不定无用的数据。当再设成读取50个字节再读取时,读出显示的字节数还是原来的数据,没有减少。 3。我调用时顺序是:CH341_OpenDevice>CH341ReadEEPROM>CH341_CloseDevice. 这样完成读操作,不知道是不是需要其它设置。

关于内存出错这个问题,你首先要确认在哪个API出错的,API输入参数是否正确,你可以参考我们的应用例程CH341PAR.EXE,有源码提供


我的问题可能这个兄弟碰到过:/bbs/View.asp?T=1&S=101&I=14650 不知道是不是要先对 PUCHAR oBuffer初始化?怎么初始化?因为我每次做读写操作都有可能使LabVIEW死掉,并且读出来的信息后会带有lavVIEW运行内存中的内容。就是说,调用了CH341ReadEEPROM操作后会改掉labVIEW软件内存的内容,怀疑操作前先要对Buffer初始化。


CH341ReadEEPROM在调用之前要把各个参数初始话啊,申明文件里有各个参数的说明.


我用Labview调用的,我看到早明文件,但只是说了下数据类型,没说怎么初始化吧?你说的申明文件在那下?我看我们看的是不是同一份.我看的是CH341DLL.H


其实我是想问用那个winapi能初始化"PUCHAR oBuffer",这样就能建立一块内存空间存放读出来的数据.这样不会导致Labview出错.


我说的初始化是指为各个参数建立正确的值,我说的申明文件是指CH341DLL.H BOOL WINAPI CH341ReadEEPROM( // 从EEPROM中读取数据块,速度约56K字节 ULONG iIndex, // 指定CH341设备序号 EEPROM_TYPE iEepromID, // 指定EEPROM型号 ULONG iAddr, // 指定数据单元的地址 ULONG iLength, // 准备读取的数据字节数 PUCHAR oBuffer ); // 指向一个缓冲区,返回后是读入的数据

"PUCHAR oBuffer",在函数调用之前肯定要初始化,也就是要分配一块内存,然后再把这块内存的首地址传给这个参数,这个应该是在Labview中来解决的,而不是我们的库来分配的,从堆里分配的话c语言里有malloc,从栈里面分配的话,可以直接定义一个数组,然后把数组的首地址传给这个参数


Labview 应该做不了这个分配吧,有没有兄弟用Labview成功调用呀??发个VI来看看.


官方有没有验证过Dll在Labview调用时的兼容性? 感觉还没有人能成功可靠地调用.


我们已有客户在LABVIEW下有成功应用. 如6楼所说,CH341ReadEEPROM()中参数oBuffer是一个指针,指向一块内存.这个内存需要您在您的应用程序内指定,可以以分配内存的方法分配一块内存或者用传递一个数组的首地址通过这个函数传给DLL即可. 在VC和VB内我们一般做法都是定义了一个数据变量,然后将数组首地址传下去即可. 在VB内也没有指针这个说法.所以传地址没法直接传.通过查资料发现:先将这个指针定义为any型,然后在参数位置写入"数据名[0]"即可.


上两星期把这问题解决了。原来是因为在调用CH341DLL读IICEEROM API时出现LabVIEW出来自动退出,其它是因为没有在这个输出涵数前连接一个同类型的BUFF导致,三个月后才解新决了这个问题呵呵。。特来再支持一下,现在很稳定很好用,哈哈,我用来带I/O 12位DAC /24C32都一一实现,非常方便。关键是在每个读API前连上一个跟输出相同类型及大小的BUFF,使输入的数据放在这个BUFF上,不然读出的数据会放在labVIEW内,导致labVIEW自动退出,现象是只要每读一次数就会跳出极不稳定。


能不能把你的VI传给我看一下啊,我的油箱是个人信息保护,已隐藏


怎么读EPPROM呢 需要初始话那些API函数


CH341PAR.EXE的源码提供?请问在哪里下载呢?


例程见这个链接:http://wch.cn/downloads/CH341EVT_ZIP.html 


只有登录才能回复,可以选择微信账号登录