您的位置:首页 > 理论基础 > 计算机网络

基于VC++的二层网络构建

2018-03-15 11:28 99 查看
    科研营学习总结报告  姓名:   江志鑫        
学校:  西安邮电大学   
专业:   通信工程      
 
 
 
 
 
 
 
 目录   
一、项目背景知识 3
二、 所用知识及技术 4
1. 基于VC++6.0中mfc的串口调试助手 4
2. CRC校验 6
3.MODBUS/TCP协议对MODBUS/RTU协议的转换 7
4.力控软件 9
三、研究成果 10
四、项目感想与收获 11
 
 
 
 
 
 
 
 
 
一、项目背景知识
随着工业测控技术和生产自动化技术的不断进步 ,传统的 RS-232、 RS-485和 CCITTV. 24通信技术已不能适应现代化的工业控制需要 ,而现场总线 ( Fieldbus)以其低廉的价格、可靠的性能而逐步成为新型的工业测控领域的通信技术。现场总线是应用在生产现场 ,在微机化测量控制设备之间实现双向串行多节点数字通信的系统 ,是一种开放式、数字化、多点通信的底层控制网络。 汇集了计算机技术、网络通信技术和自动控制技术 ( 3C)的现场总线技术 ,从 20世纪 80年代开始发展起来 ,并逐步在制造业、流程工业、交通、楼宇等方面的自动化系统中得到了广泛的重视和应用。现场总线主要有以下几种类型 : 基金会现场总线 ( FF)、 LonWorks、 ProfiBus、 CAN、HART,而其中 CAN ( Controller Area Network)即控制器局域网因为具有高性能、高可靠性以及独特的设计而越来越受到关注,现已形成国际标准 ,被公认为几种最有前途的现场总线之一。
控制器局域网络CAN(Control Area Network)总线是最流行的现场总线之一,是一种有效支持分布式控制或实时控制的串行通信网络,具有通信灵活、实时性高、可靠性高、较强的抗干扰性以及良好的错误检测能力等优点,由于其卓越性能现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪 器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术 应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化, 即负载分散、功能分散、危险分散和地域分散。分散式工业控制系统就是为适应这种需要而发展起来的。这类系统是以微型机为核心,将5C技术 --COMPUTER(计算机技术)、CONTROL (自动控制技术)、COMMUNICATION(通信技术)、CRT(显示技术)和 CHANGE(转换技术)紧密结合的产物。它在适应范围、可扩展性、可维护性以及抗故障能力等方面,较之分散型仪表控制系统和集中型计算机控制系统都具有 明显的优越性。现场总线的研究与应用已成为工业数据总线领域的热点。尽管目前对现场总线的研究尚未能提出一个完善的标准,但现场总线的高性能价格比将吸引 众多工业控制系统采用。同时,正由于现场总线的标准尚未统一,也使得现场总线的应用得以不拘一格地发挥,并将为现场总线的完善提供更加丰富的依据。控制器 局部网 CAN(CONTROLLER AERANETWORK)正是在这种背景下应运而生的。由于CAN为愈来愈多不同领域采用和推广,导致要求各种应用领域通信报文的标准化。
    现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
二、所用知识及技术
1. 基于VC++6.0中mfc的串口调试助手
 串口调试助手的要求,支持常用波特率,可以自动识别串口,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符,可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。
硬件连接方面,传统台式PC机支持标准RS232接口,但是带有串口的笔记本很少见,所以需要USB/232转换接口,并且安装相应驱动程序。
整体设计是基于VC++中的mfc类库的可视化编程。结合所需的要求,首先创建一个mfc项目,进入窗口添加所需的按钮及静态文字,布局完成后保存,创建好的窗口如图: 
下面对Button、Edit Box和Combo Box等,进行描述,通过设置ID和Type,以便给按钮和编辑框添加事件。
在串口调试助手软件中,需要设置打开串口、设置串口、读取串口、写入串口,关闭串口。分别编写相关函数,实现相应功能。
打开串口:
void CCRC2018Dlg::OnButtOpenComm()
{
// TODO: Add your control notification handler code here
//如果串口没用打开
if (!m_Comm.GetPortOpen())
{
//打开串口
m_Comm.SetPortOpen(TRUE);
//设置中断阈值
m_Comm.SetRThreshold(1);
m_Comm.SetInputLen(0);
m_Comm.GetInput();

CommOpenFlag = true;

AfxMessageBox("打开串口成功");
}
else
{
CommOpenFlag = false;
AfxMessageBox("打开串口失败,检查串口是否被占用");
}
}
 
设置串口:
CommOpenFlag = FALSE;     //串口状态,避免重复打开串口
m_Comm.SetCommPort(4);   //设置串口端口号
m_Comm.SetInputMode(1);   //设置接收模式为中断模式
m_Comm.SetInBufferSize(1024);
m_Comm.SetOutBufferSize(1024); //设置串口接收发送缓冲区大小
m_Comm.SetSettings("9600, n, 8, 1");//设置串口波特率,位,校验方式
利用两台电脑,实现串口相连,运行程序,即可实现数据的接受和发送。
2.CRC校验
CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
2.1实现原理
1.在要发送的帧后面附加一个数(校验码,二进制序列),生成一个新帧发送给接收端。附加的数要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用“模2除法”)。
2.到达接收端后,再把接收到的新帧除以(“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理,所以结果应该是没有余数。若有余数,则表明该帧在传输过程中出现了差错。 
3.MODBUS/TCP协议对MODBUS/RTU协议的转换
在构建双层网络的过程中,要将在以太网中传输接收到的数据切换到串口通信中,要进行通信协议的转换,即MODBUS/TCP协议对MODBUS/RTU协议的转换。报文的转换,决定了客户端能否通过双层网络对电机进行控制。
下面分别是MODBUS/RTU协议和MODBUS/TCP协议,对比可以发现TCP是一种可靠的,面向连接的协议,所以不需要CRC校验码,但在传输过程中需要添加6字节报文进行封装。因此在协议转换的过程中,只需要将TCP协议报头的前6字节去掉,再将数据通过CRC校验,在报文后加上校验码,由从站进行转发即可完成协议的转换,RTU报文通过485总线实现电机相关操作。
 
 
 
相关代码: for (CountFor = 0; CountFor<6; CountFor++){//加入报头6字节 RouterTcpSendDataBuf[CountFor] = tcpReceDataBuf[CountFor]; } for (CountFor= 0; CountFor<ReceCommGlobalNum-2; CountFor++)    //去掉CRC校验码 { RouterTcpSendDataBuf[CountFor+6] = ReceCommGlobalBuf[CountFor]; } RouterTcpSendDataNum = ReceCommGlobalNum+6-2; displayMessage(RouterTcpSendDataBuf, RouterTcpSendDataNum); 
4.力控软件
组态软件指一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,能以灵活多样的组态方式(而不是编程方式)提供良好的用户开发界面和简捷的使用方法,它解决了控制系统通用性问题。其预设置的各种软件模块可以非常容易地实现和完成监控层的各项功能,并能同时支持各种硬件厂家的计算机和I/O产品,与高可靠的工控计算机和网络系统结合,可向控制层和管理层提供软硬件的全部接口,进行系统集成。
力控软件模块化任意组合。鉴于其延续性,可扩充性和封装性,所以我们采用该软件模拟对电机的控制。
 
 
 
在力控组态软件中,我们使用以太网进行连接。设计主要思想是:首先创建一个新窗口,在新窗口中建立相关图形图像,定义I/O设置来关联相关图形控件,以完成测控设备的通讯。接着创建数据库,有关的变量都在数据库组态中,配置变量的功能码。最后在界面对相关的变量进行连接,运行工程,并进行测试修改,从而实现工程模拟。
 
 
 
三、研究成果
通过为期一周的学习,我们将所学的内容整合起来,设计出一个完整的二层网络控制系统,其结构如下:
 
在串口调试助手的基础上,增加了TCP服务器的创建,TCP客户机的连接,为二层网络控制系统搭建软件基础。首先我们在一台电脑用VC++编译出的控制界面通过以太网传送固定数据到服务器,服务器将TCP协议转换为RTU协议,利用串口485总线实现对电机的控制。这就是我们搭建的自动控制系统。
界面如下:  
建立了TCP客户端和服务器的连接,不仅可以控制电机的模拟量(转速,距离配置),还可控制相关数字量(风扇的开关,灯泡的亮灭),完成了基于MODBUS协议的双层网络控制系统,实现了远程控制。
 
四、项目感想与收获经过了近一周的学习,从一开始对mfc可视化编程都感到陌生,参照了网上的资料,但还是觉得有点困难。团队几个人一起研究串口调试助手的编写,程序总是报错,经过认真排除,终于完成了第一个任务。接下来跟老师学习MODBUS协议,其中在RUP报文传送中很重要的CRC校验,数据差错控制。在编写过程中也感到压力,后来参照老师的教学视频和代码,把这一块知识点攻下。通过前两天地学习,慢慢地对于VC++的编程,以及这种学习模式熟悉起来,所以在后面的力控软件的控制编程等也不觉得吃力了,最后还成功实现二级网络无线通信控制系统的搭建。觉得这几天都过的很充实,真正学到了很多东西,比如如何通过MODBUS/TCP与客户机进行通信,利用MODBUS/RTP对控制器件进行控制,还有串口通信等等。最后,感谢每个小组组员,他们各有优势,有很多值得我学习的地方。并且在他们的帮助下,我才能够顺利完成老师安排的任务,对通信协议以及代码等有更充分的认识。有同学在教学上有困难,我们一起想对策解决;面对突如其来的事情,我们共同面对,各个组也尽量配合着工作,我们的计划顺利同步进行。我从中真正体会到“集体”这个词的含义了。这次活动中我们做得可能还有很多的不足,我也发现了自身的许多缺陷,但是有经验有教训才是一个真正意义上的完整的实践,不论如何,这都是一次非常有益的活动,它使我们知道在学校要更加认真学好理论知识并付诸实践,有益于我们将来为社会更大的贡献!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  通信