1.å¦ä½è¯»åmodbuså¯åå¨ä¸çå¼
2.如何在C语言中利用程序读取MODBUS地址
3.51单片机C语言怎么写Modbus通信程序?
4.485主ç«åä»ç«C代ç çåºå«
5.libmodbuså¦ä¹ ï¼ä¸ï¼ä¹Modbus RTU-master
å¦ä½è¯»å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校验。给你一段代码。源码glibc源码目录结构我也是源码企业展示网源码冲网上抄过来的。验证过了。源码Svn 下载网站源码
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
ç¨åºæµç¨å¾