中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

PLC论坛

fluketop kollmorgen 抖音 西门子减速电机 德嘉 台达 英威腾 泓格论坛 西门子 我和LOGO!有个约会 FLIR红外热像论坛 【有奖活动】英威腾 “Ni美国国家仪器 “PLC发展趋势大讨论”活动圆满结束 艾睿光电产品体验活动 cc-link图文征集活动 西门子SMART LINE V3
工控论坛首页 PLC论坛 → 浏览主题: CRC校验程序
发表新帖 回复该主题
回帖:7个,阅读:273 [上一页] [1] [下一页]
* 帖子主题:

CRC校验程序

分享到
8214
805709808
文章数:747
年度积分:286
历史总积分:8214
注册时间:2013/3/17
发站内信
发表于:2021/7/28 23:47:16
#0楼
图片是一台PH值仪表的CRC函数,这个函数看不懂,想用S7-200的PLC和它通讯,请问CRC校验的程序该如何编写?谢谢
附件 Screenshot_20210728_234034_com.tencent.mm.jpg
附件 Screenshot_20210728_234934_com.tencent.mm.jpg




附件 Screenshot_20210728_234942_com.tencent.mm.jpg
[此贴子已经被作者于2021/7/28 23:50:41编辑过]
此帖发自手机工控论坛
9603
蛇会大学
文章数:3743
年度积分:659
历史总积分:9603
注册时间:2015/12/14
发站内信
2018论坛分享达人
发表于:2021/7/29 8:22:15
#1楼
unsigned int crc_chk_value(unsigned char *data_value, unsigned char length)
{
unsigned int crc_value=0xFFFF;
int i;
while(length--)
{ crc_value^=*data_value++;
for(i=0;i<8;i++)
{ if(crc_value&0x0001)
crc_value=( crc_value>>1)^0xA001;
else
crc_value= crc_value>>1;
}
}
return(crc_value);
}
敏问找算丁亏楼累
敏问找算哭哲累嘿
敏问够算恐哈做累揍忍没催妹
比漏累伤醒更八音舍黑
我晕能以身问晕陪笨累
512
120189887
文章数:152
年度积分:512
历史总积分:512
注册时间:2019/10/14
发站内信
发表于:2021/8/1 7:14:29
#2楼
老200还是smart
此帖发自手机工控论坛
512
120189887
文章数:152
年度积分:512
历史总积分:512
注册时间:2019/10/14
发站内信
发表于:2021/8/1 7:17:05
#3楼
modbus库直接用,不用另外写程序
此帖发自手机工控论坛
22149
guanyumou 版主
文章数:9691
年度积分:1778
历史总积分:22149
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2021/8/1 13:49:34
#4楼
200或者200 Smart一般都有Modbus RTU指令库,可以调用和这个设备进行通信。
可以参考我发布的相关PLC实现Modbus通信视频教程:
http://bbs.gkong.com/archive.aspx?id=485788
基于各种组态软件\触摸屏\PLC\单片机\变频器Modbus TCP\RTU\ASCII通信编程服务,需要请直接
联系!腾讯扣扣149034219
5636
chengzheng
文章数:1187
年度积分:771
历史总积分:5636
注册时间:2006/7/24
发站内信
发表于:2021/8/1 15:12:44
#5楼
typedef??? unsigned char???? uchar;
typedef??? unsigned int????? uint;
?
code uchar crcbuff [] = { 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3};
uint crc;????????????????? // CRC 码
void main(void)
{
? uchar *ptr;
? crc = 0;??????????????? // CRC? 初值
? ptr = crcbuff;????????????? //? 指向第一个 Byte 数据
? crc = crc16l(ptr,8);???????????
? while(1);
}
?
uint crc16l(uchar *ptr,uchar len)??????? // ptr 为数据指针,len 为数据长度
{
? uchar i;
? while(len--)
? {
????? for(i=0x80; i!=0; i>>=1)
??? {
??????? if((crc&0x8000)!=0) {crc<<=1; crc^=0x1021;}??????? 1-1??
????????? else crc<<=1;????????????????????   1-2
????? if((*ptr&i)!=0) crc^=0x1021;???????????????     1-3??
??? }
??? ptr++;
? }
? return(crc);
}
?
执行结果 crc = 0xdbc0;
[此贴子已经被作者于2021/8/1 15:13:34编辑过]
5636
chengzheng
文章数:1187
年度积分:771
历史总积分:5636
注册时间:2006/7/24
发站内信
发表于:2021/8/1 16:01:25
#6楼
好奇怪,代码乱了
5380
7583124
文章数:318
年度积分:616
历史总积分:5380
注册时间:2013/12/12
发站内信
发表于:2021/8/2 14:15:24
#7楼
为什么要自己写CRC检验呢?用PLC,这个CRC检验是内部处理的,自动添加在报文后面的
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2021 Gkong.com, All Rights Reserved

93.6