?? modbusrtu.txt
字號(hào):
下面是一個(gè)用VC編寫的ModBus RTU通訊的例子
(一)、通訊口設(shè)置
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);
(二)、CRC校驗(yàn)碼計(jì)算
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;
}
}
(三)、數(shù)據(jù)發(fā)送
zxaddr=11;//讀取地址為11的巡檢表數(shù)據(jù)
zxnum=10;//讀取十個(gè)通道的數(shù)據(jù)
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);
(四)、數(shù)據(jù)讀取
ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//讀取zxnum個(gè)通道數(shù)據(jù)
可增加錯(cuò)誤處理程序,如地址碼錯(cuò)誤、CRC碼錯(cuò)誤判斷、通訊故障處理等。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -