欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    串口编程的三种方法,以及动态改变串口的校验位.doc

    • 资源ID:70344434       资源大小:21KB        全文页数:5页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    串口编程的三种方法,以及动态改变串口的校验位.doc

    串口编程的三种方法,以及动态改变串口的校验位现在在做一个煤矿的集成项目,这个系统里不仅有我们家的设备(这个好做),而且还有其他两家的设备也要融入我们的系统.如果知道其他两家的设备的通信协议,这事并不困难.往往感觉容易的事情总会出现意外,造意外的原因有可能是:一.干活不认真,二.的确是一个意外.下面我分三步介绍一个以下内容:1.其他家的通信协议2.遇到的问题3.解决办法具体内容:一、其他家的通信协议,大家参考1、第一个厂家的。读实时数据命令:1100 0000+设备地址返回实时数据:下位机(仪表)每次向上位机(PC机)传送16个字节,其中包括15个数据和1个累加和。2、第二个厂家的。读实时数据命令:要实现与仪表通信,主机需向仪表分两步发送控制命令字。然后通过通信中断处理仪表响应数据。分两次发送数据,不同的校验位,中间延时sleep(10);(1) 先把通信协议设置为:Baud_Rate,m,8,1 /校验位是MARK通过串口发送 Address -> 仪表延时(0.01s)(2) 接着把通信协议设置为:Baud_Rate,S,8,1 /校验位是SPACE通过串口发送以下数据到仪表:CommandCode FunCode Data0 Data1 Data2 Data3 Crc_Code ->仪表注:具体协议解析就不介绍了。二、遇到的问题协议解析还不是最重要的问题,遇到的具体问题是,如何动态改变串口的校验位?我分别用三个动态库进行操作的1、用的是JustinIO,这个类其实感觉写的不怎么好,后来对一些内容进行了改进。但是用这个类库,并没有完成动态改变串口校验位的功能,具体代码如下:public Parity ParityBitsetif(hComm!=INVALID_HANDLE_VALUE)this.Parity =(byte)value;DCB dcb=new DCB ();GetCommState(hComm, ref dcb);dcb.Parity =(byte)value;if (!SetCommState(hComm, ref dcb)throw(new ApplicationException("非法操作,不能打开串口!"); getDCB dcb=new DCB ();GetCommState(hComm, ref dcb);return (Communicate.Parity)dcb.Parity ;每次设置完新的Parity ,再获得Parity ,还是NONE.这让我很困惑,以我的判断很可能是DCB的事,但是具体是什么问题,还不太清楚,只能先完成工作再说了。2、第二个我用的是SerialPort,应用在VS2003下的,不如VS2005的功能多。但是基本差上差 不多。最后也没有完成动态改变串口校验位的功能。SerialPort.Parity = System.IO.Ports.Parity.Mark ;SerialPort.Write (addr,0,addr.Length );System.Threading .Thread .Sleep (10);SerialPort.Parity = System.IO.Ports.Parity.Space ;SerialPort.Write (cmd,0,cmd.Length );从代码上看是可以改变串口的校验位的,但是设备并没有返回数据,所以我判断内部并没有真正改变。这个宣告失败。3、第三个是用MSCommLib,最后成功了,代码如下:/打开串口io2.CommPort =4;io2.InputMode =MSCommLib.InputModeConstants .comInputModeBinary ;io2.Settings ="1200,n,8,1"io2.OutBufferCount =0;io2.OutBufferSize =1024;io2.InBufferCount =0;io2.InBufferSize =1024;io2.InputLen =0;io2.PortOpen =true;/发送数据io2.Settings ="1200,m,8,1"io2.Output =addr;System.Threading .Thread .Sleep (10);io2.Settings ="1200,s,8,1"io2.Output =cmd;三,解决办法,MSCommLib应用“项目”“引用”“添加引用”“COM”选卡“MICROSOFT COMM CONTROL 6.0”private static MSCommLib.MSComm io2=new MSCommLib.MSCommClass ();private static void InitCom()tryio2.CommPort =4;io2.InputMode =MSCommLib.InputModeConstants .comInputModeBinary ;io2.Settings ="1200,n,8,1"io2.OutBufferCount =0;io2.OutBufferSize =1024;io2.InBufferCount =0;io2.InBufferSize =1024;io2.InputLen =0;io2.PortOpen =true;Console.WriteLine ("串口打开成功");SendRev2();catch(Exception exce)Console.WriteLine ("串口打开失败");private static void SendRev()byte addr=new byte 0x00;byte cmd=new byte 0x02,0xff,0x00,0x00,0x00,0x00,0x01;DevLMQ.ReceiveProtocol r=null;while(true)io2.Settings ="1200,m,8,1"io2.Output =addr;System.Threading .Thread .Sleep (10);io2.Settings ="1200,s,8,1"io2.Output =cmd;System.Threading .Thread .Sleep (1000);object objin;objin=io2.Input ;byte data=(byte)objin;Console.WriteLine (data .Length .ToString (); SerialPort和JUSTINIO下载:其实 利用MICROSOFT COMM CONTROL 6.0这个可以封装自己的串口类,还可以开发自己的CONSOLE APPLICATION 应用程序。

    注意事项

    本文(串口编程的三种方法,以及动态改变串口的校验位.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开