您的位置 首页 > 数码极客

(labview如何实现位操作)labview如何实现计数!

在上位机软件与底层硬件通信时,经常遇到将一个整数数值按高、低位分解成不同的两部分数值的情况,如将U32类型的数值0x12345678拆分为两部分,即高16位0x1234,低16位0x5678,两部分代表不同的含义。或者反过来的情况,即将两个16位数值0x1234和0x5678拼接成一个数值32位数值0x12345678。

那么,在LabVIEW中有哪些方法可以实现将一个整数数值的按照高、低位分解成两部分或者反过来进行拼接呢?下面通过一个例子进行说明。

实例说明

这个例子的功能是将一个U32类型的整型数字按照不同的方法分解为高低两部分U16类型的数值,并且再将这两个U16类型的数值拼接成原始的U32型数值。软件运行主界面如下图所示:


这个例子中提供了五种方法,在主界面可通过“计算方式”单选框进行选择,分别为直接函数法、数据移位法、求商和余数法、强制转换法(数组)和强制转换法(簇),选择完计算方式后,点击计算按钮可显示对应的拆分及拼接结果。下面分别介绍这五种方法的具体程序框图实现过程。

直接函数法实现

这种方法直接利用LabVIEW软件中提供的“拆分数字”和“整数拼接”两个函数实现,程序框图代码如下图所示:


说明:这儿的计算过程放在了“计算”按钮的值改变事件中实现,在该事件中,根据“计算方式”选择的不同,在选择结构里面实现相应的计算。

数据移位法实现

这种方法利用“逻辑移位”、“与”及“或”函数配合实现,程序框图代码如下图所示:


当拆分时,将原始U32数值先右移16位得到高16位数值,将原始数值与0xFFFF相与后,得到低16位数值。

当拼接时,将高16位数值左移16位后再与低16位数值相或运算,就可得到原始的U32数值。

求商和余数法实现

这种方法程序框图代码如下图所示:


其拆分原理是利用“商与余数”函数将原始数值除以0x10000(即2的16次方),相当于右移16位,其整数部分即为高16位数值,其余数部分即为低16位数值

其拼接原理是拆分的逆过程,将高16位值乘以0x10000然后与低16位相加即可得到原始的U32数值。

实际上这种方法在本质上同上种数据移位的方法是相同的。

强制转换法(数组)实现

这种方法利用“强制类型转换”函数将原始U32类型数值转换为一维数组,然后进行拆分与拼接的实现,程序框图代码如下图所示:


当拆分时,将原始U32数值强制转换为U16类型的一维数组,那么数组的前两个元素就分别为高16位数值和低16位数值。

当拼接时,将由高16位数值和低16位数值组成的一维数组强制转换为U32类型的一个标量数值,该数值即为原始的U32数值。

强制转换法(簇)实现

这种方法利用“强制类型转换”函数将原始数值转换为簇类型(此处簇相当于C语言的结构体类型),然后进行拆分与拼接的实现,程序框图代码如下图所示:


这儿创建一个包含两个U16类型元素的簇,借助于该簇完成拆分与拼接功能。

对于都包含两个U16类型元素的一维数组和簇,由于在内存中数据的实际存放方式是完全相同的,因此,在本质上这种方法与上种方法强制转换为一维数组是相同的。

总结

这儿介绍了五种将整数数值按高低位分解及拼接的方法。例子中是以U32类型的数值进行说明的,当然,对于其它类型如U16、U64等类型的数值其处理方法与是适用的。

如果这篇文章对你有用的话,请关注+转发+收藏+点赞吧。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“labview如何实现位操作,labview如何实现计数,labview如何实现暂停,labview如何实现操作用户的增加和删减,labview如何实现加一”边界阅读