您现在所在的是:

PLC论坛

回帖:7个,阅读:734 [上一页] [1] [下一页]
* 帖子主题:

CRC校验程序

8604
805709808
文章数:759
年度积分:56
历史总积分:8604
注册时间: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编辑过]
此帖发自手机工控论坛
12465
蛇会大学
文章数:4619
年度积分:791
历史总积分:12465
注册时间: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);
}
敏问找算丁亏楼累
敏问找算哭哲累嘿
敏问够算恐哈做累揍忍没催妹
比漏累伤醒更八音舍黑
我晕能以身问晕陪笨累
146
120189887
文章数:185
年度积分:146
历史总积分:146
注册时间:2019/10/14
发站内信
发表于:2021/8/1 7:14:29
#2楼
老200还是smart
此帖发自手机工控论坛
146
120189887
文章数:185
年度积分:146
历史总积分:146
注册时间:2019/10/14
发站内信
发表于:2021/8/1 7:17:05
#3楼
modbus库直接用,不用另外写程序
此帖发自手机工控论坛
27956
guanyumou 版主
文章数:10552
年度积分:1139
历史总积分:27956
注册时间: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
8580
chengzheng
文章数:1655
年度积分:402
历史总积分:8580
注册时间: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编辑过]
8580
chengzheng
文章数:1655
年度积分:402
历史总积分:8580
注册时间:2006/7/24
发站内信
发表于:2021/8/1 16:01:25
#6楼
好奇怪,代码乱了
7337
7583124
文章数:497
年度积分:851
历史总积分:7337
注册时间:2013/12/12
发站内信
发表于:2021/8/2 14:15:24
#7楼
为什么要自己写CRC检验呢?用PLC,这个CRC检验是内部处理的,自动添加在报文后面的

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

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

62.4004