皮皮网

【燕窝 源码】【牛博棋牌源码】【外卖红包分销源码】modbus 源码 c

来源:足彩源码贴吧 时间:2024-12-22 23:54:05

1.如何读取modbus寄存器中的值
2.如何在C语言中利用程序读取MODBUS地址
3.51单片机C语言怎么写Modbus通信程序?
4.485主站和从站C代码的区别
5.libmodbus学习(一)之Modbus RTU-master

modbus 源码 c

如何读取modbus寄存器中的值

       ä¸‹é¢æ˜¯ä¸€ä¸ªç”¨VC编写的ModBus RTU通讯的例子

       ï¼ˆä¸€ï¼‰ã€é€šè®¯å£è®¾ç½®

       DCB dcb;

       hCom=CreateFile("COM1",源码

       ã€€ã€€ã€€ã€€ GENERIC_READ|GENERIC_WRITE,

       ã€€ã€€ã€€ã€€ã€€0,

       ã€€ã€€ã€€ã€€ã€€NULL,

       ã€€ã€€ã€€ã€€ã€€OPEN_EXISTING,

       ã€€ã€€ã€€ã€€ã€€0,

       ã€€ã€€ã€€ã€€ã€€NULL);

       if(hCom==INVALID_HANDLE_VALUE)

       {

       ã€€ã€€MessageBox("createfile error,error");

       }

       BOOL error=SetupComm(hCom,,);

       if(!error)

       ã€€ã€€MessageBox("setupcomm error");

       error=GetCommState(hCom,&dcb);

       if(!error)

       ã€€ã€€MessageBox("getcommstate,error");

       dcb.BaudRate=;

       dcb.ByteSize=8;

       dcb.Parity=EVENPARITY;//NOPARITY;

       dcb.StopBits=ONESTOPBIT;

       error=SetCommState(hCom,&dcb);

       ï¼ˆäºŒï¼‰ã€CRC校验码计算

       UINT crc

       void calccrc(BYTE crcbuf)

       {

       BYTE i;

       crc=crc ^ crcbuf;

       for(i=0;i<8;i++)

       {

       BYTE TT;

       TT=crc&1;

       crc=crc>>1;

       crc=crc&0x7fff;

       if (TT==1)

       crc=crc^0xa;

       crc=crc&0xffff;

       }

       }

       ï¼ˆä¸‰ï¼‰ã€æ•°æ®å‘送

       zxaddr=;//读取地址为的巡检表数据

       zxnum=;//读取十个通道的数据

       writebuf2[0]=zxaddr;

       writebuf2[1]=3;

       writebuf2[2]=0;

       writebuf2[3]=0;

       writebuf2[4]=0;

       writebuf2[5]=zxnum;

       crc=0xffff;

       calccrc(writebuf2[0]);

       calccrc(writebuf2[1]);

       calccrc(writebuf2[2]);

       calccrc(writebuf2[3]);

       calccrc(writebuf2[4]);

       calccrc(writebuf2[5]);

       writebuf2[6]=crc & 0xff;

       writebuf2[7]=crc/0x;

       WriteFile(hCom,writebuf2,8,&comnum,NULL);

       ï¼ˆå››ï¼‰ã€æ•°æ®è¯»å–

       ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//读取zxnum个通道数据

       å¯å¢žåŠ é”™è¯¯å¤„理程序,如地址码错误、CRC码错误判断、通讯故障处理等。

       ã€€CRC简单函数如下:

       unsigned short CRC(puchMsg, usDataLen)

       unsigned char *puchMsg ; /* 要进行CRC校验的消息 */

       unsigned short usDataLen ; /* 消息中字节数 */

       {

       unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */

       unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */

       unsigned uIndex ; /* CRC循环中的索引 */

       while (usDataLen--) /* 传输消息缓冲区 */

       {

       uIndex = uchCRCHi ^ *puchMsgg++ ; /* 计算CRC */

       uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex} ;

       uchCRCLo = auchCRCLo[uIndex] ;

       }

       return (uchCRCHi << 8 | uchCRCLo) ;

       }

       /* CRC 高位字节值表 */

       static unsigned char auchCRCHi[] = {

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

       0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

       0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

       0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

       0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

       0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

       0x, 0x, 0x, 0xC1, 0x, 0x

       } ;

       /* CRC低位字节值表*/

       static char auchCRCLo[] = {

       0x, 0xC0, 0xC1, 0x, 0xC3, 0x, 0x, 0xC2, 0xC6, 0x,

       0x, 0xC7, 0x, 0xC5, 0xC4, 0x, 0xCC, 0x0C, 0x0D, 0xCD,

       0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x,

       0x, 0xC8, 0xD8, 0x, 0x, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,

       0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x, 0xD4,

       0xD5, 0x, 0xD7, 0x, 0x, 0xD6, 0xD2, 0x, 0x, 0xD3,

       0x, 0xD1, 0xD0, 0x, 0xF0, 0x, 0x, 0xF1, 0x, 0xF3,

       0xF2, 0x, 0x, 0xF6, 0xF7, 0x, 0xF5, 0x, 0x, 0xF4,

       0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,

       0x3B, 0xFB, 0x, 0xF9, 0xF8, 0x, 0x, 0xE8, 0xE9, 0x,

       0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,

       0xEC, 0x2C, 0xE4, 0x, 0x, 0xE5, 0x, 0xE7, 0xE6, 0x,

       0x, 0xE2, 0xE3, 0x, 0xE1, 0x, 0x, 0xE0, 0xA0, 0x,

       0x, 0xA1, 0x, 0xA3, 0xA2, 0x, 0x, 0xA6, 0xA7, 0x,

       0xA5, 0x, 0x, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,

       0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x, 0xA9, 0xA8, 0x,

       0x, 0xB8, 0xB9, 0x, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,

       0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x, 0x, 0xB5,

       0x, 0xB7, 0xB6, 0x, 0x, 0xB2, 0xB3, 0x, 0xB1, 0x,

       0x, 0xB0, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

       0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x9C, 0x5C,

       0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,

       0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x4B, 0x8B,

       0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

       0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

       0x, 0x, 0x, 0x, 0x, 0x

       } ; 

如何在C语言中利用程序读取MODBUS地址

       C语言中利用程序读取MODBUS代码:

       unsigned short crc;

       static uchar code auchcrcHi[] = {

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x

       };

       // crc 低位字节值表

       static uchar code auchcrcLo[] = {

        0x, 0xC0, 0xC1, 0x, 0xC3, 0x, 0x, 0xC2, 0xC6, 0x,

        0x, 0xC7, 0x, 0xC5, 0xC4, 0x, 0xCC, 0x0C, 0x0D, 0xCD,

        0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x,

        0x, 0xC8, 0xD8, 0x, 0x, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,

        0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x, 0xD4,

        0xD5, 0x, 0xD7, 0x, 0x, 0xD6, 0xD2, 0x, 0x, 0xD3,

        0x, 0xD1, 0xD0, 0x, 0xF0, 0x, 0x, 0xF1, 0x, 0xF3,

        0xF2, 0x, 0x, 0xF6, 0xF7, 0x, 0xF5, 0x, 0x, 0xF4,

        0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,

        0x3B, 0xFB, 0x, 0xF9, 0xF8, 0x, 0x, 0xE8, 0xE9, 0x,

        0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,

        0xEC, 0x2C, 0xE4, 0x, 0x, 0xE5, 0x, 0xE7, 0xE6, 0x,

        0x, 0xE2, 0xE3, 0x, 0xE1, 0x, 0x, 0xE0, 0xA0, 0x,

        0x, 0xA1, 0x, 0xA3, 0xA2, 0x, 0x, 0xA6, 0xA7, 0x,

        0xA5, 0x, 0x, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,

        0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x, 0xA9, 0xA8, 0x,

        0x, 0xB8, 0xB9, 0x, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,

        0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x, 0x, 0xB5,

        0x, 0xB7, 0xB6, 0x, 0x, 0xB2, 0xB3, 0x, 0xB1, 0x,

        0x, 0xB0, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x9C, 0x5C,

        0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x4B, 0x8B,

        0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x

       };

       //crc校验的函数

       unsigned short crc(unsigned char *puchMsg, unsigned short usDataLen)

       {

        unsigned char uchcrcHi = 0xFF ; /* 高crc字节初始化 */

        unsigned char uchcrcLo = 0xFF ; /* 低crc 字节初始化 */

        unsigned uIndex ; /* CRC循环中的索引 */

        while (usDataLen--) /* 传输消息缓冲区 */

        {

        uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */

        uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

        uchCRCLo = auchCRCLo[uIndex] ;

        }

        return (uchCRCHi << 8 | uchCRCLo) ;

       }

       调用方式:dd=CRC(tmp,x);

单片机C语言怎么写Modbus通信程序?

       刚好我在弄crc校验。给你一段代码。源码燕窝 源码我也是源码牛博棋牌源码冲网上抄过来的。验证过了。源码外卖红包分销源码

       unsigned short crc;

       static uchar code auchCRCHi[] = {

        0x,源码奇趣开心乐园源码 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC1, 0x, 0x,

        0x, 0xC0, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC1,

        0x, 0x, 0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x,

        0x, 0xC1, 0x, 0x, 0x, 0xC0, 0x, 0x, 0x, 0xC0,

        0x, 0x, 0x, 0xC1, 0x, 0x

       };

       // CRC 低位字节值表

       static uchar code auchCRCLo[] = {

        0x, 0xC0, 0xC1, 0x, 0xC3, 0x, 0x, 0xC2, 0xC6, 0x,

        0x, 0xC7, 0x, 0xC5, 0xC4, 0x, 0xCC, 0x0C, 0x0D, 0xCD,

        0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x,

        0x, 0xC8, 0xD8, 0x, 0x, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,

        0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x, 0xD4,

        0xD5, 0x, 0xD7, 0x, 0x, 0xD6, 0xD2, 0x, 0x, 0xD3,

        0x, 0xD1, 0xD0, 0x, 0xF0, 0x, 0x, 0xF1, 0x, 0xF3,

        0xF2, 0x, 0x, 0xF6, 0xF7, 0x, 0xF5, 0x, 0x, 0xF4,

        0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,

        0x3B, 0xFB, 0x, 0xF9, 0xF8, 0x, 0x, 0xE8, 0xE9, 0x,

        0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,

        0xEC, 0x2C, 0xE4, 0x, 0x, 0xE5, 0x, 0xE7, 0xE6, 0x,

        0x, 0xE2, 0xE3, 0x, 0xE1, 0x, 0x, 0xE0, 0xA0, 0x,

        0x, 0xA1, 0x, 0xA3, 0xA2, 0x, 0x, 0xA6, 0xA7, 0x,

        0xA5, 0x, 0x, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,

        0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x, 0xA9, 0xA8, 0x,

        0x, 0xB8, 0xB9, 0x, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,

        0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x, 0x, 0xB5,

        0x, 0xB7, 0xB6, 0x, 0x, 0xB2, 0xB3, 0x, 0xB1, 0x,

        0x, 0xB0, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x9C, 0x5C,

        0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x4B, 0x8B,

        0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

        0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x, 0x,

        0x, 0x, 0x, 0x, 0x, 0x

       };

       //CRC校验的函数

       unsigned short CRC(unsigned char *puchMsg, unsigned short usDataLen)

       {

        unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */

        unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */

        unsigned uIndex ; /* CRC循环中的索引 */

        while (usDataLen--) /* 传输消息缓冲区 */

        {

        uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */

        uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

        uchCRCLo = auchCRCLo[uIndex] ;

        }

        return (uchCRCHi << 8 | uchCRCLo) ;

       }

       调用方式:dd=CRC(tmp,x);

主站和从站C代码的区别

       åŒºåˆ«å¦‚下:

       1、作用不同。

       ä¸»ç«™å¯ä»¥åœ¨modbus总线上发布查询命令。从站不能在该modbus总线上发布查询令,只能响应。

       2、数量不同。主站在modbus总线上是唯一的。从站在modbus总线上可以有多个。

       Modbus:是一种串行通信协议,是Modicon公司(现在的施耐德SchneiderElectric)于年为使用可编程逻辑控制器(PLC)通信而发表。

       Modbus已经成为工业领域通信协议的业界标准(Defacto),并且现在是工业电子设备之间常用的连接方式。

libmodbus学习(一)之Modbus RTU-master

        Modbus簇主要有三种协议:Modbus-RTU、Modbus-ASCII、Modbus-TCP

        工控行业通常的设备组网看,三者应用的范围如下:

        三者报文格式的区别如下:

        RTU相比较ASCII具备更紧凑的报文流,传输效率更高,目前MODBUS-ASCII已经应用较少。

        Modbus的操作对象有4种: 线圈、离散输入、保持寄存器、输入寄存器 。

        modbus_rtu.c

        程序流程图