1.å¦ä½è¯»åmodbuså¯åå¨ä¸çå¼
2.ModBus调试精灵
å¦ä½è¯»å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
} ;ã
ModBus调试精灵
Modbus专用的调试专用工具,可以模拟上位机进行modbus协议主机的源码使用,Modbus调试精灵采用vc编写,源码聚合寄快递源码运行时不需要其它任何文件。源码可以调试具有modbus协议的源码源码时代嵌入式所有设备,现在功能只涉及到了 这几条常用的源码经颅多普勒指标源码命令,我想用好这几条命令应该是源码满足现场调试了,软件非常小巧,源码但功能强大,源码是源码现场工程调试人员必备软件。软件截图1
Modbus调试精灵是源码时下互联网常用的软件之一,该软件绿色、源码安全、源码海东青最强源码搭配无毒,源码让你可以放心使用!源码荣耀源码错误怎么解决如果Modbus调试精灵是你需要的工具,就赶紧来吧!本站为你提供Modbus调试精灵官方下载。