最近在用matlab控制IAI电缸,涉及CRC16—modbus通讯协议,找了很多资源也翻墙去解决,最后在博文的基础上修改得以解决。针对IAI电缸的控制涉及“从站地址功能码等”。:[原博文](https://blog.csdn.net/seastarme/article/details/85180871?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159774927219195264561580%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159774927219195264561580&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-2-85180871.pc_ecpm_v3_pc_rank_v3&utm_term=CRC16modbus%20MATLAB&spm=1018.2118.3001.4187)

实现的校验码如下图:

在原来博文的基础上,直接键入从站地址的16进制字符,方便大家理解,后面可以换成改变数据字符,就可以实现matlab对电缸的位置控制。
代码见压缩包

function crc = crc_modbus(frame)
%%
% frame由Slave Adress. Function Code以及Data组成,格式为[xx;xx;xx;...],
% xx由十六进制表示,含2个字节。
% 输出格式: crc = [CRC Lo; CRC Hi], [xx; xx]。
%%初始化frame=[hex2dec('01'),hex2dec('05'),hex2dec('04'),hex2dec('14'),hex2dec('FF'),hex2dec('00')];
frame_dec = frame;
frame_bin = dec2bin(frame_dec, 16); % 将十六进制转变为二进制
initial_crc = uint8(ones(1, 16)); % CRC初始值0xFFFF
op_crc = uint8([1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1]);% 0xA001,用于异或运算
%% 利用for循环计算二进制表示的CRCn = numel(frame);
for i = 1:nframe_bin_element = frame_bin(i, :);frame_bin_element =  frame_bin_element';frame_bin_element_dec = bin2dec(frame_bin_element);frame_bin_element_dec = frame_bin_element_dec';frame_crc =  uint8(frame_bin_element_dec);if i == 1crc = bitxor(initial_crc, frame_crc);elsecrc = bitxor (crc, frame_crc);endLSB = crc(16);for j = 1:8crc = [uint8(0), crc(1:15)];if LSB == 1crc = bitxor(crc, op_crc);endLSB = crc(16);end
end
%% 将二进制CRC转变为十六进制
crc_bin = dec2bin(crc);
crc_dec = bin2dec(crc_bin');
crc = dec2hex(crc_dec , 4);
crc = [crc(3:4);crc(1:2)]; % [CRC Lo; CRC Hi]
end

CRC16-Modbus—MATLAB相关推荐

  1. Java语言 CRC-16/MODBUS..16+x15+x2+1校验码生成

    CRC算法名称 多项式公式 宽度 多项式 初始值 结果异或值 输入值反转 输出值反转 CRC-16/MODBUS 16+x15+x2+1 16 8005 FFFF 0000 true true 查表法 ...

  2. CRC-16/MODBUS x16+x15+x2+1校验计算 C++

    CRC-16/MODBUS x16+x15+x2+1校验计算 #include <stdio.h> int main(void) {     unsigned short tmp = 0x ...

  3. CRC-16 Modbus代码

    CRC(循环冗余校验)在线计算 /* 二进制显示无符号int函数,number:十进制整数 */ unsigned int IntegerToBinary(unsigned int number){c ...

  4. C++与JAVA代码实现CRC-16/MODBUS算法,且与 http://www.ip33.com/crc.html 进行结果验证

    CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与 ...

  5. Verilog --crc16 modbus

    Verilog --crc16 modbus 1 .CRC 校验原理 CRC 的基本原理就是在一个 n 位二进制数据序列之后附加一个 r 位二进制检验码序列,从而构成一个总长为 p = n + r 位 ...

  6. 16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器

    最近在项目上遇到,用485协议命令控制灯光继电器的开关需要计算16进制(CRC16)(MODBUS RTU通讯)校验码来写控制命令,这种在网上有现成的计算器,我们直接使用即可,以下为我用的一个计算器的 ...

  7. CRC16 Modbus计算原理与代码实现

    1.CRC16 Modbus计算原理 1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器. 2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节 ...

  8. CRC-16 / MODBUS 校验计算方法

    CRC-16 / MODBUS : 1)CRC寄存器初始值为 FFFF:即16个字节全为1: 2)CRC-16 / MODBUS的多项式A001H (1010 0000 0000 0001B) 'H' ...

  9. 一文详解循环冗余校验校验算法(CRC校验)及C语言代码的实现 ---- 以CRC-16/MODBUS为例讲解

    一.概述 现在的产品开发过程中,无论是数据的储存还是传输,都需要确保数据的准确性,所以就需要在数据帧后面附加一串校验码,方便接收方使用校验码校验接收到的数据是否是正确的. 常用的校验方式有奇偶校验.异 ...

  10. crc java_java实现CRC16 MODBUS校验算法

    /*** 查表法计算CRC16校验 * *@paramdata 需要计算的字节数组*/ public static String getCRC3(byte[] data) {byte[] crc16_ ...

最新文章

  1. 有哪些好用的企业目标管理和任务协作软件?
  2. javascript——三元操作符
  3. 在Java中使用final关键字可以提高性能吗?
  4. MPLS TE基本配置-IS-IS
  5. OpenCV阈值范围Threshold inRange的实例(附完整代码)
  6. 还在对Matplotlib繁琐的图层设置感到烦恼!?快来看看这个Python绘图工具包吧
  7. 虚函数(Virtual Function)与 纯虚函数(Pure Virtual Function)
  8. [转] 微软轻量级 Web 开发平台 WebMatrix 发布
  9. 小米自然语言处理工程师招聘条件与自己的对应整理
  10. DTW算法(语音识别)
  11. Unity3D卡牌手游《X三国》源码前后端完整下载安卓+IOS双端
  12. matlab 太阳角,matlab – 来自太阳位置和观察者位置的时间
  13. Allatori:代码混淆器的使用
  14. STC12系列单片机的AUXR辅助寄存器
  15. 方案系列--多个应用同时接入Google和Facebook三方登陆互联互通解决方案
  16. 【前端学习】前端学习第十三天:JavaScript中DOM技术介绍
  17. 我们该如何高效的学习
  18. 树莓派输出pwm波c语言,02树莓派4B—C语言编程——PWM
  19. Java基础:Java八大基本数据类型
  20. 网页中打开qq聊天框

热门文章

  1. 出租车计费-Java练习题
  2. 内网渗透测试:隐藏通讯隧道技术
  3. Java入门知识点--老王笔记
  4. 俄文输入法_【俄语怎么学】手把手教你使用俄语输入法
  5. openlayers3.0叠加天地图底图及注记后再叠加geoserverWMS服务
  6. 地理信息系统实习教程 第26章 地图注记
  7. python程序设计基础课后答案-python语言程序设计基础(第2版)课后答案嵩天
  8. java 截位法保留小数_资料分析——截位法
  9. 全球地区选择,支持中英文切换。国家-省市-城市-地区
  10. PingTunnel隧道搭建