跳至正文
-
Subscribe to our newsletter & never miss our best posts. Subscribe Now!
BG6RSH's 随记.

我们总是在感叹昨天,忽视今天,幻想着明天中渡过,且过且珍惜.....

BG6RSH's 随记.

我们总是在感叹昨天,忽视今天,幻想着明天中渡过,且过且珍惜.....

  • 首页
  • 论坛
  • 随记
  • 编程
  • 软件
  • 留言
  • 首页
  • 论坛
  • 随记
  • 编程
  • 软件
  • 留言
关

搜索

  • https://www.facebook.com/
  • https://twitter.com/
  • https://t.me/
  • https://www.instagram.com/
  • https://youtube.com/
Subscribe
编程

ModBus协议CRC16校验S7-SCL算法2:查表法

作者 admin
2015年1月1日 1 分钟阅读
4

经过几天的测试,发现在FC中无法对数组进行初始化,而在FB中可以,所以就将这种算法写成FB了。
在定义时对数组的初始化这个事困扰了我好多天,后来发现初始化不能超过255个成员,可能是系统的限制吧。
下面是CRC功能模块源代码:

Delphi/Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
FUNCTION_BLOCK FB17
CONST
    // Constants
    ARRAY_COUNT := 32;
END_CONST
 
VAR
    CRCHi: ARRAY [0..255] OF BYTE := [  // 不知道这里为什么只能初始化255个成员,系统限制吗?
        16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41, 16#00,
        16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1,
        16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81,
        16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40,
        16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#01,
        16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0,
        16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80,
        16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41,
        16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00,
        16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0,
        16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80,
        16#41, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41,
        16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#01,
        16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1,
        16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81,
        16#40, 16#01, 16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40,
        16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1, 16#81, 16#40, 16#01,
        16#C0, 16#80, 16#41, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#00, 16#C1,
        16#81, 16#40, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81, 16#40, 16#01, 16#C0, 16#80,
        16#41, 16#01, 16#C0, 16#80, 16#41, 16#00, 16#C1, 16#81];
 
    CRCLo: ARRAY [0..255] OF  BYTE := [
        16#00, 16#C0, 16#C1, 16#01, 16#C3, 16#03, 16#02, 16#C2, 16#C6, 16#06, 16#07, 16#C7, 16#05,
        16#C5, 16#C4, 16#04, 16#CC, 16#0C, 16#0D, 16#CD, 16#0F, 16#CF, 16#CE, 16#0E, 16#0A, 16#CA,
        16#CB, 16#0B, 16#C9, 16#09, 16#08, 16#C8, 16#D8, 16#18, 16#19, 16#D9, 16#1B, 16#DB, 16#DA,
        16#1A, 16#1E, 16#DE, 16#DF, 16#1F, 16#DD, 16#1D, 16#1C, 16#DC, 16#14, 16#D4, 16#D5, 16#15,
        16#D7, 16#17, 16#16, 16#D6, 16#D2, 16#12, 16#13, 16#D3, 16#11, 16#D1, 16#D0, 16#10, 16#F0,
        16#30, 16#31, 16#F1, 16#33, 16#F3, 16#F2, 16#32, 16#36, 16#F6, 16#F7, 16#37, 16#F5, 16#35,
        16#34, 16#F4, 16#3C, 16#FC, 16#FD, 16#3D, 16#FF, 16#3F, 16#3E, 16#FE, 16#FA, 16#3A, 16#3B,
        16#FB, 16#39, 16#F9, 16#F8, 16#38, 16#28, 16#E8, 16#E9, 16#29, 16#EB, 16#2B, 16#2A, 16#EA,
        16#EE, 16#2E, 16#2F, 16#EF, 16#2D, 16#ED, 16#EC, 16#2C, 16#E4, 16#24, 16#25, 16#E5, 16#27,
        16#E7, 16#E6, 16#26, 16#22, 16#E2, 16#E3, 16#23, 16#E1, 16#21, 16#20, 16#E0, 16#A0, 16#60,
        16#61, 16#A1, 16#63, 16#A3, 16#A2, 16#62, 16#66, 16#A6, 16#A7, 16#67, 16#A5, 16#65, 16#64,
        16#A4, 16#6C, 16#AC, 16#AD, 16#6D, 16#AF, 16#6F, 16#6E, 16#AE, 16#AA, 16#6A, 16#6B, 16#AB,
        16#69, 16#A9, 16#A8, 16#68, 16#78, 16#B8, 16#B9, 16#79, 16#BB, 16#7B, 16#7A, 16#BA, 16#BE,
        16#7E, 16#7F, 16#BF, 16#7D, 16#BD, 16#BC, 16#7C, 16#B4, 16#74, 16#75, 16#B5, 16#77, 16#B7,
        16#B6, 16#76, 16#72, 16#B2, 16#B3, 16#73, 16#B1, 16#71, 16#70, 16#B0, 16#50, 16#90, 16#91,
        16#51, 16#93, 16#53, 16#52, 16#92, 16#96, 16#56, 16#57, 16#97, 16#55, 16#95, 16#94, 16#54,
        16#9C, 16#5C, 16#5D, 16#9D, 16#5F, 16#9F, 16#9E, 16#5E, 16#5A, 16#9A, 16#9B, 16#5B, 16#99,
        16#59, 16#58, 16#98, 16#88, 16#48, 16#49, 16#89, 16#4B, 16#8B, 16#8A, 16#4A, 16#4E, 16#8E,
        16#8F, 16#4F, 16#8D, 16#4D, 16#4C, 16#8C, 16#44, 16#84, 16#85, 16#45, 16#87, 16#47, 16#46,
        16#86, 16#82, 16#42, 16#43, 16#83, 16#41, 16#81, 16#80];
END_VAR
 
VAR_INPUT
    Byte_Array : ARRAY[0..ARRAY_COUNT-1] OF BYTE;
    Count : INT;    
END_VAR
 
VAR_OUTPUT
    RESULT : WORD;
END_VAR
 
VAR_TEMP
    // Temporary Variables
    hi: BYTE;
    lo: BYTE;
    index,i,datalength: INT;
END_VAR
 
    // Statement Section
    hi := 16#FF;
    lo := 16#FF;
    datalength := Count;
    i := 0;
    WHILE (datalength > 0) DO
        index := BYTE_TO_INT(hi XOR Byte_Array[i]);
        i := i + 1;
        hi := lo XOR crchi[index];
        lo := crclo[index];
        datalength := datalength - 1;
    END_WHILE;
    RESULT := hi;
    RESULT := SHL(IN := RESULT, N:= 8) OR lo;
END_FUNCTION_BLOCK
 
DATA_BLOCK DB17  FB17
//
// Block Comment...
//
BEGIN
    // 数组定义时只让初始化255个,剩下的一个只能在这初始化了
    CRCLo[255] := 16#40;
    CRCHi[255] := 16#40;
END_DATA_BLOCK

调用代码如下:

Delphi/Pascal
1
2
3
4
5
6
    dd[0] := 16#31;dd[1] := 16#32;dd[2] := 16#33;dd[3] := 16#34;dd[3] := 16#35;
    
    FB17.DB17(Byte_Array := DD // IN: ARRAY
           ,Count := 5 // IN: INT
           );
    MW112 := DB17.RESULT; // OUT: WORD

标签:

CRCModbusS7-SCL
作者

admin

关注我
其他文章
上一个

ModBus协议CRC16校验S7-SCL算法

下一个

一款功能强大的物联网WIFI芯片ESP8266

4 评论
  1. zxy5577255说道:
    2015年2月8日 16:27

    找了好久就是要灵图天行者

    回复
  2. zxy5577255说道:
    2015年2月8日 16:28

    找了好久呀 我要灵图天行者

    回复
  3. 日本高速主机说道:
    2015年2月14日 23:13

    博主的知识真是渊博!

    回复
  4. 酒店毛巾说道:
    2016年5月9日 10:40

    写的很好,支持

    回复

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

4条垃圾评论已被Akismet阻挡 (在新标签页中打开)

近期文章

  • www.tansoo.cn网站空间迁移至armbian主机
  • 在QT6中安装qtmqtt、qtopcua控件的方法
  • 你的 Python 环境或安装版没有 spyder‑kernels 模块或没有安装正确的版本 (>=
  • 用PYTHON爬网络小说源代码
  • QT5.15.2搭建ANDROID编译环境

近期评论

  • gg 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • admin 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • /api/positions/里addres 为什么是null啊? 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • gg 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • 9394 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》

归档

  • 2025 年 6 月
  • 2023 年 6 月
  • 2022 年 10 月
  • 2021 年 5 月
  • 2021 年 4 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 6 月
  • 2019 年 11 月
  • 2019 年 8 月
  • 2019 年 6 月
  • 2019 年 1 月
  • 2018 年 12 月
  • 2018 年 11 月
  • 2017 年 9 月
  • 2016 年 7 月
  • 2016 年 5 月
  • 2015 年 12 月
  • 2015 年 4 月
  • 2015 年 1 月
  • 2014 年 12 月
  • 2014 年 11 月
  • 2014 年 10 月
  • 2014 年 9 月
  • 2014 年 8 月
  • 2014 年 7 月
  • 2014 年 6 月
  • 2014 年 5 月
  • 2013 年 10 月
  • 2013 年 9 月
  • 2013 年 8 月
  • 2013 年 7 月
  • 2013 年 6 月
  • 2013 年 5 月
  • 2013 年 4 月
  • 2013 年 3 月
  • 2013 年 2 月
  • 2013 年 1 月
  • 2012 年 12 月
  • 2012 年 11 月
  • 2012 年 10 月
  • 2012 年 6 月
  • 2012 年 3 月
  • 2011 年 8 月
  • 2011 年 5 月
  • 2011 年 4 月
  • 2011 年 3 月
  • 2011 年 1 月
  • 2010 年 8 月
  • 2010 年 6 月
  • 2010 年 4 月
  • 2010 年 3 月
  • 2010 年 2 月
  • 2010 年 1 月
  • 2009 年 12 月
  • 2009 年 11 月

分类

  • 编程
  • 软件
  • 随记

其他操作

  • 注册
  • 登录
  • 条目 feed
  • 评论 feed
  • WordPress.org

标签

aliyun Android CRC DBGridEh ddns Delphi EhLib ESP8266 GP328D gp338plus GP3688 Modbus phpbb python QT raspberry S7-SCL sapi speech SpVoice Synology traccar UART Unicode virtualbox vmware WGS84 wordpress ZeroTier 写频 动态IP 图片尺寸 地图 外挂编程 天气预报 导航 打印 扩频 拼音首字母 支票快打 树莓派 爬虫 百度地图 西门子PLC 车联网API

友情链接

  • 私有云论坛
  • 百度开放云
  • 主机管理
  • My Cloud
  • 智能家居技术论坛
  • 精灵云
  • 雅苑私站
Copyright 2026 — BG6RSH's 随记.. All rights reserved. Blogsy WordPress Theme