http://download.csdn.net/detail/luck_good/3798729
经过几天的努力终于实现了我的modscan36,几点笔记,
1.
使用api读写串口(网上下载的已经封装过的串口类CComControl)。
2.
按照modscan32的逻辑应该是所有new出来的childframe组是共享一个串口对象的。即一个app只开一个串口,所以将串口对象定义成全局的了,CComControl* m_Com;   
并在InitInstance函数中创建对象 m_Com = new CComControl(pMainFrame->m_hWnd)(还有crc = new Crc(16,0X8005,1,0XFFFF,0);)
3.
3个view分别是
class CMdi_modbus1View : public CFormView
class CMyDataView : public CView
class CMyCurveView : public CView
上面的视modbus1View 用于用户交互,继承于CFormView,本来要和modscan32那样不用formview的,但动态new和create各个控件和排列控件还需要花时间去算,不如formview直接拖的省事。
左边的视CMyDataView 用于显示数据,继承于cview,打印数据。将发送数据缓冲区(从doc中get,是doc的成员变量,是CMdi_modbus1View传递给doc的buff指针)的值和接受数据缓冲区(全局)的值textout。
右边的CMyCurveView 用于绘图,将接受数据缓冲区(全局)的值画出来。
4.
接收数据:构造m_Com对象时,指定了了接收消息的HWND窗口句柄是pMainFrame->m_hWnd,因为想不到其他是什么窗口可以接收这个消息,所以就用这个了(用view去接收肯定不行的,应为这里即使打开一个childframe也会有3个view,并且在打开多个childframe时,有众多的view,他们大部分都需要串口接收到的数据以绘图,那么此时指定哪个view呢?所以不要用view)。这样的话,在mainframe的WindowProc虚函数里就要处理消息并分拣数据以传递给打开过的不同的doc(childframe组)的成员变量,然后附属于该doc的view就可以用 (CMdi_modbus1Doc*)GetDocument()获取到该doc的数据成员。从图中可明显看出3个view对应1个doc,,他们共同构成1个childframe。是3面1体。
有点麻烦的就是分拣了,那个childfram里的view(CMdi_modbus1View)发得请求,就把对应该请求的从机的回复分配到他的doc里。--当然如果仅打开一个childframe就不需要
分拣了,直接传递过去就行了。我这里就是这么搞的---O(∩_∩)O~。但比这个更随意一点,接收buff使用的是全局变量,传也没传,在view中直接使用全局变量buff绘图的,没拐到doc里要数据。--所以这个程序在打开多个childframe的时候response_times下的接收到数据就会紊乱。--恩,开一个childframe没问题的。
5
.发送数据:本来打算每打开一个childframe就添加一个线程用于定时发送数据。后来观察modscan32发现不管打开多少childframe都是4个线程,想了想,在线程函数中读取
view的数据也不太好办(新手),就按照每打开一个childframe就添加一个定时器去定时0.5s发送好了,使用主线程,不过没怎么影响界面操作。
发送数据缓冲区没必要用全局变量了,使用的是view中的一个局部变量yxdata,通过界面上控件获取各个信息以构造modbus帧的发送buff即yxdata,是static。然后调用m_Com发送,然后将yxdata首地址赋给给doc里的对应指针。这里yxdata需要使用static,因为是局部变量yxdata在每次函数执行完毕都会清掉,然后在下一次执行时,分的内存位置就不一定时上次的那个,这样传递到doc中,再被其他view访问的时候,可能这个内存区域已经是别的东东了,所以就有可能(或者说一定)出错。所以要用static修饰一下。
6.
view的重绘
在CMdi_modbus1View 的定时器函数中调用,         
this->GetDocument()->UpdateAllViews(NULL);//更新所有view,发出消息
在CMyDataView 和CMyCurveView的  OnUpdate函数中调用    CWnd::Invalidate();以使本view调用OnDraw函数进行重绘
7.
CMyDataView和CMyCurveView中实现重绘功能即OnDraw函数,doc里没有实现保存功能即Serialize函数。没有modbus-tcp,没有modbus-ascii。O(∩_∩)O不是本业,要求不高。
但更重要的是默认是9600 even 8 1,而没将它开放出来,想使用就改源码吧

modscan36--my milestone相关推荐

  1. 里程碑Droid/Milestone/XT702官方正式2.2ROM刷机教程及刷机失败解决方法(含2.1底包)

    里程碑/Droid/Milestone/XT702的国行2.2官方ROM终于放出!这对于国行里程碑的各位机油无疑是雪中送炭! 所以在此,小釖附上刷机教程,助各位机油刷机愉快!!! 本次为正式版,非3/ ...

  2. 手机远程ssh登录Linux,Linux SSH(远程登录)到Milestone手机

    手机类型是MOTO Milestone 2.0,手机没有sshd服务,可以用Dropbear代替. 当然首先要获得root权限,可以从网上下载包,拷到sdcard的根目录下,在recovery 模式下 ...

  3. [dhtmlxGantt]Milestone Mark-里程碑标识的交错显示

    问题描述 dhtmlx 默认状况下, Milestone Mark是在最上方显示的,如果两个Milestone的时间距离比较短的话, 就有可能出现重叠的状况,导致看不清楚, 影响用户体验. 解决思路 ...

  4. [dhtmlxGantt]浮动Milestone显示

    问题描述 当Task比较多的时候, 垂直方向出现滚动条的时候,向下滚动的时候, milestone的显示也就看不见了 原因解析 使用Chrome看一下CSS定义, 使用的是绝对定位. position ...

  5. Milestone 系统架构 及产品白皮书

    White paper 白皮书 Milestone InterconnectTM 里程碑interconnecttm Prepared by: 制备: John Rasmussen, Senior T ...

  6. android 坚挺通话广播_Android智能机 摩托罗拉MileStone坚挺

    (中关村在线手机频道行情报道)2010年11月29日,摩托罗拉MileStone(改版机)在商家"中关村特价手机网"的最新报价是2350元,售价依旧坚挺,配件有:单电单充.耳机.数 ...

  7. HTC Desire (G7) VS MOTO Milestone VS MOTO XT800 个人对比评测

    几个月内先后购置了3部Android手机了,不是发烧买来玩,一个自己用的HTC Desire (G7),一个老婆用的MOTO Milestone,一个给我爸新买的MOTO XT800. 虽说是三个人用 ...

  8. 视频管理软件技术分析报告(二)--商业VMS产品分析(Milestone)

    1.公司简介   Milestone(麦视通)公司1998年成立于丹麦,是开放式网络型监控系统(全球领导品牌)的领导厂家.   Milestone是全球第一家开发出网络型开放式平台监控系统的公司.Mi ...

  9. Milestone 如何突破疫情封锁,准时发布 MotoGP™20

    想象一下:你在一家游戏工作室开发一个广受欢迎的游戏系列,并到了最后的开发阶段.然后,百年内最为严重的疫情突然袭来,而你所在国家的致病率还位居全球首位,基本上全国人口都处于封控之中. 在这种严峻的情况下 ...

  10. Milestone/A853/XT702/umts_sholes Compile your own Android ROM and Customize your own linux kernel

    本文讲述 如何为自己的 Motolora Milestone/umts_sholes/A853/XT702 编译 Android CM ROM, 从此以后可以自己轻松定制 Android ROM,喜欢 ...

最新文章

  1. 是时候开始使用JavaScript严格模式了怎样启用javascri
  2. Mysql 基于 Amoeba 的 读写分离(2)
  3. matlab支持的文件类型,MATLAB可以读取的数据文件类型有()
  4. cs4.1 编译与安装
  5. Java中的Arrays类使用详解
  6. WordPress我安装成功了,容易!
  7. SHFileOperation 文件拷贝、移动、删除等操作
  8. 吉林大学操作系统上机随笔《实验二》
  9. 21.pgsql中的执行计划explain
  10. [敏捷开发培训] 燃尽图(Burndown Chart)
  11. win10系统更新之后经常蓝屏解决方法分享
  12. delphi res 使用
  13. FPGA-出租车计价器的实现
  14. 第六章 使用Direct3D绘制
  15. tensorflow安装 报错ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。
  16. 240天,转行程序员终于成为CSDN博客专家
  17. 自定义404页面并打包docker部署项目
  18. 使用AndriodStudio制作音乐播放器之音乐播放界面(进度条正常播放、上、下曲切换)
  19. oracle如何导入一个用户,Oracle 把一个用户的数据导入另一个用户 (数据泵)
  20. 小蒋搜搜(xp search) 官网

热门文章

  1. 【Excel】数据透视表—标签合并居中
  2. Android:实现应用版本更新
  3. JSP程序设计之(1)Tomcat安装及环境变量配置
  4. Unity 按钮脚本
  5. 国内在线查看Java源码(支持下载)
  6. NTSD命令用法详解
  7. 服务器2008系统驱动安装,三招搞定Server 2008驱动程序问题
  8. 原生JS实现图片幻灯片效果
  9. 【2017-7-17】动软代码生成器 数据库连接 配置失败 解决方法
  10. MFC模拟360悬浮窗加速球窗口