嵌入式数据采集系统设计报告4

上传人:桔**** 文档编号:564871977 上传时间:2022-12-03 格式:DOCX 页数:5 大小:161.12KB
返回 下载 相关 举报
嵌入式数据采集系统设计报告4_第1页
第1页 / 共5页
嵌入式数据采集系统设计报告4_第2页
第2页 / 共5页
嵌入式数据采集系统设计报告4_第3页
第3页 / 共5页
嵌入式数据采集系统设计报告4_第4页
第4页 / 共5页
嵌入式数据采集系统设计报告4_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《嵌入式数据采集系统设计报告4》由会员分享,可在线阅读,更多相关《嵌入式数据采集系统设计报告4(5页珍藏版)》请在金锄头文库上搜索。

1、【11】采集从机ADC1, ADC2数据命令帧:3b30323033303230313032304630360D0A= ;02030201020F060D0A 命令帧说明:3b30323033303230313032304630360D0A9目标网 络地址 为 0x02, 发给从 机功能代 码0x03 ,表示查 询功能数据长 度为0x020x01,表 示 从ADC1路开始 采集0x02 ,表示米 集2路 数据LRC咼 字节,数 值为0x0FLRC低字节, 数值为0x06回车换 行主机运行状况截图如下:截图说明:主机发现请求帧的网络地址不是自己,转发请求帧给从机 从机运行状况截图如下上面的buf

2、f_com2表示从机从RS232获取主机转发的数据;02030201020F06回车换行 Master-others部分表示从机对获取得到的转发包进行分析,结果是有效包 接下来others-master部分表示从机开始采集AD数据ADC1三次采集平均数据为1.413672,转化为字符串取前三位返回字符串141ADC2三次采集平均数据为0.465137,转化为字符串取前三位返回字符串046 合并字符串为141046插入到响应帧的数据部分,构造响应帧为3b3032303330353O313O32303130343031303030343036304530300D0A然后发送给主机,让主机转发给PC

3、上位机在主机的调试PC上输出为;020308O1O20104010004060E00回车换行(如上截图)90203050002010401000E000406分号说明这是 从机的响 应帧响应帧对 应着03 的请求功 能数据长度为 0x05是从ADC1 开 始采集的 数据采集2路AD数据从机ADC1,ADC2采集数据LRC校验码PC上位机响应结果截图如下(响应帧为第2条记录,换行是因为帧中的OxODOA字符输出为 回车换行)【12】采集从机ADCO,ADC1, ADC2数据命令帧:3b30323033303230303033304630360D0A= ;02030200030F060D0A 命令

4、帧说明:3b30323033303230303033304630360D0A9目标网 络地址 为 0x02, 发给从 机功能代 码0x03 ,表示查 询功能数据长 度为0x020x00,表 示 从ADC0路开始 采集0x03 , 表示米 集3路 数据LRC咼 字节,数 值为0x0FLRC低字节, 数值为0x06回车换 行主机运行状况截图如下:截图说明:主机发现请求帧的网络地址不是自己,转发请求帧给从机 从机运行状况截图如下上面的buff_com2表示从机从RS232获取主机转发的数据;02030201020F06回车换行Master-others部分表示从机对获取得到的转发包进行分析,结果是有

5、效包接下来others-master部分表示从机开始采集AD数据ADC0三次采集平均数据为3.296777,转化为字符串取前三位返回字符串329ADC1三次采集平均数据为1.413672,转化为字符串取前三位返回字符串141ADC2三次采集平均数据为0.465137,转化为字符串取前三位返回字符串046合并字符串为141046插入到响应帧的数据部分,构造响应帧为3b30323033303530313032303330323039303130343031303030343036304330460D0A;0203080002030209010401ODOD:02030801020104010004

6、080EOO;02030B00030302090104010004060C0F然后发送给主机,让主机转发给PC上位机在主机的调试PC上输出为;020308O1O2030209010401000406OC0F回车换行(如上截图)902030500030302090104010004060C0F分号说明这是 从机的响 应帧响应帧对 应着03 的请求功 能数据长度为 0x05是从ADC0 开 始采集的 数据采集3路AD数据从机ADC0,ADC1,ADC2采集数据LRC校验码PC上位机响应结果截图如下(响应帧为第2条记录,换行是因为帧中的OxODOA字符输出为 回车换行)【13】控制主机电机转速命令帧

7、:3b303130343033303330313034304630300D0A= ;0104030301040F00 回车换行命令帧说明:3b303130343033303330313034304630300D0A9目标网络 地址为 0x01,发 给主机功能代码 0x04,表 示控速功 能数据长度 为 0x03电机速度LRC 咼 字节,数 值为0x0FLRC低 字节,数 值为0x00回车换行主机运行状况截图如下:*;0204030301040E0F 回车换行命令帧说明:3b30323034303330333031304530460D0A30349目标网络 地址为 0x02,发 给从机功能代码

8、0x04,表 示控速功 能数据长度 为 0x03电机速度LRC 咼 字节,数 值为0X0ELRC低 字节,数 值为0X0F回车换行主机运行状况截图如下:截图说明:主机发现请求帧的网络地址不是自己,转发请求帧给从机*PCyMASTER*I;0204030301040E0FVALID_PACKET!*MASTEROTHERS*;0204030301040E0F从机运行状况截图如下上面的buff_com2表示从机从RS232获取主机转发的数据;0204030301040E0F回车换行 Master-others部分表示从机对获取得到的转发包进行分析,结果是有效包接下来others-master部分表

9、示从机对电机进行控速。|【课程设计总结-许叶洪】 II主要是设计编程过程中遇到的困难以及解决办法在主机程序的main函数的if.if.else代码部分的else语句块中,我原本是想用read函数去 读取串口 RS232,串口 RS485串口的数据,达到监听串口数据是否有输入的效果。然而遇到的第一个问题是,在上位机PC的调试助手中发送数据,主机的调试PC上的 超级终端没有显示接收到数据。【解决办法】:原来是串口 RS232和RS485的属性默认为阻塞,要使其用read函数读取串 口数据时不阻塞,在网上查阅了资料,找到了解决办法,就是在打开文件时候,设置文件属 性为O_NONBLOCK,用代码语句

10、表达就是:fdcom1 = open(COM1, 0_RDWRO_NONBLOCK);这下在主机的串口调试PC的超级终端是可以完全接收到数据,但是接收的时候分三段接收, 这就遇到了第二个问题。后来找到原因,是因为字符在串口线上传输需要时间,每传一个字符需要花费70us的 时间,计算过程:8bit/115200=70us;会有这样的一种情况,比如调试助手那边发送过来一个 字符-分号”;”,主机程序接收到后继续执行,在调试助手发送的接下来的一个字符还没到达 主机的RS232串口缓冲区时候,主机程序又执行到监听串口数据是否来临的代码语句块, 此时就会检测到没有数据,然后就退出循环读取串口数据的语句块

11、。然后就把分号“”当做 全部的串口数据和赋值com1x为0x01 (串口 RS232有数据的标志)。接下来进入 modbus_receive_analyse函数对命令帧进行分析,理所当然地会得到一个无效包的结果。接下来返回到main函数中,继续监听主机串口 RS232和RS485是否有数据。在执行上 面过程的代码过程中,串口助手已经发送了多个字符到串口 RS232,此时用read函数去试 图读取主机串口 RS232的数据,必然是能够读取到的,虽然能够读取多个字符,但是之前 的代码程序执行速度快,调试助手不可能在这么短的时间内传输完毕所有的字符。所以在主 机的调试PC的超级终端中显示接收到命令帧

12、的接下来一段字符串,但是还是没有接收完毕 命令帧的所有字符。接收完现有主机串口 RS232的数据完毕后,要在接收新的字符数据时 候,又像之前一样,在调试助手发送的接下来的一个字符还没到达主机的RS232串口缓冲 区时候,主机程序又执行到监听串口数据是否来临的代码语句块,此时就会检测到没有数 据,然后就退出循环读取串口数据的语句块。又去执行命令帧分析函数 modbus_receive_analyse,由于命令帧不完整,此时还是一样得到一个无效包的结果。接下来返回到main函数中,继续监听主机串口 RS232和RS485是否有数据,接下来接 收了剩下的字符,但是毕竟命令帧不完整,还是会得到一个无效

13、包的结果。分析清楚以上原因后,采取的【解决办法】是在main函数的监听串口数据的语句块中,也就是每次read函数执行一次循环后,接收 完一个字符后,就usleep(80)等待调试助手那边传输完毕接下来的一个字符,这样就避免了 以上的接收问题。while(read_bytes=read(fdcom2,buff_temp,256)0) memcpy(buff_com2+total_read_bytes,buff_temp,read_bytes); total_read_bytes+=read_bytes;usleep(80);当完成基本的通信时,发送和接收都没有问题的时候,我想一两次的执行成功不能代表 程序没有问题,于是我就勾上了调试助手的定时发送,当发送10多次的时候,主机的调试 PC和从机的调试PC的超级终端都会显示程序溢出。这就遇到了第三个问题联系以前C语言编写文件程序的时候,也遇到这样的情况,分析应该是接收的文件缓 冲区溢出的原因,就是说arm平

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号