20140603

  1. 将通信程序包装成 Windows Service。
  2. 与曾磊一起调试通信程序和数据库相关问题。
  3. 校正项目计划书。
  4. 用 PSService 实现远程操作 Windows service。

20140604

  1. 用 InstallShield 生成服务端安装程序,包含
    • .Net Framework 4.0
    • Visual Studio 12 CRT x86
    • Windows Installer 4.0
    • InstallSheild 收费版提供卸载前的 actions,免费版只有卸载完成后的 action 可定义,最后用 sc 命令代替 WinSW 的 uninstall 来删除服务。
  2. 远程启动、停止、重启通信程序功能测试成功。

20140605

  1. 修复数据库自增ID计数器在系统重启后被重置的问题。
    • InnoDB 的计数器在内存里,并不写到磁盘;
    • 改用 MyISAM 解决。
  2. 根据李应启的反馈,修改数据库操作行为:设置组与清除组时,不更新数据库;仅在查询组之后,将查到的值更新至数据库。
  3. 开始实现软件模拟的控制器,用于压力测试。

20140606

  1. 模拟控制器回复 00801080 类型的查询指令。
  2. 解决 MySQL/MariaDB Server 安装在 Windows 上,表名全部被转换为小写的问题。

20140607

性能优化

  1. 用更快的 split() 函数替代 boost::split() 来分割任务参数
  2. 日志中不再记录函数信息和在代码中的位置
  3. 大量重复输出的日志记录级别降到 trace,减少输出量
  4. 在内存中缓存数据库查询结果,减少数据库查询数量
  5. 自动设备状态查询尽在空闲时(TaskTodo为空时)才进行
  6. sprintf() 替代一些 stringstream 的操作

20140609

  1. 性能优化
    • 从6号每秒查询20个终端状态,到现在每秒查询约50个
    • 由于libmysql的查询不支持多线程并发操作,实现多线程通信需要做较大改动,暂不考虑
    • 数据库查询加上TaskDone插入语句的生成占了近一半的执行时间,这部分时间很难再缩减了

20140610

  1. 启用数据库多条语句一次发送执行的功能。
  2. 忽略卸载时删除服务的返回值,避免服务已被人工删除导致卸载程序报错。
  3. 处理任务考虑优先级:用户插入的任务,优先级高于定时查询。
  4. 实验在数据库中用 trigger 实现状态变更历史记录。
  5. 讨论决定记录如下状态量的历史:
    • 电流
    • 电压
    • 亮度
    • 功率

20140611

  1. 将控制器返回的设备状态转换成浮点数再存入数据库。
    • 电流、电压、功率都有2位宽度的单位和14位宽度的数值;
    • 存到数据库的值统一使用A、V、W为单位。
  2. 新增 DeviceStatusHistory 表,记录电流、电压、亮度、功率的变化。
  3. 通过 SQL 语句汇总每小时、每天、每月的状态量平均值。
  4. 应唐德要求,升级设备固件增加对单灯地址的支持
    • 任务参数修改为“控制器地址,终端地址,FirmwareMD5”

20140612

  1. 提出两种历史状态查询的数据采集方法,做了比较
  2. 与唐德讨论历史状态查询的需求细节,确定数据采集方式
  3. 读MySQL文档,熟悉一些日期、数值相关的工具函数
  4. 调试控制器掉电后,通信程序crash的问题。
    • 问题出在超时后断开连接重连的过程,socket.cancel() 函数在 Windows XP & Windows Server 2003 上会失败。
    • Windows 7 下没有问题。
    • 使用 socket.close() 同时完成异步操作的取消以及关闭连接,是具有可移植性的方式。
  5. 修正控制器掉电后,重连前待执行的任务一直遗留在 TaskTodo 表中的问题。

20140613

  1. 解决一个前台程序与数据库信息不一致后,引起通信程序crash的问题。
    • 前台程序实例1启动后,数据库中的控制器信息被修改,此时如果查询一个数据库中不存在的控制器,会无法建立连接。
    • 此前合并重复代码时,未充分考虑错误处理,导致这里的错误处理代码被绕过了。
  2. 配置 MySQL Event Scheduler 实现定时采样状态量
  3. 将过去一天的状态量采样按小时归纳成平均值
  4. 将过去一周的状态量采样按天归纳成平均值

20140614

  1. 求历史记录均值后,清除过期历史
  2. 写StarRiver测试计划(通信程序部分)

20140616

  1. 检查过去三天历史记录 event 行为是否符合预期
  2. 历史记录增加对峰谷值的记录
  3. 调试单灯固件升级
  4. 修正通信运行状态显示不正确的问题
  5. 写脚本每日自动备份202.11.4.63上的数据库

20140617

  1. 历史记录统计间隔改为
    • 每小时统计上一个小时的均值、峰谷值
    • 每日统计上一日的均值、峰谷值
  2. 如果一个控制器连接不上,通信程序卡在建立连接和重试的阶段,查询另一个控制器的任务要等到这个任务超时才开始执行,很容易超时。将建立连接改为异步操作解决。
  3. 从数据库读取配置参数,使得GUI程序可以通过写数据库并通知通信程序重启来修改通信程序的行为。
  4. 避免 \Wall 检查到的 signed/unsigned 类型间的隐式转换。
  5. 更新数据库设计,新增 DeviceStatus_edit 表,用于存放 StarRiverEdit 中录入的设备初始记录。

20140618

  1. 记录通信状态历史,用于绘图时标志可能无效的采样值。
  2. 设计数据结构存储亮度设置表格,用于定时刷新亮度设置。
  3. 区分用户任务和自动任务,后者不经过数据库的 TaskTodoTaskDone 表。

20140619

  1. 新建数据库用户 'sansi'@'%',数据库连接统一使用该用户登录。
  2. TCP通信超时后立即断开连接,保证下一次通信重连后进行。不等待N次超时才判定连接已丢失。
  3. 在笔记本上安装配置数据库、通信程序、前台程序。
  4. 浏览 POCO C++ Libraries 文档
    • 其中的 net, log, encoding, hash 等模块都可以用在通信程序和前台程序上。
    • 现在用 boost.asio 和 boost.logging 以及我自己的一些工具函数库实现的代码,维护起来难度不小,主要是 boost 的一些写法初看比较难理解。
    • 如果 POCO 的API更加简单直观,考虑在下次大幅增加功能的时候,替换掉现有代码。

20140620

  1. 调试数据库查询返回空结果的问题
  2. StarRiver 项目进度讨论
  3. 尝试用 Rickshaw 画历史变化曲线

20140621

  1. 周报
  2. POCO文档
    • POCO 的 socket 类没有对串口的支持,目前查下来,跨平台的 C++ 串口通信库只有 Boost.Asio 了。另一个 RS-232 for Linux and Windows 只支持 Cygwin,不支持 Visual Studio 编译。

20140623

  1. 读 More Effective C++
  2. ControllerConnection 类增加成员记录需要刷新的亮度设置
  3. StarRiver 测试程序设计讨论

20140624

  1. 设置亮度时,根据设备ID更新亮度表。
    1. 广播:清空表。
    2. 非广播:如有广播设置,删除,改为所有单灯设置。
      • 组:清除组内全部单灯设置。
      • 单灯:如有单灯所属组设置,删除,改为单灯设置。
    3. 插入当前亮度设置。
  2. 修改数据库设计,记录控制器、设备的状态变化。

20140625

  1. 协助薛工调试 SkyEye 无线监控程序。
  2. 根据控制器 workmode 开启/关闭亮度表定时刷新。

20140626

  1. 配置文件增加刷新亮度设置间隔
  2. 实现定时刷新亮度设置

20140627

  1. 调试 StarRiver 通信程序
  2. (校正项目)寻找将搜索到的像素点先按行再按列排序的算法

20140630

  1. 读 Effective STL,改写 StarRiver 通信程序代码,提升效率。
  2. StarRiver 项目时间表

results matching ""

    No results matching ""