打印

关于c语言的485通讯协议

[复制链接]
4199|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jdb1|  楼主 | 2007-11-9 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
草履虫| | 2007-11-9 17:33 | 只看该作者

奇偶校验在实际应用中,有和没有基本一个样

校验出来又干嘛,根本不知道哪一位有错误,不能纠错。

使用特权

评论回复
板凳
xwj| | 2007-11-9 17:49 | 只看该作者

谁说没用?至少你知道有没有错,需不需要重发啊

使用特权

评论回复
地板
5880527| | 2007-11-9 19:15 | 只看该作者

呵呵,有些时候错误的信息会出人命的

起始码、信息长度、信息正文、校验码、结束码......

使用特权

评论回复
5
草履虫| | 2007-11-10 18:56 | 只看该作者

如果系统频繁出错,重发一万遍,累死。

所以大部分人根本不用。如果正的出现错码的话一般情况下都会用纠错处理,而不是用奇偶校验这种方法。

使用特权

评论回复
6
walnutcy| | 2007-11-11 11:40 | 只看该作者

最好是从软件协议上去判包的对错,

这样系统比较易实现,稳定

4楼的不错,,多是这种,,


还有就是,485只是一个电气标准,软件实现不一定要用串口,,你也可以用spi,,等。。。

使用特权

评论回复
7
mohanwei| | 2007-11-11 12:25 | 只看该作者

中间流程不用检查太多的,那样会引入很多问题。

在你的通信协议里直接判断最终数据包的对错就可以了。

使用特权

评论回复
8
jdb1|  楼主 | 2007-11-12 10:31 | 只看该作者

多谢

多谢大家来参与。我认为3楼说的对,有时,这边一直发送,那边没有应答,如果出现问题,就不好解决了,是不是命令必须等候回答?而数据对整个包校验,这样好些?

使用特权

评论回复
9
dld2| | 2007-11-12 10:58 | 只看该作者

简单通讯协议只检错,不纠错。

使用特权

评论回复
10
peizaili| | 2007-11-14 11:54 | 只看该作者

哈哈

一般用循环和校验加循环异或校验

使用特权

评论回复
11
qiushui007| | 2007-11-15 11:24 | 只看该作者

用CRC校验

使用特权

评论回复
12
qiushui007| | 2007-11-15 11:25 | 只看该作者

CRC

unsigned char code table_crc8[256]=    {
            0,  94, 188,226,97, 63,221,131,194,156,126,32, 163,253,31, 65,
        157,195,33, 127,252,162,64,30, 95, 1,  227,189,62, 96, 130,220,
        35, 125,159,193,66, 28, 254,160,225,191,93, 3, 128,222,60, 98,
        190,224,2,  92, 223,129,99, 61, 124,34, 192,158,29, 67,161,255,
        70, 24, 250,164,39, 121,155,197,132,218,56,102,229,187,89, 7,
        219,133,103,57, 186,228,6,  88, 25, 71,165,251,120,38, 196,154,
        101,59, 217,135,4,  90, 184,230,167,249,27, 69, 198,152,122,36,
        248,166,68, 26, 153,199,37, 123,58, 100,134,216,91, 5,  231,185,
        140,210,48, 110,237,179,81, 15, 78, 16, 242,172,47, 113,147,205,
        17, 79, 173,243,112,46, 204,146,211,141,111,49, 178,236,14, 80,
        175,241,19, 77, 206,144,114,44, 109,51, 209,143,12, 82, 176,238,
        50, 108,142,208,83, 13, 239,177,240,174,76, 18, 145,207,45, 115,
        202,148,118,40, 171,245,23, 73, 8,  86, 180,234,105,55, 213,139,
        87, 9,  235,181,54, 104,138,212,149,203,41, 119,244,170,72, 22,
        233,183,85, 11, 136,214,52, 106,43, 117,151,201,74, 20,246,168,
        116,42, 200,150,21, 75, 169,247,182,232,10, 84, 215,137,107,53    };

unsigned char GetCrc(unsigned char * ip,unsigned char i)
{    
    unsigned char  crc_vault=0;
    unsigned char  j;

    for (j=0; j<i; j++)    {            
            crc_vault = table_crc8[crc_vault ^ *ip];
            ++ip;
    }

    return crc_vault;
}

使用特权

评论回复
13
computer00| | 2007-11-15 11:36 | 只看该作者

用累加和校验吧,简单实用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

70

帖子

0

粉丝