2 abc836417852 abc836417852 于 2014.07.25 10:59 提问

用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);

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VC++6 Modbus RTU测试程序
用于学习ModbusRTU通讯变成的好例子
VC++ 串口通信modbus协议源代码
VC串口通信modbus协议源代码
VC++实现的ModBus-RTU主机接口函数(采用回调方式)
计算机上面使用Modbus读取传感器或相关设备还是比较常用的,之前写的Modbus-RTU协议将串口封装到了协议栈内,使用的时候遇到短板了,比如我最新需要使用TCP来读取Modbus设备,就不好用了,通过回调函数可以很简单的解决这个问题。 //modbus-rtu.c /********************************************************
【C++】Modbus通讯
MODBUS_SERVER.h MODBUS_SERVER.cpp MODBUS_SHARE.h MODBUS_SHARE.cpp PORT.h PORT.cpp 两个VC++ Modbus通信例子源代码.rar modbus 协议编程 C++ MODBUS_SERVER.h //Download by http://www.NewXing
【C++】VC++的modbus通讯
VC modbus 读 http://blog.csdn.net/wu_jing_sheng0/article/details/50832522
modbus源代码VC版
VC编写,支持RS485,TCP,RTU模式
基于vb.net的modbus上位机通信协议代码(RTU模式)
用vb.net写的modbus通信上位机小程序,可以实现读,写寄存器和线圈的功能。
MODBUS通讯协议及编程【一】
一、Modbus 协议简介    Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。    此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备
modbus rtu 工作流程分析
这里以freemodbus-v1.5.0为例,分析一下modbus 的工作流程,从接收到处理再到发送。 首先如果接收到主机发来的消息,程序会进入串口中断函数,中断函数必须调用portserial.c的void prvvUARTRxISR(void)函数,在prvvUARTRxISR函数中调用了pxMBFrameCBByteReceived();函数,该函数是个函数指针,在modbus初始化的时候
C语言的Modbus RTU程序各种实现方法
C语言的Modbus RTU程序各种实现方法,常见的集中方法及分析