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

问题描述

用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 errorerror"");
}
BOOL error=SetupComm(hCom10241024);//输入缓冲区和输出缓冲区的大小都是1024
if(!error)
  MessageBox(""setupcomm error"");
error=GetCommState(hCom&dcb);//读取串口设置
if(!error)
  MessageBox(""getcommstateerror"");
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(hComwritebuf28&comnumNULL);

时间: 2024-10-29 16:54:11

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

C# 开发类似QQ的通讯软件,如何在软件中实现通过设置代理连接网络。百分求助!请大神帮忙。

问题描述 项目功能描述:给单位内部开发一个CS构架的管理工具(有点类似QQ),因为内部网络环境比较复杂,直连互联网的电脑无问题,但有部分电脑是通过公司OA网络(OA网络是通过一台固定IP的代理服务器与外网链接)因此这部分电脑的客户端只能通过设置代理服务器与架设在公网上的服务端交互(安装在我们OA网络的所有通讯工具也都需要在各自软件中设置代理服务器的IP,端口才能正常使用):问题:如何让自己设计的这款软件也能象QQ一样可以通过设置代理服务器实现与OA网络互通?请大神帮忙解决!主要实现代码priva

6 0问题-我的VC++6.0出现基础类应用已停止工作,请大神帮忙解决!

问题描述 我的VC++6.0出现基础类应用已停止工作,请大神帮忙解决! 我是用VC做了一个MFC工程,连了一个数据库,用列表控件往里加数据时,一点添加就出现基础类应用已停止工作(调试没有错误),网上说可能是变量定义了没初始化,这个问题该怎么解决? 解决方案 重新安装一个新一点的版本吧 解决方案二: 你应该用f5的方式运行(或者在Debug菜单下点Run)这样出错了才会停在出错的代码行上,并且会有错误提示.像你这种直接运行的方式,鬼才知道什么问题.你可以不会写程序,但是起码花点时间学学怎么用好开发

snmp-《Visual C++开发基于SNMP的网络管理软件》 调试不通请大神帮忙

问题描述 <Visual C++开发基于SNMP的网络管理软件> 调试不通请大神帮忙 3C snmp_pp.h:no such file or directory从网上也下载了snmp_pp 的头文件,但是还是不能运行,知道怎么调试的,能不能讲的详细一些 解决方案 缺少snmp_pp.h头文件? 解决方案二: 缺少snmp_pp.h头文件.把它添加到你的工程中,然后Rebuild All一下看看还有没有其他错误 解决方案三: 搜索下这个头文件有没有,如果没有,先下载它,拷贝进去.如果有,那么看

请大神帮忙做一个matlab的三次样条插值程序,小弟是小白啊,谢过了!急急急

问题描述 请大神帮忙做一个matlab的三次样条插值程序,小弟是小白啊,谢过了!急急急 已知: X=[1 3 6 8 10 14 16 20 23] Y=[0.345 0.343 0.616 0.900 0.581 0.302 0.250 0.101 0.104] 求: X=[1 2 3 ...... 23]对应的Y值 解决方案 x=[1 3 6 8 10 14 16 20 23]; y=[0.345 0.343 0.616 0.900 0.581 0.302 0.250 0.101 0.104

zend-MAC 下用MAMP搭建的PHP开发环境安装ZendGuardLoader不成功,请大神帮忙?

问题描述 MAC 下用MAMP搭建的PHP开发环境安装ZendGuardLoader不成功,请大神帮忙? 网上的搜的教程统统试过了就是不成功. zend_extension="/Applications/MAMP/bin/php/php-5.3.x/ZendGuardLoader.so" zend_loader.enable=1 zend_loader.disable_licensing=0 zend_loader.obfuscation_level_support=3 感觉这也写的没

代码 24点 c语言-一个C编写的求24点问题,求大神帮忙纠错

问题描述 一个C编写的求24点问题,求大神帮忙纠错 #include int main() { int mode,i,j,k,sum,p,q,flag=1; int a[4]; for(i=0; i<4; i++) { scanf("%d",&a[i]); } while(a[0]+a[1]+a[2]+a[3]!=0) { flag=1; for(i=0; i<4 && flag; i++) { for(j=i+1; j<4 &&

vs2012-我的C程序VS2013报错,都不知道错哪了,请大神指教

问题描述 我的C程序VS2013报错,都不知道错哪了,请大神指教 hash函数名和数组next都定义了,都不知道哪错了 解决方案 感觉是标准库的某些内容重复了. std::next是里的template, std::hash是里的template. 都是c++ 11定义的. 解决方案二: 自己重新定义一下名字,这几个名字已经在类库中存在了 解决方案三: 你的定义重复了,如果你的代码没有重复定义它们,可能是和你包含的库文件冲突了,那么换个名字看看 解决方案四: hash和next重复定义了. 你可

c语言-刚学C,编了个小程序出错了,请大神帮忙看一下。

问题描述 刚学C,编了个小程序出错了,请大神帮忙看一下. 知道长方形的长和宽,求面积和周长 #include main() { float x,y,a,b; printf ("请输入长和宽且用逗号分隔:); scanf ("%f,%f,&x,&y); a=x*y; b=(x+y)*2; printf ("面积=%f,周长=%fn",a,b); } 解决方案 错误一:include后面缺少头文件包含 错误二:printf中没有右半边的引号 错误三:sc

c++-求大神帮忙翻译一下几句程序,关于图书管理系统,顺便可以的话详细一点。谢谢(?_?)

问题描述 求大神帮忙翻译一下几句程序,关于图书管理系统,顺便可以的话详细一点.谢谢(?_?) #ifndef _LIBARY_H#define _LIBARY_H#include "appoint.h"#include "Manager.h"#include "Mysql_select.h"#include "Reader.h"#include "ways.h"class Libary{private: C