深之JohnChen的专栏

人生就象一杯苦酒,你可以用一生的时间喝完,也可以在短短的几年里喝完,然后就会喝甜酒。

john ChenID:byxdaz
604333次访问,排名64好友5人,关注者43
byxdaz的文章
原创 251 篇
翻译 0 篇
转载 226 篇
评论 225 篇
byxdaz的公告
★★★★★★欢迎访问深之JohnChen的BLOG!
最近评论
yzy912:我现在做轨迹拟合,就是有一些车辆跑过之后的运行轨迹,利用这些轨迹拟合出一条曲线,不知道老兄能否给些指点
fftaks:wow power leveling
fftaks:Wow gold
myshijieye:高压断路器
高压开关柜
开关柜
电工电气产品加工
高压成套电器
收藏
    相册
    搞笑图片
    年历
    My Links
    CSDNBlog
    个人网站
    友情连接
    TOP 10
    2007年年历
    世界上唯一7星级酒店
    中国魅力50人
    中文圣经目录
    改革出了什么问题--郎咸平清华演讲
    电子图书
    英国杂志选出的2007年度世界最性感女性
    西方油画佳作
    超完美12星座戒指
    雅趣技术网
    便民服务
    IP地址、手机号码、身份证查询
    万年历查询
    免费取名网站
    全国铁路交通信息查询
    在线翻译
    天气预报
    房租网
    火车时刻表查询
    航班时刻查询系统
    酒店信息查询
    个人简介
    JohnChen之家
    E-mail: cn770880@21cn.com
    Name:深之JohnChen
    管理知识网站
    IT经理世界
    世界经理人网站
    信息周刊
    支点网-信息化
    软件工程专家网
    免费数码杂志
    时事政治经济综合性免费电子杂志
    时代财富视觉
    榕树下·网友文摘
    爱电影、流行音乐
    营销知识网站
    E-WORKS
    SEO中国
    中国制造网
    中国销售网
    中国销售论坛
    客齐集
    友情Blog
    Linux中国社区
    中华帝国的BLOG
    中国丫头
    人生攻略
    凌学文的博客(凌学文/执业分析师)
    吴小莉的BLOG
    数字水印技术
    易网
    王小丫的BLOG
    老康之家
    娱乐频道
    丽影BT中心
    天涯社区BBS
    影视帝国
    网娱先锋(免费电影网站)
    音乐网
    资料中心
    CSDN首页
    E书下载
    IBM在线教程
    Java视线
    游戏制作人的中文网络平台游戏
    西安资讯网
    资源
    下载Firefox浏览器
    访问sourceForge网站
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 串口编程收藏

    新一篇: Olivetti PR2/PR2E 打印机参数设置  | 旧一篇: Olivetti PR2/PR2E 打印机故障分析与排除

            串口编程的方式有两种:一种MSCOMM控件;二种CSerialPort v1.21类.

            1、MSCOMM控件实例

            参考:http://dev.yesky.com/231/2309731_1.shtml

           2、 CSerialPort v1.21

           参考:http://www.naughter.com/serialport.html

           // 打印控制 

     BYTE* pBuf = new BYTE[1000];
     memset(pBuf,0,1000);
     try
     {
      COMMCONFIG config;
      CSerialPort::GetDefaultConfig(1, config);
      
      CSerialPort port;
      port.Open(1, 9600, CSerialPort::NoParity, 8, CSerialPort::OneStopBit, CSerialPort::XonXoffFlowControl);
      
      HANDLE hPort = port.Detach();
      port.Attach(hPort);
      
      DWORD dwModemStatus;
      port.GetModemStatus(dwModemStatus);
      
      DCB dcb;
      port.GetState(dcb);
      
      dcb.BaudRate = 9600;
      port.SetState(dcb);   
      
      DWORD dwErrors;                     
      port.ClearError(dwErrors);
      
      port.SetBreak();
      port.ClearBreak();
      
      COMSTAT stat;
      port.GetStatus(stat);
      
      DWORD dwBytesWaiting = port.BytesWaiting();
      dwBytesWaiting;
      
      COMMTIMEOUTS timeouts;
      port.GetTimeouts(timeouts);
      
      port.Setup(1000, 1000);
      
      port.GetConfig(config);
      
      config.dcb.BaudRate = 9600;
      port.SetConfig(config);
      
      port.Set0WriteTimeout();
      port.Set0ReadTimeout();  
      
      DWORD dwMask;
      port.GetMask(dwMask);
      
      port.SetMask(EV_TXEMPTY);
      
      //port.WaitEvent(dwMask);
      
      port.TerminateOutstandingWrites();
      
      // port.TransmitChar('p');
      
      port.Set0Timeout(); // 0超时
      /*
      // 1秒超时
      COMMTIMEOUTS Timeouts;
      GetTimeouts(Timeouts);
      Timeouts.WriteTotalTimeoutMultiplier = 1000;
      Timeouts.WriteTotalTimeoutConstant = 1000;
      port.SetTimeouts(Timeouts);
            */
           
      // 打印文本

      str = "\x1bl\x1cK\x1bn\x1bQ225\x1bZ\x1b.\x07\x1bj"; //初始化打印机信息
      char sBuf[1000];
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));

      Sleep(2000);
      // 读取返回值,判断是否处于OLIVETTI打印状态
      char sRxBuf[10];
      memset(sRxBuf,0,10);
      port.Read(sRxBuf,10);
      port.TerminateOutstandingReads();
         
    int iQueryTime = 0;
      while(!(sRxBuf[0]==27 && sRxBuf[1]==114 && sRxBuf[2]==80))
      {
         iQueryTime++;
       if(iQueryTime<=3)
       {
        str = "\x1b\x30"; //总清,打印机软复位
        memset(sBuf,0,1000);
        memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
        port.Write(sBuf, (DWORD) strlen(sBuf));
             
        str = "\x1bn\x1bQ225\x1bZ\x1b."; //初始化打印机
        memset(sBuf,0,1000);
        memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
        port.Write(sBuf, (DWORD) strlen(sBuf)); 

        str = "\x1bj"; //查询状态
        memset(sBuf,0,1000);
        memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
        port.Write(sBuf, (DWORD) strlen(sBuf));    
        Sleep(1000);
        // 读取返回值,判断是否处于OLIVETTI打印状态
        memset(sRxBuf,0,10);
        port.Read(sRxBuf,10);
        port.TerminateOutstandingReads();
        MessageBox("请放打印纸张!");
        Sleep(2000);
       }
                else
       {
        MessageBox("请选择OLIVETTI PR2E打印机!");
        str = "\x1b\x30"; //总清
        memset(sBuf,0,1000);
        memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
        port.Write(sBuf, (DWORD) strlen(sBuf));

        str = "\x1b\x25\x41"; //置位PORT A [BP8901 默认为PORT A]
        memset(sBuf,0,1000);
        memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
        port.Write(sBuf, (DWORD) strlen(sBuf));
        
        port.ClearDTR();
        
        port.ClearRTS();
        
        port.SetDTR();
        
        port.SetRTS();
        
        port.SetXOFF();
        
        port.SetXON();
        
        COMMPROP properties;
        port.GetProperties(properties);
        
        port.ClearWriteBuffer();
        
        port.ClearReadBuffer();
        
        port.Flush();
        
        port.Close();
        return;
       }
       
      }
     

      str = "\x1c\x26"; //设置中西文兼容格式
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));

      str = "\x1bL015"; //绝对垂直位置
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
      
      str = "\x1bH005"; //绝对水平位置
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
      

      CString strText1 = "AAAAAAAAAAAAAAAAAAAAAAAA";
      str = strText1;
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
      
      str = "\x1bL016"; //绝对垂直位置
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
      
      str = "\x1bH005"; //绝对水平位置
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
      

      CString strText2 = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBB";
      str = strText2;
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));

      str = "\x1c\x2e"; //设置取消中西文兼容格式
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));

      str = "\x1bO"; //退纸
      memset(sBuf,0,1000);
      memcpy(sBuf,str.GetBuffer(str.GetLength()),str.GetLength());
      port.Write(sBuf, (DWORD) strlen(sBuf));
          
      port.ClearDTR();
      
      port.ClearRTS();
      
      port.SetDTR();
      
      port.SetRTS();
      
      port.SetXOFF();
      
      port.SetXON();
      
      COMMPROP properties;
      port.GetProperties(properties);
      
      port.ClearWriteBuffer();
      
      port.ClearReadBuffer();
      
      port.Flush();
      
      port.Close();
      
      
     }
     catch (CSerialException* pEx)
     {
      TRACE(_T("Handle Exception, Message:%s\n"), pEx->GetErrorMessage());
      pEx->Delete();
     }
     
     delete [] pBuf;

     // 说明
    \x1bl        清错
    \x1bn\x1bQ080\x1bZ\x1b.                     初始化打印机
    \x1bj                 主机询问打印机状态
    \x07                  声音提示
    \x1b J004        设置左边界为4个字符
    x1b&85   设置行距为85/240英寸或者85/216英寸
    \x1b<    设置打印字距为10字符/英寸
    \x1bUc   打印机进纸控制

     

    // 串口调式工具下载:http://download.it168.com/07/0705/07051.shtml

      SUDT SerialTrace 是一款用于侦听、拦截、记录、分析RS232/422/485串行接口通信协议的专业软件。它适用于串行口相关的软硬件开发、测试工程师。
     
      SUDT SerialTrace 可以让您对串行口的命令和数据进行全方位的侦听、拦截、保存,为日后的数据导入、仿真、分析提供了便利。
     
      SUDT SerialTrace 为用户提供了仿真功能,双击拦截到的读写数据,即可被自动复制到仿真终端的发送窗口,便于用户修改以及模拟测试。

      SUDT SerialTrace 支持串行中继功能,利用计算机的两个串口分别与两台设备互联,可拦截两台设备间的通信信息。

      SUDT SerialNull 是一款虚拟串口的专业配置工具,主要用于模拟RS232串口的虚拟连接,适用于串行口相关的软硬件开发、测试工程师。

      SUDT SerialNull 可以在不占用真实串口的情况下,创建任意数量并互为连接的纯虚拟串口对。

      SUDT SerialNull 在系统中所创建的虚拟串口在功能以及使用上与真实物理串口一致。

      SUDT SerialRemap 是一款专业的串口映射(重定向)工具,允许将指定的物理串口或虚拟串口的数据映射(重定向)到本工具所创建的虚拟串口。例如:系统中存在com9 (该串口为物理串口或虚拟串口) ,但是串口应用程序仅支持com1-com4,此时可以使用SerialRemap创建一个端口号在com1-com4之间的虚拟串口,该虚拟串口会自动将数据映射(重定向)到com9。SerialRemap 在系统中所创建的虚拟串口在功能以及使用上与真实物理串口一致。

    AccessPort 串口调试器免费软件

    强大的数据拦截功能
    可以将指定端口的数据流、控制流信息拦截并保存下来,供分析之用。如察看端口状态的变化(波特率、数据位、校验位、停止位),拦截上行、下行的数据,处理速度快,拦截效率高。
    简单、易用的数据调试功能
    简洁的界面布局,高度易用的设计,支持手动发送、自动发送、传输文件、后台接收数据等功能,各种操作一目了然。
    调试过程中可动态改变端口参数
    在不改变当前端口的前提下,可以动态的修改指定参数,如:波特率、数据位、校验位、停止位、流控制等,增强了调试的灵活性。
    十六进制、字符形式--双模式切换功能
    数据接收区、发送区都具有UtralEdit的双模式切换功能,便于数据的编辑以及显示,全面支持Unicode,解决了编辑和显示时十六进制、字符形式难于相互切换的难题。
      多国语言支持,国际版本
    目前支持简体中文、繁体中文、英文三种语言,国际化的设计使得程序很容易实现语言本地化

    http://www.sudt.com

     

    发表于 @ 2006年12月15日 20:19:00|评论(loading...)|编辑|收藏

    新一篇: Olivetti PR2/PR2E 打印机参数设置  | 旧一篇: Olivetti PR2/PR2E 打印机故障分析与排除

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © byxdaz