标准化工业仪表上位机调试调试平台设计毕业论文.doc_第1页
标准化工业仪表上位机调试调试平台设计毕业论文.doc_第2页
标准化工业仪表上位机调试调试平台设计毕业论文.doc_第3页
标准化工业仪表上位机调试调试平台设计毕业论文.doc_第4页
标准化工业仪表上位机调试调试平台设计毕业论文.doc_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I 标准化工业仪表上位机调试调试平台设标准化工业仪表上位机调试调试平台设 计毕业论文计毕业论文 目 录 1 绪论 1 1 1研究的背景和意义 1 1 2主要实现的功能 1 2开发平台和开发语言简介 3 2 1 WINDOWS 系统介绍 3 2 1 1 WINDOWS 系统的由来和发展 3 2 1 2 WINDOWS 系统的特点 4 2 2 QT 开发工具和开发语言的介绍 5 2 2 1 QT 的诞生和发展 5 2 2 2 QT 开发的优点和特点 5 2 2 3 C 语言介绍 6 3SQLITE 数据库简介 8 3 1 SQLITE 数据库的由来和发展 8 3 2 SQLITE 数据库的特点 9 3 3 数据库设计 10 4软件设计 12 4 1软件功能概要 12 4 1 1 软件结构图 12 4 1 2 软件部分功能流程图 13 II 4 2用户登录模块的设计 16 4 3状态显示模块的设计 21 4 4软件主界面设计 22 4 5软件通信模块设计 25 4 5 1 软件通信模块 25 4 5 2 TCP 通信模块 26 4 5 3 UDP 通信模块 28 4 5 4 串口通信模块 29 4 6信息处理和显示模块的设计 31 4 6 1 电压模块 33 4 6 2 电流模块 40 4 6 3 波形模块 41 4 6 4 速度模块 45 4 7用户管理模块的设计 47 4 8 帮助模块的设计 49 5 总结 51 参考文献 52 致谢 53 附录 54 1 1 绪论绪论 1 1 研究的背景和意义研究的背景和意义 工业仪表是使用广泛的电气设备 生产生活中无处不是工业仪表的身影 大到 机场 研究院 小到社区 家庭 工业仪表的普遍性与重要性可见一斑 然而 由 于各企事业单位的建设是按照自身条件来逐步增加设备的 而仪表的生产厂商也是 按照这些企事业单位的要求来配置仪表的 再加上生产厂商基于技术保密等原因的 考虑 最终使市场上的工业仪表形成了仪表品种繁多 标准不一 兼容性差 利用 率低等一系列问题 同时随着网络节点的增多 如何实现远程监控仪表状态 脱离 工业现场的束缚 成了一个全新的课题 近几年 从国外的一些产品我们也能看到 新一代仪表的一些发展趋势 如 PHILIPS 公司 近年来推出一种基于工业总线的模 块化产品 每个模块都可以独立完成规定的任务 多个模块也可相互配合完成规定 的任务 但仅限于控制模块 并没有标准化的要求及操作系统 目的和意义 为解决上述问题 研发一种能够具有统一标准 兼容性良好 利 用率高的工业仪表成为了关键 本课题恰恰是致力于这种工业仪表的上位机调试平台的设计与研发 此调试平 台是以计算机为基础 通过串口或者其他通讯方式与标准化工业仪表进行通讯 将 仪表的信息传输到平台上 在一个界面实现同时监控一个或多个仪表的实时信息 从而实现远距离监控的目的 通过与下位机的标准化工业仪表相结合 从而达到简 化人员操作 实现标准统一 兼容性好 利用率高的一种工业仪表的最终目标 1 2 主要实现的功能主要实现的功能 主要实现的功能 1 实现了上位机与下位机通过 TCP UDP 及串口通信功能 2 实现了下位机信息的实时动态显示功能 2 3 实现了用户登录校验功能 2 开发平台和开发语言简介开发平台和开发语言简介 3 2 1WINDOWS 系统介绍系统介绍 2 1 1WINDOWS 系统的由来和发展系统的由来和发展 WINDOWS 系统 即 Microsoft Windows 系统 是微软公司推出的一系列的操作 系统 最早版本的 Windows 推出于 1985 年 起初仅仅是 MS DOS 之下的桌面环境 其后续版本逐渐发展成为个人电脑和服务器用户设计的操作系统 并最终在世界个 人电脑操作系统领域内占据垄断地位 Windows 系统拥有不同的平台版本 如个人 电脑 服务器以及近几年刚刚涉及的移动设备领域 其中在个人电脑领域内应用最 为普遍 Windows 起源可以追溯到多年前的施乐公司所进行的研发工作 1970 年 美国 施乐公司成立了著名的研究机构帕罗奥多研究中心 主要从事局域网络 激光打印 机 图形用户界面和面向对象技术的研究 施乐公司于 1981 年宣布推出世界上第一 个商用的图形用户界面系统 Star 8010 工作站 但由于种种原因 此技术并未得 到大众的重视 也没有协助商业化的应用 这时 苹果计算机的创始人之一的史蒂 夫 乔布斯在参观了施乐公司的帕罗奥多研究中心后认识到了图形用户界面的重要性 及广阔的市场前景 便开始着手进行自己的图形用户界面系统的研发工作并于 1983 年研发出第一个图形用户界面系统 Lisa 不久第二个图形用户界面系统 Macintosh 推出 并成为了世界上第一个成功的商业图形用户界面系统 但由于苹果计算机的 商业化考虑 及 Intel x86 微处理器芯片的 IBM 兼容计算机已渐露头角 因此就给了 微软公司所开发的 Windows 生存空间和市场 微软公司也意识到了创建业界标准的 重要性 所以在 1983 年春季就宣布开始研究开发 Windows 并于 1985 年和 1987 年 分别推出了 Windows 1 0 版和 Windows 2 0 版 但是由于硬件和 DOS 系统的限制 这两个版本并没有取得很大的成功 此后 Microsoft 对 Windows 的 RAM 管理 图 形用户界面做了重大改进 使其更加美观并支持虚拟内存功能 使得 1990 年推出的 Windows 3 0 版本一炮走红 随着 30 多年的发展 Windows 系统相继推出了 Windows 95 Windows 98 Windows 2000 Windows XP 以及目前个人电脑使用 4 最为广泛的 Window 7 系统 目前 Windows 最新的个人电脑版本为 Windows 8 1 Windows 系列涉及领域包括服务器 个人电脑 云计算 嵌入式设备 手持设备 以及为微软游戏机 Xbox 设计的版本 2 1 2WINDOWS 系统的特点系统的特点 本课题所进行的软件开发是基于 Window 7 Windows 7 操作系统是微软公司最 新推出的基于 Windows Vista 升级的操作系统 相对于以往的系统 Windows 7 的错 误诊断和修复机制更加强大 能够在用户最少的干预下完成修复工作 开机和关机 速度更快 改善了用户体验度 Windows 7 因其创新的性能 出色的兼容性和卓越的使用体验 获得了来自 IT 各界人士的一致好评 以下为 Windows 7 的 3 个特点 1 更加简单 Windows 7 将会让搜索和使用信息更加简单 包括本地 网络和互联网搜索功能 直观的用户体验将更加高级 2 更加安全 Windows 7 包括改进的安全和功能合法性 还将数据保护和管理扩展到外围设备 Windows 7 改进了基于角色的计算方案和用户账户管理 在数据保护和兼顾协作的固 有冲突之间搭建了沟通桥梁 同时也开启了企业级的数据保护和权限许可 3 更好的连接 Windows 7 将进一步增强移动工作能力 无论在 何时 何地 任何设备都能访 问数据和应用程序 开启坚固的特别协作体验 无线连接 管理和安全功能进一步 扩展 性能和当前功能以及新兴移动硬件得到了优化 多设备同步 管理和数据保 护功能被扩展 另外 Windows 7 还带来了灵活计算基础设施 包括 网络中心模型 2 2QT 开发工具和开发语言的介绍开发工具和开发语言的介绍 5 2 2 1QT 的诞生和发展的诞生和发展 QT 是一个跨平台 C 图形用户界面应用程序开发框架 它既可以开发 GUI 程 序 也可用于开发非 GUI 程序 比如控制台工具和服务器 QT 是面向对象的框架 使用特殊的代码生成扩展 称为元对象编译器 Meta Object Compiler moc 以及一 些宏 易于扩展 允许组件编程 1991 年 Haavard Nord 和 Eirik Chambe Eng 开始开发 QT 并于 1994 年创立 公司 Trolltech 中文名为 奇趣科技 2008 年 Trolltech 被 NOKIA 公司收购 以 增强该公司在跨平台软件研发方面的实力 更名为 QT Software 2009 年 5 月 11 日 诺基亚 QT Software 宣布 QT 源代码管理系统面向公众开放 QT 开发人员可通过 QT 以及与 QT 相关的项目贡献代码 翻译 示例以及其他内容 协助引导和塑造 QT 未来的发展 2012 年 8 月 9 日 Digia 宣布已完成对诺基亚 QT 业务以及软件技术的全面收购 2014 年 跨平台集成开发环境 QT Creator 3 1 发布 实现了对于 iOS 的完全支持 新增 WinRT Beautifier 等插件 废弃了无 Python 接口的 GDB 调试支持 集成了基 于 Clang 的 C C 代码模块 并对 Android 支持做出了调整 至此实现了全面支持 iOS Android WP 2 2 2QT 开发的优点和特点开发的优点和特点 QT 所具有的优点和特点主要为以下几个 1 优良的跨平台特性 QT 支持下列操作系统 Microsoft Windows 7 8 Microsoft Windows NT Linux Unix FreeBSD Ubuntu SCO 等 2 面向对象 QT 具有良好的封装机制 这也使得其模块化成都非常高 可重用性好 对用户 的开发非常方便 QT 提供了 SIGNAL SLOT 的安全类来简化各个元件之间的协同 操作 6 3 丰富的 API QT 包括多大 250 个以上的 C 类 提供了基于模板的 collections date time 类 也提供对正则表达式的处理 4 支持 2D 3D 图形渲染 支持 OpenGL 5 拥有大量的开发文档 多种实例 6 支持 XML 2 2 3C 语言介绍语言介绍 C 是在 C 语言的基础上开发的一种集面向对象编程 泛型编程和过程化编程 于一体的编程语言 而 QT 则是 C 的比较知名的开源库之一 因而想要使用 QT 进 行软件开发 学习 C 也就成了至关重要的基础 计算机诞生初期 人们要使用计算机必须用机器语言或汇编语言编写程序 世 界上第一种计算机高级语言是诞生于 1954 年的 FORTRAN 语言 之后出现了多种计 算机高级语言 其中使用最广泛 影响最大的当推 BASIC 语言和 C 语言 BASIC 语 言是 1964 年由 Dartmouth 学院 John G Kemeny 与 Thomas E Kurtz 两位教授在 FORTRAN 语言的基础上简化而成的 适用于初学者设计的小型高级语言 C 语言 是 1972 年由美国贝尔实验室的 D M Ritchie 所开发 采用结构化编程方法 遵从自 顶向下的原则 在操作系统和系统使用程序以及需要对硬件进行操作的场合 用 C 语言明显优于其它高级语言 但在编写大型程序时 C 语言仍面临着挑战 1983 年 在 C 语言基础上贝尔实验室的 Bjarne Stroustrup 推出了 C C 进 一步扩充和完善了 C 语言 是一种面向对象的程序设计语言 目前流行的 C 语言版 本 C 语言既保留了 C 语言的有效性 灵活性 便于移植等全部精华和特点 又 添加了面向对象编程的支持 具有强大的编程功能 可方便地构造出模拟现实问题 的实体和操作 编写出的程序具有结构清晰 易于扩充等优良特性 适合于各种应 7 用软件 系统软件的程序设计 用 C 编写的程序可读性好 生成的代码质量高 运行效率仅比汇编语言慢 10 20 C 语言具有以下特点 1 C 语言是 C 语言的超集 它保持了 C 语言简洁高效等特点 同时能够其编 译系统能够检查更多的语法错误 因而 C 比 C 语言更加的安全 2 C 保持了与 C 语言的兼容 绝大多数 C 语言程序可以不经修改直接在 C 环境中运行 用 C 语言编写的众多库函数可以用于 C 程序中 3 支持面向对象程序设计的特征 C 既支持面向过程的程序设计 又支持面 向对象的程序设计 4 C 程序在可重用性 可扩充性 可维护性和可靠性等方面都较 C 语言得到 了提高 使其更适合开发大中型的系统软件和应用程序 5 C 设计成直接的和广泛的支援多种程序设计风格 程序化程序设计 资料 抽象化 面向对象程序设计 泛型程序设计 6 C 设计成无需复杂的程序设计环境 3 SQLITE 数据库简介数据库简介 3 1 SQLITE 数据库的由来和发展数据库的由来和发展 8 从某个角度来说 SQLITE 最初的构思是在一条军舰上进行的 SQLITE 的作者 D Richard Hipp 当时正在为美国海军编制一种是用在导弹驱逐舰上的程序 那个程 序最初是运行在 Hewlett Packard Unix HPUX 上 后台使用 Informix 数据库 Informix 数据库功能很强大 一个有经验的数据库管理员也需要一整天来进行安装升 级 2000 年 1 月 Hipp 开始和一个同事讨论关于创建一个简单的内嵌式 SQL 数据 库的想法 这个数据库将使用 GNU DBM B Tree library gdbm 做后台 同时这个数 据库将不需要安装和管理支持 后来 在闲暇时间 Hipp 就开始实施这项工作 并 在 2000 年的 8 月份发布了 SQLITE 的 1 0 版 按照原计划 SQLITE 1 0 用 gdbm 来进行存储管理 不过 Hipp 很快就换成 了自己的 B tree 以便于支持事物和主键的存储 在以后的几年里 开源社区的其他 成员开始为自己喜欢的程序编写 SQLITE 扩展 SQLITE 的 ODBC 接口可以为 Perl Python Ruby Java 和其它主流的程序设计语言提供支持 这证明了 SQLITE 有广阔的应用前景 2004 年 SQLITE 从版本 2 升级到版本 3 增加了内置的对 UTF 8 UTF 16 及 用户定义字符集的支持 除国际化功能外 版本 3 的其它新特性包括 经过修补的 C API 更紧凑的数据库文件格式 比原来节省 25 的空间 弱类型 大二进制对象 BLOB 的支持 64 bit 的 ROWID auto vacuum 和改进了的并发控制 尽管增加了 这一系列新特性 版本 3 的运行库仍然小于 240K 字节 SQLITE 持续增长并始终坚持其最初的设计目标 简单 弹性 紧凑 速度和彻 底的易用 3 2 SQLITE 数据库的特点数据库的特点 在 SQLITE 的观念和实现中 都遵循着一系列指导原则 下面就来详述这些原 则 9 1 零配置 从 SQLITE 的设计之始 就没准备在应用时使用 DBA 配置和管理 SQLITE 就 像得到它一样简单 2 兼容性 SQLITE 在设计时特别注意了兼容性 针对 Windows Linux BSD Mac OS X 及商用的 Unix 系统如 AIX 和 Solaris 嵌入式平台如 Vxworks Palm OS 和 Windows CE SQLITE 都可以编译运行 同时 对于 16 bit 32 bit 和 64 bit 体系结 构 SQLITE 也能够实现无缝工作并能够同时适应字节的大端格式和小端格式 SQLITE 的兼容性并不只表现在代码上 还表现在其数据库文件上 SQLITE 的数据 库文件在其所支持的所有操作系统 硬件体系结构和字节顺序上都是一致的 SQLITE 数据库文件在迁移时不需要进行任何的转换和修改 此外 SQLITE 内置的 支持 UTF 8 和 UTF 16 编码 3 紧凑性 SQLITE 的设计功能齐全但体积很小 只需要 1 个头文件 1 个库 不需要扩展 的数据库服务 所有资料打包之后不过 1 4M 4 简单 作为程序库 SQLITE 的 API 可以算是最简单最易用的了 同时 SQLITE 具有很 好的帮助文档 5 适应性 作为一个内嵌式的数据库 SQLITE 具有以下两个特点 强有力而可伸缩的关系 型数据库前端 简单而紧凑的 B tree 后端 6 不受拘束的授权 SQLITE 的全部代码都在公共域中 不需要授权 无论你如何是用 SQLITE 都不会有法律方面的限制 7 可靠性 SQLITE 源代码包含大约 30000 行标准 C 代码 它是干净的 模块化的和完好 注释的 SQLITE 源代码易理解 易定制 10 SQLITE 的核心软件 库和工具 由约 30000 行代码组成 但分发的程序中还包含 有超过 30000 行的回归测试代码 它们覆盖了 97 的核心代码 也就是说 超过一 半的 SQLITE 项目代码是专门用于回归测试的 也就是说 差不多每写一行功能代 码 都要写一行测试代码对它进行测试 8 易用性 SQLITE 还提供一些独特的功能来提高易用性 包括动态类型 冲突解决和 附 加 多个数据库到一个连接的能力 3 3 数据库设计数据库设计 数据库设计 Database Design 是指对于一个给定的应用环境 构造最优的数据库 模式 建立数据库及其应用系统 使之能够有效地存储数据 满足各种用户的应用 需求 信息要求和处理要求 数据库在一个信息管理系统中占有非常重要的地位 数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响 合理的 数据库结构设计可以提高数据存储的效率 保证数据库的完整和一致 同时 合理 的数据库结构也将有利于程序的实现 由于本课题只是针对用户信息使用了数据库 所以 数据库内只需要设计一张 用于存放用户信息的表即可 UserInformation 表的结构如下 UserInformation UserNamePK PasswordPK 11 图 3 1 用户数据表设计 将 UserName 和 Password 均设置为主键 避免出现密码为空的情况 使用 SQL 语句建表 设置用户名和密码为主键 create table UserInformation UserName Varchar NOT NULL Password Varchar NOT NULL PRIMARY KEY UserName Password 4 软件设计软件设计 4 1软件功能概要软件功能概要 4 1 1 软件结构图软件结构图 12 上位机下设六个模块 分别为登录模块 状态显示模块 通信模块 信息显示 模块 用户管理模块和帮助模块 软件的结构框架如下图 登录模块 通过与 SQLITE 数据库的连接 进行用户密码的校验 以提高软件 的安全性 状态显示模块 此模块的主要目的是通过直观的方式向用户显示下位机与上位 机的连接状态 用户界面登录之后 主界面内的显示的第一个界面即为状态显示界 面 通信模块 主要涉及上位机与下位机的通信方式 目前实现了 TCP 通信 UDP 通信和串口通信 同时能够显示设备的连接状态 信息显示模块 采用了 QT 2D 绘图方法 使用代码绘制界面 通过代码判断下 位机发送的信息内容来实现下位机状态的实时动态显示 用户管理模块 通过与 SQLITE 数据库的连接 可进行添加新用户 修改密码 等操作 帮助模块 实现版本信息提示等功能 4 1 2 软件部分功能流程图软件部分功能流程图 上位机软件 登录模块状态显示模 块 通信模块信息显示模 块 用户管理模 块 帮助模块 图 4 1 软件框架图 13 登录 输入用户名 密码 密码校验 显示主窗体 Y N 结束登录 图 4 2 登录模块流程 14 相关信息校验 端口 IP地 址等 显示下位机信息 Y 选择连接方式 N 开始 结束 输入连接信 息 端口 号 IP地址 等 UDP TCP 串口 图 4 3 通信模块流程图 15 开始 修改用户密码 输入旧密 码 修改后 的密码 旧密码校验 Y 新密码二次校 验 Y 结束 N 图 4 4 修改密码流程 16 开始 添加新用户 输入用户名 密码 新密码二次校 验是否一致 Y 结束 N 图 4 5 更改用户密码流程 4 2用户登录模块的设计用户登录模块的设计 用户登录界面采用传统布局方式 将我校的校徽作为软件的图标 将我校的图 片作为登录背景 并取消最大化窗口 17 窗体实现效果如下图 图 4 7 登录界面初效果 图 4 6 登录界面 18 首先 将 QWidget 作为用户登录界面的 UI 在 UI 设计界面添加相应的控件 通过拖拽控件实现登录按钮 取消按钮 用户名提示 密码提示 用户名输入和密 码输入 在此基础上 添加以下函数设置窗体的效果 void Login setTheStyle 设置窗体居中 int x qApp desktop width this width 2 int y qApp desktop height this height 2 this move x y 设置窗体大小固定 int width this geometry width int height this geometry height this setFixedSize width height 设置背景图片 QPixmap pixmap new prefix1 gate jpg QPalette palette this palette palette setBrush QPalette Background QBrush pixmap this setPalette palette ui passwordLine setPlaceholderText tr 请输入密码 ui passwordLine setEchoMode QLineEdit Password ui nameLine setFocus 19 将登录按钮和取消登录按钮使用 connect 函数与信号槽相连接 其中信号 clicked 为系统提供的信号 槽 close 为系统提供 login 槽为自定义 用以实现用 户登录信息的校验 connect ui cancelButton SIGNAL clicked this SLOT close connect ui confirmButton SIGNAL clicked this SLOT login 函数 void login 声明为自定义信号槽 Login 函数用以判断登录时 用户名 密码是否为空 用户名 密码是否正确 void Login login 判断用户名是否为空 if ui nameLine text isEmpty QMessageBox warning this tr 警告 tr 请输入用户名 QMessageBox Ok ui nameLine setFocus return else if ui passwordLine text isEmpty QMessageBox warning this tr 警告 tr 请输入密码 QMessageBox Ok return 使用代码在数据库中查询输入的用户名 将密码进行比对 如果密码正确 则显 示程序主窗体 错误 显示错误提示 20 数据库操作语句 QString information QString select from UserInformation where NAME 1 arg ui nameLine text QSqlQuery query QString userPassword if query exec information int s password query record indexOf PASS while query next userPassword query value s password toString userPassword query value 1 toString if userPassword ui passwordLine text if m mainwindow NULL m mainwindow new MainWindow m mainwindow show this hide 错误处理代码如下 QMessageBox warning this tr 警告 tr 用户名或密码错误 n 请重新输入 QMessageBox Yes ui nameLine setFocus 21 ui nameLine selectAll ui passwordLine clear 4 3状态显示模块的设计状态显示模块的设计 状态显示模块为用户登录成功后 主界面显示的第一个界面 状态显示模块的 主要目的是为了能够更加直观的向用户显示下位机和上位机的连接状态 为了达到 这个目的 模块的界面设计使用 QLabel 来存放上位机 下位机和连接状态的图片 字符使用 QPushButton 存放 设计为扁平化 并且将字体颜色进行了设计 字体颜色实现代码 ui stateButton setStyleSheet color red connect ui stateButton SIGNAL clicked this SLOT connectSignal 信号的产生主要是为了能够通过状态显示界面的离线按钮点击 调用出通信设 置界面 图 4 8 错误提示 22 4 4软件主界面设计软件主界面设计 软件主界面采用 QMainwindow 类制作 UI 创建 stackwidget 用于存放各个子界 面 将各个子界面压入 stackwidget 中 通过 QMainwindow 的公共函数 setCentralWidget 将 stackwidget 设置为主界面的 centralwidget 通过自写代码实现 各个菜单 并将菜单的按钮 QAction 添加到菜单上 然后 创建自定义的信号槽 通过 QAction 的信号 triggered 与对应的信号槽相连接 从而将界面按钮的功能实 现 信号槽的主要实现将创建的各个子界面显示到主界面的功能 创建各个菜单的按钮 void MainWindow createActions 图 4 9 状态显示界面 23 stateAction new QAction this stateAction setText tr 状态 portAction new QAction this portAction setText tr 端口设置 aboutAction new QAction this aboutAction setText 关于 Qt aboutAuth new QAction this aboutAuth setText 关于软件 首先创建各个动作 即 QAction 然后创建菜单 将各个动作添加到菜单中 void MainWindow createMenus portMenu new QMenu portMenu menuBar addMenu tr 设置 aboutMenu new QMenu aboutMenu menuBar addMenu tr 关于 createActions portMenu addAction portAction portMenu addAction stateAction aboutMenu addAction aboutAction 创建各个子界面 并将子界面进行压栈 压入 stackwidget 中 void MainWindow createStack 24 m stack new QStackedWidget this m stateUI new StateForm m portSetting new PortSettingForm m userUI new userForm m detailStateUI new frmMain m stack addWidget m stateUI m stack addWidget m portSetting m stack addWidget m userUI m stack addWidget m detailStateUI m stack setCurrentIndex 0 this setCentralWidget m stack 创建自定义信号槽 用于将子界面显示在主界面中 使用 connect 函数将信号与信号槽连接起来 完成主界面设计 connect portAction SIGNAL triggered this SLOT showPortUI connect stateAction SIGNAL triggered this SLOT showStateUI connect ui action U SIGNAL triggered this SLOT showUserUI connect aboutAction SIGNAL triggered this SLOT aboutQT void MainWindow showStateUI m stack setCurrentIndex 0 void MainWindow showPortUI 25 m stack setCurrentIndex 1 void MainWindow showUserUI m stack setCurrentIndex 2 void MainWindow aboutQT QMessageBox aboutQt this void MainWindow showDetail m stack setCurrentIndex 3 4 5软件通信模块设计软件通信模块设计 软件通信模块为整个软件的核心部分 能否顺利实现上位机与下位机的通信 软件通信模块的代码实现至关重要 首先要成功实现 TCP UDP 和串口通信方式 针对各个通信方式的设定 对串口通信的配置 都对接下来的显示模块打下了基础 4 5 1软件通信模块软件通信模块 26 通信模块的设计包括两个部分 UI 界面设计和功能实现 UI 界面通过设计界面 通过拖拽控件实现界面的设计 软件设计时 采用单一方式选择方式 只能选择一种连接方式 界面左部为通信 方式选择 右半部份为设备连接状态 选择连接方式后 右下部的状态提示栏会给出相应的状态提示 4 5 2TCP 通信通信模块模块 对于 TCP 通信模块 采用可控的设计 可选择监听的 IP 地址和端口 在 UI 界 面选择 TCP 连接方式后 填写相应的端口和 IP 地址 点击连接按钮 即可通讯 TCP 创建连接的实现代码如下 void PortSettingForm newTcpConnect socket new QTcpSocket this 图 4 10 软件通信界面 27 socket abort socket connectToHost ui comboBox 2 currentText ui lineEdit 2 text toInt connect socket SIGNAL readyRead this SLOT readDataFromTcp connect socket SIGNAL error QAbstractSocket SocketError this SLOT displayError QAbstractSocket SocketError 其中 函数 void PortSettingForm displayError QAbstractSocket SocketError 为自 定义信号槽 用于 TCP 错误输出 readReady 信号每当新的数据到来时 都会被触 发 error QAbstractSocket SocketError 信号会将 socket 的信号发出 函数 void PortSettingForm readDataFromTcp 用于接收 TCP 数据 socket isReadable 返回 true 表示有至少一个数据报待读取 socket readAll 将 TCP 流中的所有数据 dataFromTcp truncate dataFromTcp indexOf E 会对数据包进行截断 假定数据包以字符 E 为结束符 void PortSettingForm readDataFromTcp if socket isReadable QString dataFromTcp socket readAll recievedData dataFromTcp truncate dataFromTcp indexOf E connectReadySignal 1 void PortSettingForm displayError QAbstractSocket SocketError 28 qDebug errorString bind ui lineEdit 2 text toInt QUdpSocket ShareAddress QUdpSocket ReuseAddressHint connect socketUdp SIGNAL readyRead this SLOT readDataFromUdp 此处的 bind 是个重载函数 连接本机的 port 端口 采用 ShareAddress 模式 即允 许其它的服务连接到相同的地址和端口 特别是用在多客户端监听同一个服务器端 口等时特别有效 和 ReuseAddressHint 模式 重新连接服务器 readyRead 信号是 每当有新的数据来临时就被触发 readDataFromUdp 信号槽为自定义信号槽 用来 接收 UDP 数据 hasPendingDatagrams 返回 true 时表示至少有一个数据报在等待被读取 pendingDatagramSize 为返回第一个在等待读取报文的 size resize 函数是把 datagram 的 size 归一化到参数 size 的大小一样 将读取到的不大于 datagram size 大小数据 输入到 datagram data 中 datagram data 返回的是一个字节数组中存储数据位置的 指针 void PortSettingForm readDataFromUdp 29 while socketUdp hasPendingDatagrams QByteArray datagram datagram resize socketUdp pendingDatagramSize socketUdp readDatagram datagram data datagram size recievedData datagram 4 5 4串口通信串口通信模块模块 串口通信的设计稍微复杂 需要对串口信息进行配置 如数据传输的波特率 停止位 校验位 数据位 硬件控制 setPortInfor 函数来设置串口的相关信息 目前 设置串口波特率为 115200 数据位为 8 位 关闭硬件流控制 停止位为 1 位 无校验位 com 是声明的 QSerialport 类的一个对象 Socket 的信号 readReady 每当有新数据到来时 都会发出信号 通过 connect 函数将信号与读取 数据的自定义信号槽 readDataFromSerial 相连 使每次串口中有数据时 程序都会 自动对数据进行处理 setPortInfor 函数的代码实现如下 void PortSettingForm setPortInfor com new QSerialPort ui comboBox currentText if com open QIODevice ReadWrite 打开串口 ui plainTextEdit insertPlainText nOpen Success n com setBaudRate QSerialPort Baud115200 设置串口的波特率 30 com setDataBits QSerialPort Data8 设置串口的数据位 com setFlowControl QSerialPort NoFlowControl 关闭硬件流控制 com setStopBits QSerialPort OneStop 设置停止位 一位 com setParity QSerialPort NoParity 设置校验位 无校验位 connect com SIGNAL readyRead this SLOT readDataFromSerial connectReadySignal 1 else int re QMessageBox warning this tr 警告 tr COM 口初始化失败 QMessageBox Yes 自定义信号槽 readDataFromSerial 函数的实现如下 void PortSettingForm readDataFromSerial static QByteArray allData 静态变量 在串口只发送一半的时候用来累加数据 QByteArray dataTemp 每次读到的数据 可能只是部分的 大多数情况下是正确的 大约 1 5 会出错 while com atEnd dataTemp com readAll 因为串口是不稳定的 也许读到的是部分数据而已 但也可能是全部数据 31 if dataTemp data dataTemp length 1 E 当临时数据最后一位是 E 代表一条数据读完了 allData dataTemp 总数据加上临时数据 allData resize allData size 1 删除结尾的 E 符号 recievedData prepend allData qCritical save 34 QRadialGradient outerGradient m center m outerRadius m center outerGradient setColorAt 0 0 QColor 130 130 130 outerGradient setColorAt 0 9 QColor 130 130 130 outerGradient setColorAt 0 95 QColor 200 200 200 outerGradient setColorAt 1 0 QColor 130 130 130 painter setPen Qt NoPen painter setBrush outerGradient painter drawEllipse m center m outerRadius m outerRadius painter restore 内部圆的绘制采用同样的方法 采用 QRadialGradient 类 进行辐射渐变的绘制 void myGauge1 drawInnerCircle QPainter painter painter save QRadialGradient innerGradient m center m innerRadius m center innerGradient setColorAt 0 0 QColor 180 180 180 innerGradient setColorAt 1 0 QColor 130 130 130 painter setPen Qt NoPen painter setBrush innerGradient painter drawEllipse m center m innerRadius m innerRadius 35 painter restore 接下来 绘制用来显示数值进度的扇形色块 直接采用扇形色块的绘制 为之 后进一步的加工打下基础 void myGauge1 drawColorPies QPainter painter painter save painter setPen Qt NoPen QPointF pieRectTopLeftPot m center x m colorPieRadius m center y m colorPieRadius QPointF pieRectBottomRightPot m center x m colorPieRadius m center y m colorPieRadius m pieRect QRectF pieRectTopLeftPot pieRectBottomRightPot draw green pie painter setBrush Qt green painter drawPie m pieRect 72 16 108 16 draw yellow pie painter setBrush Qt yellow painter drawPie m pieRect 36 16 36 16 draw blue pie painter setBrush Qt red painter drawPie m pieRect 0 16 36 16 painter restore 之后 开始绘制为了实现动态效果的 Graph 36 void myGauge1 drawGraph QPainter painter qreal increment qreal 180 100 painter save painter setPen Qt NoPen QRadialGradient graphGradient m center m colorPieRadius m center graphGradient setColorAt 0 0 QColor 180 180 180 graphGradient setColorAt 0 7 QColor 150 150 150 graphGradient setColorAt 0 85 QColor 180 180 180 graphGradient setColorAt 1 0 QColor 150 150 150 painter setBrush graphGradient painter drawPie m pieRect 0 180 16 m currentValue increment 16 painter restore 其中 m currentValue 为变量 通过改变 m currentValue 的值 之后重绘 来实 现 Graph 的大小改变 void QPainter drawPie const QRectF painter setPen Qt NoPen 37 QRadialGradient coverGradient m center m coverCircleRadius m center coverGradient setColorAt 0 0 QColor 180 180 180 coverGradient setColorAt 1 0 QColor 150 150 150 painter setBrush coverGradient painter drawEllipse m center m coverCircleRadius m coverCircleRadius paint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论