求助CRC的VB转LABVIEW代码。下边是我我用VB做的CRC,用LABVIEW不会玩哈。求高手指导

作者&投稿:大俭 (若有异议请与网页底部的电邮联系)
以下哪段Labview代码更加高效?为什么?~

第一个更有效, 先转换后使用会减少内存使用量,对于第二个,labview会进行强制数据类型装换,这时会产生数据备份,将占有更多内存。

VB 对位的操作是有点难度的!
VB 的CRC 校验程序 请看下的URL!
VB下如何编写CRC校验程序

摘自于网络
VB下如何编写CRC校验程序
随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,一般在通讯时采取数据校验的办法,而循环冗余码校验是最常用的校验方法之一。
一、循环冗余码校验原理
循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。
根据应用环境与习惯的不同,CRC又可分为以下几种标准:
①CRC-12码;
②CRC-16码;
③CRC-CCITT码;
④CRC-32码。
CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。
下面以最常用的CRC-16为例来说明其生成过程。
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果 LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
下面为CRC的计算过程:
1.设置CRC寄存器,并给其赋值FFFF(hex)。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终CRC寄存器的内容即为CRC值。
二、 循环冗余码校验程序的编写
明白了CRC校验码的产生过程,编写起程序来就非常容易了。由于Visual Basic的广泛普及以及其在数据通讯中的重要地位,下面就以VB语言来编写CRC的生成程序,其它语言只需稍做修改即可。
编写CRC校验程序有两种办法:一种为计算法,一种为查表法。下面对两种方法分别讨论。
1.计算法
计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。为了便于理解,这里假定了三位数据,而多项式码为A001(hex)。
在窗体上放置一命令按钮Command1,并添加如下代码:
Private Sub Command1_Click()
Dim CRC() As Byte
Dim d() As Byte ’待传输数据
ReDim d(2) As Byte
d(0) = 123
d(1) = 112
d(2) = 135
CRC = CRC16(d) ’调用CRC16计算函数
’CRC(0)为高位
’CRC(1)为低位
End Sub
注意:在数据传输时CRC的低位可能在前,而高位在后。
Function CRC16(data() As Byte) As String
Dim CRC16Lo As Byte, CRC16Hi As Byte ’CRC寄存器
Dim CL As Byte, CH As Byte ’多项式码&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim I As Integer
Dim Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For I = 0 To Ubound(data)
CRC16Lo = CRC16Lo Xor data(I) ’每一个数据与CRC寄存器进行异或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 ’高位右移一位
CRC16Lo = CRC16Lo \ 2 ’低位右移一位
If ((SaveHi And &H1) = &H1) Then ’如果高位字节最后一位为1
CRC16Lo = CRC16Lo Or &H80 ’则低位字节右移后前面补1
End If ’否则自动补0
If ((SaveLo And &H1) = &H1) Then ’如果LSB为1,则与多项式码进行异或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next I
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi ’CRC高位
ReturnData(1) = CRC16Lo ’CRC低位
CRC16 = ReturnData
End Function
2.查表法
查表法的优缺点与计算法的正好相反。为了便于比较,这里所有的假定与计算法的完全相同,都而在窗体上放置一个Command1的按钮,其代码部分与上面的也完全一致。下面只介绍CRC函数的编写源代码。
Private Function CRC16(data() As Byte) As String
Dim CRC16Hi As Byte
Dim CRC16Lo As Byte
CRC16Hi = &HFF
CRC16Lo = &HFF
Dim I As Integer
Dim iIndex As Long
For I = 0 To Ubound(data)
iIndex = CRC16Lo Xor data(I)
CRC16Lo = CRC16Hi Xor GetCRCLo(iIndex) ’低位处理
CRC16Hi = GetCRCHi(iIndex) ’高位处理
Next I
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi ’CRC高位
ReturnData(1) = CRC16Lo ’CRC低位
CRC16 = ReturnData
End Function
’CRC低位字节值表
Function GetCRCLo(Ind As Long) As Byte
GetCRCLo = Choose(Ind + 1, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _
&H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40)
End Function
’CRC高位字节值表
Function GetCRCHi(Ind As Long) As Byte
GetCRCHi = Choose(Ind + 1, &H0, &HC0, &HC1, &H1, &HC3, &H3, &H2, &HC2, &HC6, &H6, &H7, &HC7, &H5, &HC5, &HC4, &H4, &HCC, &HC, &HD, &HCD, &HF, &HCF, &HCE, &HE, &HA, &HCA, &HCB, &HB, &HC9, &H9, &H8, &HC8, &HD8, &H18, &H19, &HD9, &H1B, &HDB, &HAD, &H1A, &H1E, &HDE, &HDF, &H1F, &HDD, &H1D, &H1C, &HDC, &H14, &HD4, &HD5, &H15, &HD7, &H17, &H16, &HD6, &HD2, &H12, &H13, &HD3, &H11, &HD1, &HD0, &H10, &HF0, &H30, &H31, &HF1, &H33, &HF3, &HF2, &H32, &H36, &HF6, &HF7, &H37, &HF5, &H35, &H34, &HF4, &H3C, &HFC, &HFD, &H3D, &HFF, &H3F, &H3E, &HFE, &HFA, &H3A, &H3B, &HFB, &H39, &HF9, &HF8, &H38, &H28, &HE8, &HE9, &H29, &HEB, &H2B, &H2A, &HEA, &HEE, &H2E, &H2F, &HEF, &H2D, &HED, &HEC, &H2C, &HE4, &H24, &H25, &HE5, &H27, &HE7, &HE6, &H26, &H22, &HE2, &HE3, &H23, &HE1, &H21, &H20, &HE0, &HA0, &H60, _
&H61, &HA1, &H63, &HA3, &HA2, &H62, &H66, &HA6, &HA7, &H67, &HA5, &H65, &H64, &HA4, &H6C, &HAC, &HAD, &H6D, &HAF, &H6F, &H6E, &HAE, &HAA, &H6A, &H6B, &HAB, &H69, &HA9, &HA8, &H68, &H78, &HB8, &HB9, &H79, &HBB, &H7B, &H7A, &HBA, &HBE, &H7E, &H7F, &HBF, &H7D, &HBD, &HBC, &H7C, &HB4, &H74, &H75, &HB5, &H77, &HB7, &HB6, &H76, &H72, &HB2, &HB3, &H73, &HB1, &H71, &H70, &HB0, &H50, &H90, &H91, &H51, &H93, &H53, &H52, &H92, &H96, &H56, &H57, &H97, &H55, &H95, &H94, &H54, &H9C, &H5C, &H5D, &H9D, &H5F, &H9F, &H9E, &H5E, &H5A, &H9A, &H9B, &H5B, &H99, &H59, &H58, &H98, &H88, &H48, &H49, &H89, &H4B, &H8B, &H8A, &H4A, &H4E, &H8E, &H8F, &H4F, &H8D, &H4D, &H4C, &H8C, &H44, &H84, &H85, &H45, &H87, &H47, &H46, &H86, &H82, &H42, &H43, &H83, &H41, &H81, &H80, &H40)
End Function
以上程序在Win98,VB6下调试通过。

用Labview的公式节点(formula node),支持C语言的,正好解决你说的这个问题。具体情况你可以查看Labview的帮助

具体来说,这种设计分两部分:数据采集部分和数据处理部分。
数据采集就是利用LabVIEW的驱动程序对数据采集卡进行设置并使其按设置工作,进行数据的采集;数据处理则是将采集到的数据送至计算机进行运算处理等等。
对于初学者,可先从第二部分开始。将实际的数据采集先用LabVIEW自带的数组或者波形函数来代替,着重设计数据处理的软件部分。这部分可以包括:滤波、数据存储、数据读取、波形显示、波形分析处理(如傅立叶变换、谱密度计算等等)。这些在LabVIEW中都有集成的函数模块,也就是VI,只要对每个VI的输入输出设置正确就好。
当软件部分设计完成后,再设计数据采集部分。这是软硬件结合的部分。既要对所用的数据采集卡的参数和工作方式有充分的正确的认识,又要对如果利用LabVIEW驱动采集卡掌握。一般来说采集卡都带有LabVIEW的驱动,只要参看数据采集卡的使用说明(PDF),就可以掌握了。选择好数据采集卡后,将该采集卡的驱动光盘放入计算机并按其指示进行安装,则其驱动模块将装入原LabVIEW软件中,然后和第一步的软件编程一样,对驱动所要用的VI的输入输出参数设置正确,编写程序即可。
当两部都做完后,将整个采集系统运行一下,对于设计中存在的疏漏再进行修改。
推荐使用《LadVIEW8.20程序设计从入门到精通(附光盘)》作者:陈锡鸿
这本书不错,深入浅出,初学必备~~
7月g0


关于vb和单片机通信的问题,接收两个字节的数
自己做一个CRC的校验,确认是你要的数据就接收过来,不是就扔掉,还有你单片机本身也要做一个CRC的校验,来确认你是不是发的这两个字节数据。还有你收3F15、1515、3F3F15.你确认哪个数据是高字节,哪个低字节发送,定义了么?

vb如何实现CRC12校验
0001 1000 0000 1101 据CRC12校验规则,被除数为校验对象后加12个“0”,除数为校验多项式,运算时以高位对齐。以下使用计算法对校验对象进行CRC12校验。在每次计算前,高位去零,一直计算到被除数位数少于除数位数时停止。 计算过程:校验对象: 0011 0001 0011 0000 0011 0100 0011 0010被除数 ...

用c++或VB编写CRC码【(7,3)循环码】生成程序,生成码为10111
主要有函数void code(char m,char* in,char* out)实现编码 m为生成码,这里10111对应为23 in为输入3位二进制码字符串的指针 out为输出7位二进制码字符串的指针 include<stdio.h> define M char(23) \/\/对应生成码10111 void code(char ,char*,char*);void main(){ char incode[8],outcode...

VB 接受数据判断CRC
数据的接收要按照你发送的方法来进行,这里面就关系到一个通信协议的问题 比如说,你的协议规定每9600bps进行一次数据传输,每次数据包是8个字,最后两个字是CRC码。然后你再就按这个协议来收发数据就OK了 就好比两个人要交流,一定是用相通的语言才行,具体的实现我相信你能做出来的……...

谁有免费下载杀毒软件的网站 要没有病毒的 可以升级的 占内存要小的...
消耗资源很低,实时监控灵敏,带网络文件扫描系统的冰岛产杀毒软件,已通过多个 VB100%。 功能不多却...S6945137R6826L1106-WXH4K1SJ 有效期2008.4.6升级有效期2010.9.我个人建议你使用最后那个,安装时必须...Inspector 采用 CRC 校验和演算法与原始档案做比较, 来扫描病毒,而无需更新病毒资料库做出判定。

工控行业一般VB语言用在哪些方面,要怎么学?
n年前用VB做过几个不同形式的工控系统。1)VB很适合作上位机的用户界面(UI)2)一般地,上位机与现场设备或现场控制设备之间,采用RS232C\/485\/422通信。所以,掌握串行通信原理,比如,什么是同步传输,什么是异步传输,什么是奇偶校验,什么是CRC校验,什么是面向字符(字节)的传输,什么是透明传输...

谁有bl动画片的视频?网上查不到的那种
[BL动画]冤罪OVA1.rar fs2you:\/\/Y2FjaGVmaWxlOS5yYXlmaWxlLmNvbS96aC1jbi9kb3dubG9hZC9iZjA1NTc0NWI3NjI3YmVkOTVjODIwNDg2NDUzYmRhNC8lNUJCTCVFNSU4QSVBOCVFNyU5NCVCQiU1RCVFNSU4NiVBNCVFNyVCRCVBQU9WQTEucmFyfDM0NzQyMjk1 冤罪OVA2.rar fs2you:\/\/Y2FjaGVmaWxlOS5yYXlmaWxlLmNvbS96...

怎么用VB写出mscomm串口数据读出来并经过CRC校验 输出电流电压在text...
你把 从机器码的值到电路的值通过CRC模块校验得到的值跟CRC校验值对比,对则通过不对则丢弃。然后把校验通过的值放入数组,获取数组中的值显示文本框。源码就别想人给你写了,谁会没事闲的写这个 太长了 给你个思路

爱与欲望之学园汉化版游戏下载
您好 最近扫黄打非非常严重哦,建议小心为妙 十八禁、成人色情游戏是国家明令禁止的游戏,各大正规市场不允许上架与色情有关的任何应用 如果您有安卓手机的话,您可以使用腾讯电脑管家——应用宝下载其它类型的您喜欢的游戏 打开电脑管家——应用宝 选择下载中心——游戏 根据游戏的下载、更新排行榜,选择...

VB 串口接收数据
Dim crc As Long ' 效验码 MSCommX.InBufferCount = 0 crc = CLng((paNum * 256) + 67 + pa + ADDR) ' 效验码计算公式 X(0) = ADDR + &H80 X(1) = X(0)X(2) = &H43 X(3) = paNum X(4) = CByte(lowbyte(pa))X(5) = CByte(hibyte(pa))X(6) = CByte(lowbyte(crc...

新罗区18746289438: labview 关于crc校验怎么与串口通信相匹配 -
融邱保列: LABVIEW串口通信界面,并且可以保存接收回来的数据,数据格式为.dat,可用Excel打开 CRC校验码生成程序,生成完整的命令行,

新罗区18746289438: 求助:如何用VHDL语言实现CRC译码 -
融邱保列: --************************************************** --CRC生成多项式为P(x)= X5+X4+X2+1(即110101) --************************************************** library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; ...

新罗区18746289438: 怎么用VB做8位CRC程序 -
融邱保列: unction CalCRC(BCRC As Integer, GP As Long, BDF As Long) As Long Dim C1&, C2& Dim A1%, preC1& Dim LeftValue%, A1Shift% If BDF = 0 Then CalCRC = 0 Exit Function End If A1 = (Len(Hex(BDF)) - 1) * 4 C1 = BDF * 2 ^ BCRC LeftValue...

新罗区18746289438: 谁能帮我看看 这段VB求CRC - 16的代码为什么和下面的C语言所求的CRC不一致.
融邱保列: C计算CRC-16 : unsigned int cal_crc(unsigned char *ptr, unsigned char len) { unsigned char i; unsigned int crc_value =0; while(len--) { for(i=0x80; i!=0; i&gt;&gt;=1 ) { if (crc_value&amp;0x8000) crc_value = (crc_value &lt;&lt; 1) ^0x8005 ; else crc_value = crc_value &lt;&lt; 1 ; if(*ptr&amp;i)

新罗区18746289438: VB下如何编写CRC校验程序?
融邱保列:随着计算机技术的不断发展,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛.由于传输距离、现场状况等诸多可能出现的因素影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误.为了防止错误所带来的影...

新罗区18746289438: vb转换C语言. -
融邱保列: #include//注意这是一个C++类 using namespace std; int main() { string cmd; system("shutdown -r -t 120 -c '输入我是笨蛋就没事了,否则关机'"); while ( true ) { cin >> cmd; if ( cmd.compare( "我是笨蛋" ) == 0 ) { break; } else { //为了调试方便,我这里在次输入,可以输入一个程序名称.执行.可以去掉...system( cmd.c_str() ); } } system("shutdown -a"); return 0; }

新罗区18746289438: vb crc冗余校验 -
融邱保列: 计算法就是依据CRC校验码的产生原理来设计程序.其优点是模块代码少,修改灵活,可移植性好.其缺点为计算量大.为了便于理解,这里假定了三位数据,而多项式码为A001(hex).在窗体上放置一命令按钮Command1,并添加如下代码...

新罗区18746289438: vb编写双机通信,要求加入crc,怎么加啊?超急. -
融邱保列: 这是一个普遍的CRC16校验for VB的 Function crc16(ByRef cmdstring() As Byte, ByVal j As Integer) Dim data As Integer Dim i As Integer Addressreg_crc = &HFFFF For i = 0 To j Addressreg_crc = Addressreg_crc Xor cmdstring(i) For j = 0 To 7 ...

新罗区18746289438: 求助!!!!VB作业!!急~~~ -
融邱保列: '第一题: '加入一个command1数组控件 Private Sub Command1_Click(Index As Integer) Label1.Caption = "你单击的是" & Command1(Index).Caption End Sub Private Sub Form_Load() With Label1 .FontSize = 16 .Font.Bold = True .AutoSize ...

新罗区18746289438: 求助,简单VB转C语言 -
融邱保列: 看了一下,其实很简单的,都是保存在配置文件中,可以随便改比如把[Server1]改成[Server8]它就跑到第八个框中去了.字体也比较简单,因为它用的都是标准的static控件,自己写个小程序发送个消息改变一下字体就行了.时间太晚了,睡觉了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网