原创 LabVIEW与通讯接口

2008-6-28 15:39 7386 7 7 分类: 测试测量
现在有一个系统,其数据已经采集到一块单片机上并经过处理,想通过工业以太网用网线将单片机板子上的数据传到上位机上并进行界面组态,比如说分别显示温度,液位等等,现在就是单片机的它发送数据的形式是socket形式,将各个变量一起送入的是缓存区,试问单片机和我上位机应该怎么通讯(注意他那边只是单片机,提供端口)?然后怎样才能将比如温度,液位等分别从缓存中取出来并实时变化?
firstly, your device must have "rabbit" network connect confer, SCM writed a solid command ( program )for your device, example, a string,


As LV listens a IP port read its sending command, SCM read the command from LV sent, SCM would compare the 
receive string.


and take the action itself corresponding. and I suggest that LV is server, and your device is client. lease note SCM 
device's response time is not fast. LV should give much delay time for it. 


串口调试助手另外一个应用程序,可以监视串口接受倒地数据,通过它你可以知道串口的数据。
然后在lv中处理,这样做比较方便。



我用NI帮助菜单里的Find Example中的hardware Input and Output\serial\Basic 2Port Serial Write and Read.vi例子,通过RS-232口与我的仪器进行通讯,将read string的显示窗口属性改为16进制的显示方式就可以看到数字了,如EB90 5E3B 1E,D1—EB(同步字)、D2—90(同步字)、D3—显示值低字节、D4—显示值高字节(最高位为符号位)、D5—D1 xor D2 xor D3 xor D4(校验字节),我用截取字符及翻转位置的控件成功将D3、D4字节取出,如上边的EB90 5E3B 1E中的5E3B取出并转换位置3B5E,我将这16进制换算成十进制和仪器显示数据相同。现在我想将这字符串转换成十进制数字显示在NI面板上怎么实现


在Numeric/Conversion中有一些vi可以用
其次在Advanced/Data Manipulation中的Type cast 这个也可以用来做类型转换


affix.gif20065283315461.rar
我最近在做一个界面,从串口读取数据后,先放到缓存里面,我缓存用的是一个一微长200的簇数组,前100个满了后存到数据库,同时后100个缓存数据,满了后存到数据库,再使用前100个,不知这样设计是否合理,恳请大家指导  大家有没有更好的办法,能使数据库高效的运作
就是人为的做一个FIFO到一定长度处理或者存储,这可以实现
我在做相关测速的时候也用到这种方法
不过串口的话速度是要好好考虑的是否能符合你的要求
前面板刷新间隔太大也不好
我觉得使用 队列 来实现缓存的功能应该更合适一些
polling是对某一对象,对某种条件进行查询
在event结构出现以前,常用于对前面板操作的监视
对于这里来说,就是每加入一个数组成员就检测一次数组大小,是否满足存储条件
用队列确实可以达到不用软件查询,直接用队列大小信息查询,节省了系统占用的时间
首先创建一个队列,在一段写,在另一端读,查询整个队列信息如果到一定数值
全部读出,可以作为两个线程。实现起来要考虑一下,你觉得适合就可以了
you can use Queue from Advanced >> Synchronization >> Queue Operations.
There are some examples come with LV. It is quite easy to use. 


我用labview7.1中的串口例程,总是报错,错误码为1073807202,为什么啊?对例子我没做什么修改的啊。我用的操作系统是xp。


This kind of behavior is typically encountered when the NI-VISA driver has not been properly installed. The NI-VISA driver is located on the device driver CD which is shipped with LabVIEW. Sometimes people forget or choose 
not to install the device driver CD when installing LabVIEW. There are two ways to determine if the NI-VISA driver is installed on the computer.


Check for the driver in MAX. Look in My System>>Software. If the driver is installed on the computer it should be 
displayed here as NI-VISA.



Another way to check for the presence of the driver on the system is to look for the visa32.dll file. When the driver is 
installed visa32.dll is placed by default in C:\WINDOWS\System32\
If you verify that the driver is not installed, you can install it from the device driver CD that shipped with LabVIEW. After 
installling the driver, the ports should now appear in MAX and be listed among the available VISA resources in 
LabVIEW 


做串口与lv的通讯,现在已经可以将读出的数据制转换成二进制字符串了。 我想问一下,如何将二进制字符串转换成二进制数字?有没有二进制数字直接转换成十进制的VI啊?还有二进制小数如何直接转换成十进制啊?
因为Num的representation中只有U8等等类型,
所以Num只有一类都是用10进制或者是科学计数法来设置的,
显示二进制都用字符串来显示的,在Labview以前版本中有vi是可以直接将二进制字符转换成十进制数字的 

有两台测量仪器,一台输出的是数字信号,通过RS232串口进行数据采集;另外一台输出的是模拟信号,通过NI-PCI-6110采集卡进行数据采集。这两个采集程序分别在两台不同的电脑上,现在需要让这两个采集程序同步进行,以便让得到的两组数据对应起来。
有人建议用一个脉冲模拟信号同时触发两台电脑上的采集程序,不知这样能否保证两组数据的同步?
如果上述方法可行,望高手指教:在通过RS232串口进行数据采集的这台电脑上,是否可以通过另外一个RS232串口接入触发信号?如果可以,程序中应当怎样实现?
或者,如果设法用一台电脑采集这两组数据,怎样才能保证它们同步?
Use "communication function" TCP/IP ,UDP, ActiveX, .net......
My suggestioin is that 用一个信号同时触发两台电脑采集程序,保证两组数据的同步. 
you can use the signal to command the other C to get data with RS232
用6110那台采两个信号就可以了.
让DI用AI的sample clock , 相同采样率, 这样就同步了.
一般仪器都有外部触发口,NI的卡有一PFI端口用于时钟.同步信号输入/输出,你可以通过采集卡输出同步信号,触发仪器,实现同步.

如何使用labview和agilent 34401A等建立热电阻、热电偶自动检定系统?拟用计算机控制热电阻、热电偶自动巡检开关实现对被检定热电阻、热电偶的巡检。34401A与巡检开关相连 ,计算机通过RS232与34401A通信。即:
  
                                                       ←      计算机
                                                      ↓               ↑↓
                                                                 34401A
                                                      ↓                ↑
                                                       →       巡检开关
                                                              ↓       ↓     ↓
                                                           被检1  …    被检n
在此应该采用RS232接口还是GPIB(IEE488)接口?它们的优劣?
Use RS232 and GPIB are available, if your demand of testing velocity is not harsh, that you can use RS232, it will 
save your money.
From your mentioning that your test station is easy, you can use "relay array (hardware)" to do the test motion. if 
you cann't make a digital hardware which controls the relay open or close. that you can purchase NI products, CI-6601 or CI6024.....to do the action.
想法没有问题,实现起来也是比较容易的,新版LabVIEW下通过RS-232接口控制仪器非常方便,个人认为从控制成本出发,没有必要再购置GPIB接口卡,这个测试系统的关键是如何驱动你的巡检开关!
对于巡检开关我这里目前有两个方法: 一、选用传统的普通的B4-65型无热电势转化开关。不便之处在于:在检定过程中由人工进行数据采样的转换;
       二、利用(德州仪器)SWY-3型 温度巡检仪 作为巡检开关 。将agilent 34401A与 SWY-3 型温度巡检仪的测量端相联。问题在于 如何让温度巡检仪与labview 通讯。

 


Q我以前用的是LabVIEW6.1 现在用的是LabVIEW7,我把一个用串口测量温度的程序(LabVIEW6.1 写的,现在可以正常测量)换了其中的相关图标。,参数包括波特率,奇偶校验,停止位,数据位等不变,发现每次运行到VISA READ就会产生错误,显示超时。不知何故,这两个版本的程序在写串口程序的时候有那些不同?初始串口的timeout开始我没有设置,采用的是默认值,后来发现出问题,就设置了一下,应该足够大,问题同样存在,我在测试的时候,从lv往缓冲写数据的这部分没问题,可是做lv接收从缓存里发来的数据时,总出现这样的错误对话框Hex 0XBFFF0015)Timeout expired before operation completed.
在用6.1的程序运行时候,程序没有什么问题,能够及时的采集温度传感器的数据,在改写成7.0的时候,就出问题,在这个过程中,参数没有改变,不知道这个问题怎么解决?
在运行程序的时候,前面版没有什么反应,在这个程序里面。结构比较简单,大概按顺序经过了VISA SERIAL ,VISA WRITE,VISA READ, VISA CLOSE 几个图标,我用高亮单步执行的时候,运行到VISA READ之前错误代码和程序数据流一直正常,只是到了READ时候,程序有问题,出来的错误代码显示上述错误,因为在这个程序里面。我只测量温度一个参数。所以没有测出来,最后的前面版就没有什么反应,
顺便问一下,怎样可以把程序粘贴上来,我想如果能把程序粘上来,可能回更清楚一点,



A:try the sample. if it isn't OK also. lease re-install driver.and you said your device's front panel isn't any respone. be focal attention to the command. is it right ?!detect the VISA OK or not. isn't from the hight light "error field wire info" just your instrument's response !



B:(缓冲区还没有28个数据,所以读出错)试一下,这个,应该没问题了!

affix.gif20065283351061.zip
affix.gif20065283351861.rar
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条