ModBus Ö÷»úͨѶÐÒé·ÖΪRTUÐÒéºÍASCIIÐÒ飬ÎÒ¹«Ë¾µÄ¶àÖÖÒÇ±í¶¼²ÉÓÃModBus RTUͨѶÐÒ飬È磺YD2000ÖÇÄܵçÁ¦¼à²âÒÇ¡¢Ñ²¼ì±í¡¢ÊýÏÔ±í¡¢¹âÖùÊýÏÔ±íµÈ¡£ÏÂÃæ¾ÍModBus RTUÐÒé¼òÒª½éÉÜÈçÏ£º
ͨѶ´«ËÍ·ÖΪ¶ÀÁ¢µÄÐÅϢͷ£¬ºÍ·¢Ë͵ıàÂëÊý¾Ý¡£ÒÔϵÄͨѶ´«ËÍ·½Ê½¶¨ÒåÒ²ÓëMODBUS RTUͨѶ¹æÔ¼Ïà¼æÈÝ£º
±à Âë | 8λ¶þ½øÖÆ |
Æðʼλ | 1λ |
Êý¾Ýλ | 8λ |
ÆæżУÑéλ | 1λ£¨Å¼Ð£Ñé룩 |
ֹͣλ | 1λ |
´íÎóУ¼ì | CRC£¨ÈßÓàÑ»·Â룩 |
µØÖ·Â룺µØÖ·ÂëΪͨѶ´«Ë͵ĵÚÒ»¸ö×Ö½Ú¡£Õâ¸ö×Ö½Ú±íÃ÷ÓÉÓû§É趨µØÖ·ÂëµÄ´Ó»ú½«½ÓÊÕÓÉÖ÷»ú·¢ËÍÀ´µÄÐÅÏ¢¡£²¢ÇÒÿ¸ö´Ó»ú¶¼ÓоßÓÐΨһµÄµØÖ·Â룬²¢ÇÒÏìÓ¦»ØË;ùÒÔ¸÷×ԵĵØÖ·Â뿪ʼ¡£Ö÷»ú·¢Ë͵ĵØÖ·Âë±íÃ÷½«·¢Ë͵½µÄ´Ó»úµØÖ·£¬¶ø´Ó»ú·¢Ë͵ĵØÖ·Âë±íÃ÷»ØË͵ĴӻúµØÖ·¡£
¹¦ÄÜÂ룺ͨѶ´«Ë͵ĵڶþ¸ö×Ö½Ú¡£ModBusͨѶ¹æÔ¼¶¨Ò幦ÄܺÅΪ1µ½127¡£±¾ÒDZíÖ»ÀûÓÃÆäÖеÄÒ»²¿·Ö¹¦ÄÜÂë¡£×÷ΪÖ÷»úÇëÇó·¢ËÍ£¬Í¨¹ý¹¦ÄÜÂë¸æËß´Ó»úÖ´ÐÐʲô¶¯×÷¡£×÷Ϊ´Ó»úÏìÓ¦£¬´Ó»ú·¢Ë͵ŦÄÜÂëÓë´ÓÖ÷»ú·¢ËÍÀ´µÄ¹¦ÄÜÂëÒ»Ñù£¬²¢±íÃ÷´Ó»úÒÑÏìÓ¦Ö÷»ú½øÐвÙ×÷¡£Èç¹û´Ó»ú·¢Ë͵ŦÄÜÂëµÄ×î¸ßλΪ1(±ÈÈ繦ÄÜÂë´óÓë´Ëͬʱ127)£¬Ôò±íÃ÷´Ó»úûÓÐÏìÓ¦²Ù×÷»ò·¢Ëͳö´í¡£
Êý¾ÝÇø£ºÊý¾ÝÇøÊǸù¾Ý²»Í¬µÄ¹¦ÄÜÂë¶ø²»Í¬¡£Êý¾ÝÇø¿ÉÒÔÊÇʵ¼ÊÊýÖµ¡¢ÉèÖõ㡢Ö÷»ú·¢Ë͸ø´Ó»ú»ò´Ó»ú·¢Ë͸øÖ÷»úµÄµØÖ·¡£
CRCÂ룺¶þ×ֽڵĴíÎó¼ì²âÂë¡£
µ±Í¨Ñ¶ÃüÁî·¢ËÍÖÁÒÇÆ÷ʱ£¬·ûºÏÏàÓ¦µØÖ·ÂëµÄÉ豸½ÓͨѶÃüÁ²¢³ýÈ¥µØÖ·Â룬¶ÁÈ¡ÐÅÏ¢£¬Èç¹ûûÓгö´í£¬ÔòÖ´ÐÐÏàÓ¦µÄÈÎÎñ;È»ºó°ÑÖ´Ðнá¹û·µË͸ø·¢ËÍÕß¡£·µË͵ÄÐÅÏ¢ÖаüÀ¨µØÖ·Âë¡¢Ö´Ðж¯×÷µÄ¹¦ÄÜÂë¡¢Ö´Ðж¯×÷ºó½á¹ûµÄÊý¾ÝÒÔ¼°´íÎóУÑéÂë¡£Èç¹û³ö´í¾Í²»·¢ËÍÈκÎÐÅÏ¢¡£
1.ÐÅÏ¢Ö¡½á¹¹
µØÖ·Âë | ¹¦ÄÜÂë | Êý¾ÝÇø | ´íÎóУÑéÂë |
8λ | 8λ | N ¡Á 8λ | 16λ |
µØÖ·Â룺µØÖ·ÂëÊÇÐÅÏ¢Ö¡µÄµÚÒ»×Ö½Ú(8λ)£¬´Ó0µ½255¡£Õâ¸ö×Ö½Ú±íÃ÷ÓÉÓû§ÉèÖõØÖ·µÄ´Ó»ú½«½ÓÊÕÓÉÖ÷»ú·¢ËÍÀ´µÄÐÅÏ¢¡£Ã¿¸ö´Ó»ú¶¼±ØÐëÓÐΨһµÄµØÖ·Â룬²¢ÇÒÖ»ÓзûºÏµØÖ·ÂëµÄ´Ó»ú²ÅÄÜÏìÓ¦»ØËÍ¡£µ±´Ó»ú»ØËÍÐÅϢʱ£¬Ï൱µÄµØÖ·Âë±íÃ÷¸ÃÐÅÏ¢À´×ÔÓںδ¦¡£
¹¦ÄÜÂ룺Ö÷»ú·¢Ë͵ŦÄÜÂë¸æËß´Ó»úÖ´ÐÐʲôÈÎÎñ¡£±í1-1ÁгöµÄ¹¦ÄÜÂ붼ÓоßÌåµÄº¬Òå¼°²Ù×÷¡£
´úÂë | º¬Òå | ²Ù×÷ |
3 | ¶ÁÈ¡Êý¾Ý | ¶ÁÈ¡µ±Ç°¼Ä´æÆ÷ÄÚÒ»¸ö»ò¶à¸ö¶þ½øÖÆÖµ |
6 | ÖØÖõ¥Ò»¼Ä´æÆ÷ | °ÑÉèÖõĶþ½øÖÆֵдÈëµ¥Ò»¼Ä´æÆ÷ |
Êý¾ÝÇø£ºÊý¾ÝÇø°üº¬ÐèÒª´Ó»úÖ´ÐÐʲô¶¯×÷»òÓÉ´Ó»ú²É¼¯µÄ·µËÍÐÅÏ¢¡£ÕâЩÐÅÏ¢¿ÉÒÔÊÇÊýÖµ¡¢²Î¿¼µØÖ·µÈµÈ¡£ÀýÈ磬¹¦ÄÜÂë¸æËß´Ó»ú¶ÁÈ¡¼Ä´æÆ÷µÄÖµ£¬ÔòÊý¾ÝÇø±ØÐè°üº¬Òª¶ÁÈ¡¼Ä´æÆ÷µÄÆðʼµØÖ·¼°¶ÁÈ¡³¤¶È¡£¶ÔÓÚ²»Í¬µÄ´Ó»ú£¬µØÖ·ºÍÊý¾ÝÐÅÏ¢¶¼²»Ïàͬ¡£
´íÎóУÑéÂ룺Ö÷»ú»ò´Ó»ú¿ÉÓÃУÑéÂë½øÐÐÅбð½ÓÊÕÐÅÏ¢ÊÇ·ñ³ö´í¡£ÓÐʱ£¬ÓÉÓÚµç×ÓÔëÉù»òÆäËüһЩ¸ÉÈÅ£¬ÐÅÏ¢ÔÚ´«Êä¹ý³ÌÖлᷢÉúϸ΢µÄ±ä»¯£¬´íÎóУÑéÂë±£Ö¤ÁËÖ÷»ú»ò´Ó»ú¶ÔÔÚ´«Ë͹ý³ÌÖгö´íµÄÐÅÏ¢²»Æð×÷Óá£ÕâÑùÔö¼ÓÁËϵͳµÄ°²È«ºÍЧÂÊ¡£´íÎóУÑé²ÉÓÃCRC-16УÑé·½·¨¡£
×¢£ºÐÅÏ¢Ö¡µÄ¸ñʽ¶¼»ù±¾Ïàͬ£ºµØÖ·Âë¡¢¹¦ÄÜÂë¡¢Êý¾ÝÇøºÍ´íÎóУÑéÂë¡£
2.´íÎóУÑé
ÈßÓàÑ»·Âë(CRC)°üº¬2¸ö×Ö½Ú£¬¼´16λ¶þ½øÖÆ¡£CRCÂëÓÉ·¢ËÍÉ豸¼ÆË㣬·ÅÖÃÓÚ·¢ËÍÐÅÏ¢µÄβ²¿¡£½ÓÊÕÐÅÏ¢µÄÉ豸ÔÙÖØмÆËã½ÓÊÕµ½ÐÅÏ¢µÄ CRCÂ룬±È½Ï¼ÆËãµÃµ½µÄCRCÂëÊÇ·ñÓë½ÓÊÕµ½µÄÏà·û£¬Èç¹ûÁ½Õß²»Ïà·û£¬Ôò±íÃ÷³ö´í¡£
CRCÂëµÄ¼ÆËã·½·¨ÊÇ£¬ÏÈÔ¤ÖÃ16λ¼Ä´æÆ÷ȫΪ1¡£ÔÙÖð²½°Ñÿ8λÊý¾ÝÐÅÏ¢½øÐд¦Àí¡£ÔÚ½øÐÐCRCÂë¼ÆËãʱֻÓÃ8λÊý¾Ý룬Æðʼλ¼°Í£Ö¹Î»£¬ÈçÓÐÆæżУÑéλµÄ»°Ò²°üÀ¨ÆæżУÑé룬¶¼²»²ÎÓëCRCÂë¼ÆËã¡£
ÔÚ¼ÆËãCRCÂëʱ£¬8λÊý¾ÝÓë¼Ä´æÆ÷µÄÊý¾ÝÏàÒì»ò£¬µÃµ½µÄ½á¹ûÏòµÍλÒÆÒ»×Ö½Ú£¬ÓÃ0Ìî²¹×î¸ßλ¡£ÔÙ¼ì²é×îµÍ룬Èç¹û×îµÍλΪ1£¬°Ñ¼Ä´æÆ÷µÄÄÚÈÝÓëÔ¤ÖÃÊýÏàÒì»ò£¬Èç¹û×îµÍλΪ0£¬²»½øÐÐÒì»òÔËËã¡£
Õâ¸ö¹ý³ÌÒ»Ö±Öظ´8´Î¡£µÚ8´ÎÒÆλºó£¬ÏÂÒ»¸ö8λÔÙÓëÏÖÔڼĴæÆ÷µÄÄÚÈÝÏàÏàÒì»ò£¬Õâ¸ö¹ý³ÌÓëÒÔÉÏÒ»ÑùÖظ´8´Î¡£µ±ËùÓеÄÊý¾ÝÐÅÏ¢´¦ÀíÍêºó£¬×îºó¼Ä´æÆ÷µÄÄÚÈݼ´ÎªCRCÂëÖµ¡£CRCÂëÖеÄÊý¾Ý·¢ËÍ¡¢½ÓÊÕʱµÍ×Ö½ÚÔÚÇ°¡£
¼ÆËãCRCÂëµÄ²½ÖèΪ£º
¡ì Ô¤ÖÃ16λ¼Ä´æÆ÷ΪʮÁù½øÖÆFFFF(¼´È«Îª1)¡£³Æ´Ë¼Ä´æÆ÷ΪCRC¼Ä´æÆ÷;
¡ì °ÑµÚÒ»¸ö8λÊý¾ÝÓë16λCRC¼Ä´æÆ÷µÄµÍλÏàÒì»ò£¬°Ñ½á¹û·ÅÓÚCRC¼Ä´æÆ÷;
¡ì °Ñ¼Ä´æÆ÷µÄÄÚÈÝÓÒÒÆһλ(³¯µÍλ)£¬ÓÃ0Ìî²¹×î¸ß룬¼ì²é×îµÍλ;
¡ì Èç¹û×îµÍλΪ0£ºÖظ´µÚ3²½(ÔÙ´ÎÒÆλ); Èç¹û×îµÍλΪ1£ºCRC¼Ä´æÆ÷Óë¶àÏîʽA001(1010 0000 0000 0001)½øÐÐÒì»ò;
¡ì Öظ´²½Öè3ºÍ4£¬Ö±µ½ÓÒÒÆ8´Î£¬ÕâÑùÕû¸ö8λÊý¾ÝÈ«²¿½øÐÐÁË´¦Àí;
¡ì Öظ´²½Öè2µ½²½Öè5£¬½øÐÐÏÂÒ»¸ö8λÊý¾ÝµÄ´¦Àí;
¡ì ×îºóµÃµ½µÄCRC¼Ä´æÆ÷¼´ÎªCRCÂë¡£
3.¹¦ÄÜÂë03£¬¶ÁÈ¡µãºÍ·µ»ØÖµ£º
ÒDZí²ÉÓÃModbus RTUͨѶ¹æÔ¼£¬ÀûÓÃͨѶÃüÁ¿ÉÒÔ½øÐжÁÈ¡µã(¡°±£³Ö¼Ä´æÆ÷¡±) »ò·µ»ØÖµ(¡°ÊäÈë¼Ä´æÆ÷¡± )µÄ²Ù×÷¡£±£³ÖºÍÊäÈë¼Ä´æÆ÷¶¼ÊÇ16λ(2×Ö½Ú)Öµ£¬²¢ÇÒ¸ßλÔÚÇ°¡£ÕâÑùÓÃÓÚÒDZíµÄ¶ÁÈ¡µãºÍ·µ»ØÖµ¶¼ÊÇ2×Ö½Ú¡£Ò»´Î×î¶à¿É¶ÁÈ¡¼Ä´æÆ÷ÊýÊÇ60¡£ÓÉÓÚһЩ¿É±à³Ì¿ØÖÆÆ÷²»Óù¦ÄÜÂë03£¬ËùÒÔ¹¦ÄÜÂë03±»ÓÃ×÷¶ÁÈ¡µãºÍ·µ»ØÖµ¡£´Ó»úÏìÓ¦µÄÃüÁî¸ñʽÊÇ´Ó»úµØÖ·¡¢¹¦ÄÜÂë¡¢Êý¾ÝÇø¼°CRCÂë¡£Êý¾ÝÇøÖеļĴæÆ÷Êý¾Ý¶¼ÊÇÿÁ½¸ö×Ö½Ú¸ß×Ö½ÚÔÚÇ°¡£
4.¹¦ÄÜÂë06
Ö÷»úÀûÓÃÕâÌõÃüÁî°Ñµ¥µãÊý¾Ý±£´æµ½ÒDZíµÄ´æ´¢Æ÷¡£´Ó»úÒ²ÓÃÕâ¸ö¹¦ÄÜÂëÏòÖ÷»ú·µËÍÐÅÏ¢¡£
ÏÂÃæÊÇÒ»¸öÓÃ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,1024,1024);
if(!error)
MessageBox("setupcomm error");
error=GetCommState(hCom,&dcb);
if(!error)
MessageBox("getcommstate,error");
dcb.BaudRate=2400;
dcb.ByteSize=8;
dcb.Parity=EVENPARITY;//NOPARITY;
dcb.StopBits=ONESTOPBIT;
error=SetCommState(hCom,&dcb);
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^0xa001;
crc=crc&0xffff;
}
}
zxaddr=11;//¶ÁÈ¡µØַΪ11µÄѲ¼ì±íÊý¾Ý
zxnum=10;//¶ÁÈ¡Ê®¸öͨµÀµÄÊý¾Ý
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/0x100;
WriteFile(hCom,writebuf2,8,&comnum,NULL);
ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//¶ÁÈ¡zxnum¸öͨµÀÊý¾Ý¿ÉÔö¼Ó´íÎó´¦Àí³ÌÐò£¬ÈçµØÖ·Âë´íÎó¡¢CRCÂë´íÎóÅжϡ¢Í¨Ñ¶¹ÊÕÏ´¦ÀíµÈ¡£