abc836417852 2014-07-25 02:59
浏览 3370

用VC编写的ModBus RTU通讯的程序,请大神帮忙注释一下每句代码的意思。灰常感谢

(一)、通讯口设置
DCB dcb;
hCom=CreateFile("COM1",//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);//输入缓冲区和输出缓冲区的大小都是1024
if(!error)
  MessageBox("setupcomm error");
error=GetCommState(hCom,&dcb);//读取串口设置
if(!error)
  MessageBox("getcommstate,error");
dcb.BaudRate=2400;//波特为率2400
dcb.ByteSize=8;//每个字节有8位

dcb.Parity=EVENPARITY;//NOPARITY;//偶校验或者无校验
dcb.StopBits=ONESTOPBIT;//一个停止位
error=SetCommState(hCom,&dcb);//函数设置com口的设置控制块
(二)、CRC校验码计算
UINT crc//不带符号整形
void calccrc(BYTE crcbuf)
{
BYTE i;
crc=crc ^ crcbuf;
for(i=0;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);

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 微信会员卡接入微信支付商户号收款
    • ¥15 如何获取烟草零售终端数据
    • ¥15 数学建模招标中位数问题
    • ¥15 phython路径名过长报错 不知道什么问题
    • ¥15 深度学习中模型转换该怎么实现
    • ¥15 HLs设计手写数字识别程序编译通不过
    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 TYPCE母转母,插入认方向
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?