ilawp 发表于 2010-5-6 11:53:10

请教,labview中如何把字节型数组改成整数(u16)型(用以串口传输8位以上格式的数据)

我想用串口传送一些16位整型,用c语言的话可以在发送时把 u16数组的指针 强制类型转换成char型,接受后接受到char型数组,再吧数组的指针转成u16就行了。

    但是在labview里就不知道怎么做了,如果把一个个char拼成u16,数据一多很不方便,它有没有指针,强制类型转换行不通。用printf的方法倒是可以,但数据量太大,也增加了不必要的计算。
    整数还好,要是浮点数可能会更麻烦。

    望高手赐教,有没有什么好办法。

miminzhang 发表于 2010-5-6 12:33:06

接受数填入2,用for多次读出数据。

lihua 发表于 2010-5-6 16:10:50

先转换为U8数组,然后调换数组顺序即可,具体看下图:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_551898.jpg
(原文件名:lv相互转换为浮点数.jpg)
若是MODBUS协议的U16类型参考此图也能轻易实现。

lwy86 发表于 2010-5-6 17:48:06

mark

ilawp 发表于 2010-5-6 22:06:55

首先谢谢1楼和2楼的两位。
原来是我对labview的“强制类型转换”理解有误。
lv8.5cn的帮助里是这么写的
********************************************************************
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_551978.png
(原文件名:截图1273153938.png)


如x和类型的大小不一致,函数会生成非预期数据。如x需要的存储位数大于类型可提供的位数,该函数将使用x的高位字节,放弃剩余的低位字节。如x是小于类型的数据类型,该函数将把x中的数据移至类型的高位字节,在剩余的低位字节中填充0。例如,一个值为1的无符号8位整数被强制转换为无符号16位整数时,其值变为256。如使用该函数时需使用数组,则仅可使用标量数组或标量簇数组。
      ~~~~~~~~~~~~~~~~~~~~~~~~

********************************************************************

以至于我认为U8数组{1,1}转化为U16后会成为{256,256},头大了很久。
不过从图表示来看*(类型 *) &x又应该变成{257}。
另外“类型”应该咋输入也不清楚,帮助里是这么解释的:“类型是数据要转换至的数据类型。通过将常量或控件连线至类型接线端可设置数据要转换为的数据类型。LabVIEW将忽略与类型接线端连接的常量和控件中的数据。”

后来做了个简单实验
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_551980.png
(原文件名:截图1273154102.png)

http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_551981.png
(原文件名:截图1273154079.png)

发现这个就是我想要的东西。字符串001312用十六进制表示就是 3030 3133 3132,0x3030=12336,没错。

另外“类型”那个输入也清楚了,就是你想要输出啥类型的东西,就随便找个相同类型的东西连在“类型”那个口上,它不管你数值是多少。我比较笨,为了获得U16型数组,只能创建了个数组输入控件来得到。

这样反过来再看帮助的内容,“在剩余的低位字节中填充0”,就不明白了,难道这个只是针对非数组用的???这个望高手指点。

whhityang 发表于 2010-5-28 08:55:19

这里用LABVIEW的太少了,还是换地方问吧。
页: [1]
查看完整版本: 请教,labview中如何把字节型数组改成整数(u16)型(用以串口传输8位以上格式的数据)