




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言与通讯数据处理实验报告一、 实验目的1、熟悉c语言的编译,链接和运行过程2、掌握c语言的数据类型,熟悉整型,实型,字符型变量的定义方式与赋值,掌握不同类型数据之间赋值规则和赋值方法3、掌握数组的定义,赋值引用及输入输出方法,并正确用字符数组储存字符串,学会字符串的使用4、掌握结构体变量的定义和使用5、掌握指针变量和指向指针的指针变量的定义及使用6、熟悉通讯数据的处理规则及不同处理方法的优缺点7、掌握VS中简单的界面编辑能力及编辑框的关联变量的定义二、 实验平台:Microsoft Visual Studio 2010三、 实验内容1、编写界面,在预先给定的对话框中添加静态文本框和编辑框,设置静态文本框内容和编辑框的关联变量,变量保存在ComDateProcessDlg.h文件中2、按钮编辑1)、发送按钮 将不同格式数据赋给预先定义的对应格式的变量之中2)、接收按钮 将发送按钮中已赋值的变量中数据赋值给界面编辑框相对应的关联变量3、调试程序四、 实验步骤1、了解通讯协议 数据格式如下:地址码长度状态量无符号整数符号整数无符号长整数符号长整数无符号定点小数浮点数双精度数校验码1字节1字节2字节2字节2字节4字节4字节2字节4字节8字节1字节说明:1)、状态量定义如下:1514131211109876543210状态码保留开关7开关6开关5开关4开关3开关2开关12)、无符号定点小数定义如下: 高9位:整数,低7位:小数3)、校验码: 为校验码之前所有字节的求和。2、 界面编辑 在界面添加静态文本框以及编辑框,编辑文本框内容与编辑框将显示的数据一一对应,并为每个编辑框添加对应的关联变量,优化界面。3、发送和接收数据处理: 打开ComDataProcessDlg,cpp文件对按钮进行编译1)、首先定义中间变量,即通讯数据的储存变量unsigned short *pishort;float *pf;unsigned long *pulong;long *plong;2)、运用指针变量进行赋值:sendbuf0=0x01;/地址号sendbuf1=31;/数据帧长度pishort=(unsigned short *)(sendbuf+2);*pishort=0xf03e;/状态码pishort=(unsigned short *)(sendbuf+4);*pishort=255;-3)、状态量处理: 状态量前五位为状态码,后为七位开关变量,中间四位保留首先定义变量unsigned char sw1,sw2,sw7;unsigned char statecode; unsigned short statecode16;/16位临时状态变量 unsigned short status;/前面定义的状态变量 状态码及开关的获取:用关系运算符“&”来选择位置,并用移位运算符“”将高位数字移至最低位statecode16= status&0xf800;/1111 1000 0000 0000statecode= (unsigned char)(statecode1611);statecode16= status&0x0040;/0000 0000 0100 0000sw7= (unsigned char)(statecode166);4)、定点小数的转化: 在给中间变量赋值时,先给定点小数赋一个无符号整形变量,在编写接收按钮时除以2n确定小数点的位置,即将小数点前移n位m_fixeddecimal(float)(16 utmp)128.0f5)、方法缺陷: 由于使用了数组指针进行赋值,对每个变量的位置和长度也就固定了下来,所以对于数据类型的修改会比较困难4、 了解并应用通讯协议的数据结构 针对上述问题,可使用结构变量进行优化 1)、结构的重要特征: (1)、数据集中存放 (2)、数据按定义的先后顺序存放2) 、结构体字节对齐规则 (1)、结构体成员按低地址到高地址的顺序储存在内存,即按声明的顺序储存 (2)、每个成员的地址必须满足:是sizeof(该成员)的整数倍 (3)、总的字节数是最大内置(就是基本类型)成员所占字节的整数倍为满足以上规则,通讯协议改进如下:地址码长度状态量无符号整数符号整数无符号长整数符号长整数双精度数浮点数无符号定点小数校验码1字节1字节2字节2字节2字节4字节4字节8字节4字节2字节1字节3) 、首先,新建一个头文件”struct.h”,在文件中定义结构体:-struct Comm_Dataunsigned char addr;unsigned char len;STATE_BITS states;unsigned short uishort;short ishort;unsigned long uilong;long ilong;double dtmp;float ftmp;unsigned short uffix;unsigned char check;-4)、在ComDataProcessDlg.h文件开头加入” #include”struct.h” ”以调用struct.h文件中的内容,增加两个用于发送和接收的全局变量Comm_Data_Unioncomm_data_Send和Comm_Data_Unioncomm_data_Rcv。打开omDataProcessDlg.cpp文件对发送和接收按钮进行编写:comm_data_S_data.addr=2;comm_data_S_data.len=30;-m_addr=comm_data_R_data.addr;m_length=comm_data_R_data.len;-注:对于定点小数的处理同上,不再重复说明5、 实验结果及分析 本次试验运用了两种方法进行通讯数据处理。第一种方法因为用了指针,发送和接收按钮变量赋值都有顺序要求,第二种由于定义结构体时已有顺序,所以赋值时没有这个要求;第一种状态码的开关要用&控制赋值,第二种所有变量都可以直接赋值;第一种对于协议的数据类型顺序没有要求,第二种结构体变量要满足字节对齐规则的要求。/ ComDataProcessDlg.h : header file/#includestruct.h#pragmaonce/ CComDataProcessDlg dialogclassCComDataProcessDlg : publicCDialogEx/ Constructionpublic:/-请在这里定义变量和函数-unsignedcharsendbuf1024;/发送缓冲区unsignedcharrecvbuf1024;/接收缓冲区unsignedcharGetCheckSum(unsignedchar *pStartPos,int length);/生成一?个?字?节的校验码?-求和Comm_Data_Unioncomm_data_Send;Comm_Data_Unioncomm_data_RCV;/-定义变量和函数结束-CComDataProcessDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Dataenum IDD = IDD_COMDATAPROCESS_DIALOG ;protected:virtualvoidDoDataExchange(CDataExchange* pDX);/ DDX/DDV support/ Implementationprotected:HICON m_hIcon;/ Generated message map functionsvirtual BOOL OnInitDialog();afx_msgvoidOnSysCommand(UINT nID, LPARAM lParam);afx_msgvoidOnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msgvoidOnBnClickedButtonSend();afx_msgvoidOnBnClickedButtonReceive();CStringm_SendString;BYTE m_addr;/界?面?上显示地址”的变量BYTE m_len;/界?面?上显?示长度”的变量doublem_double;/界?面?上显?示双精?度数的变量floatm_fixeddecimal;/界?面?上显?示无T符号?定点小?数的变量floatm_float;/界?面?上显?示浮?点数的变量longm_long;/界?面?上显?示符号?长整?数的变量DWORD m_ulong;/界?面?上显?示无T符号?长整?数的变量shortm_unsignedint;/界?面?上显?示无T符号?整?数的变量shortm_short;/界?面?上显示符号?整?数的变量BYTE m_state;/界?面?上显?示状态码的变量 BYTE m_SW1;/界?面?上显?示开a关?1”的变量BYTE m_SW2;/界?面?上显?示开a关的变量BYTE m_SW3;/界?面?上显?示开a关的变量BYTE m_SW4;/界?面?上显?示开a关的变量BYTE m_SW5;/界?面?上显?示开a关的变量BYTE m_SW6;/界?面?上显?示开a关的变量BYTE m_SW7;/界?面?上显?示开a关的变量BYTE m_check;/界?面?上显?示校验码的变量; #define TotalLen 31/定义通讯数据总长度struct STATE_BITS unsignedshort SW1:1;unsignedshort SW2:1;unsignedshort SW3:1;unsignedshort SW4:1;unsignedshort SW5:1;unsignedshort SW6:1;unsignedshort SW7:1;unsignedshort reserved:4;unsignedshort statecode:5; 自建的头文件;struct Comm_Dataunsignedchar addr;unsignedchar len; STATE_BITS states;unsignedshort uishort;short ishort;unsignedlong uilong;long ilong;double dtmp;float ftmp;unsignedshort uffix;unsignedchar check;union Comm_Data_Union Comm_Data com_data;unsignedchar bufTotalLen;发送按钮 /-发送按钮消?息响应|函数y-void CComDataProcessDlg:OnBnClickedButtonSend()/ TODO: Add your control notification handler code herecomm_data_S_data.addr=0x02;comm_data_S_data.len=31;comm_data_S_data.states.SW1 =1;comm_data_S_data.states.SW2 =1;comm_data_S_data.states.SW3 =1;comm_data_S_data.states.SW4 =1;comm_data_S_data.states.SW5 =0;comm_data_S_data.states.SW6 =0;comm_data_S_data.states.SW7 =0;comm_data_S_data.states.reserved =0;comm_data_S_data.states.statecode =14;comm_data_S_data.uishort =234;comm_data_S_data.ishort =-123;comm_data_S_data.uilong =123456;comm_data_S_data.ilong =-123456;comm_data_S_data.uffix =0x00c0;comm_data_S_data.ftmp =333.444f;comm_data_S_data.dtmp =-777.88888;comm_data_S_data.check =GetCheckSum(comm_data_Send.buf ,TotalLen-1);for(int i=0;iTotalLen;i+)sendbufi=comm_data_Send.bufi;CString str=_T();CString strtmp;for(int i=0;iTotalLen;i+)strtmp.Format (_T(%.2x ),sendbufi );str=str+strtmp;m_SendString=str;UpdateData(false);接收按钮void CComDataProcessDlg:OnBnClickedButtonReceive()/ TODO: Add your control notification handler code herefor(int i=0;iTotalLen;i+)recvbufi=sendbufi;BYTE check1=GetCheckSum(recvbuf,TotalLen-1);if(check1!=recvbufTotalLen-1)return;for(int i=0;iTotalLen;i+)comm_data_RCV.bufi=recvbufi;m_addr=comm_data_RCV.com_data .addr;m_len=comm_data_RCV.com_data.len;m_state=comm_data_RCV.com_data.states.statecode;m_SW1=comm_data_RCV.com_data.states.SW1; m_SW2=comm_data_RCV.com_data.states.SW2;m_SW3=comm_data_RCV.com_data.states.SW3;m_SW4=comm_data_RCV.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版公共安全风险评估咨询服务合同汇编
- 2025年汽车抵押贷款抵押权解除合同协议
- 2025版企业员工借调与员工晋升发展协议
- 2025版互联网金融服务投标合同范本
- 诸暨股票知识培训课件
- 说课课件时间安排方案
- 红色电影影视鉴赏课件
- 2025工程技术服务合同模板
- 客户服务满意度调研问卷工具
- 项目风险管理与应对方案工具箱
- 2025医养结合笔试题及答案
- 烧结基础理论课件
- 《家庭教育学》全套教学课件
- 文明礼貌课件模板
- 直流输电技术试题及答案
- 泸州市巨力液压有限公司研发中心、车间 项目环评报告
- 2025年宪法知识竞赛试题库1000题(含答案)
- 【中考真题】2025年贵州省中考数学真题(含解析)
- 软式内镜培训课件
- 福寿园内部培训课件
- 汽车户外互动活动方案
评论
0/150
提交评论