C_中串口组件的使用方法总结及上位机制作方法.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C_ 串口 组件 使用方法 总结 上位 机制 方法
- 资源描述:
-
请勿转载,我会不断的更新和修改。 修改日志: 1 20091112创建文档 2 20091113发送函数介绍,数据的接收,上位机基本功能的完成 一、创建Windows窗体项目 二、添加SerialPort组件 三、默认产生serialPort1对象 四、设置串口属性 三种方法(本实例用第三种) 1.设置下面的属性 2.代码实现 3.用我封装的一个类来实现 C# 封装了用于对 Serialport类属性的配置类及其保存窗 五、串口操作(打开关闭) 按上述步骤初始化串口之后进行串口的打开和关闭操作 打开关闭串口的函数包含在SerialPort类中,利用SerialPort对象来引用 serialPort1.Open(); serialPort1.Close(); 例如:在程序中添加一个打开串口按钮btn_open,btn_open.Text初始化为"打开串口" 在btn_open响应函数中加入以下代码 private void btn_open_Click(object sender, EventArgs e) { if (btn_open.Text == "打开串口") { btn_open.Text = "关闭串口"; serialPort1.Open(); } else { btn_open.Text = "打开串口"; serialPort1.Close(); } } 此时形成的界面截图如下: 此时程序的代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using AHRSmanager; namespace testOfserialPort { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { } private void btn_SerialportSet_Click(object sender, EventArgs e) { using (串口设置窗口 frmConfig = new 串口设置窗口()) { frmConfig.ShowDialog(); } } private void btn_open_Click(object sender, EventArgs e) { if (btn_open.Text == "打开串口") { 串口设置窗口.ReadSerialPortSet(serialPort1); //串口初始化 btn_open.Text = "关闭串口"; serialPort1.Open(); } else { btn_open.Text = "打开串口"; serialPort1.Close(); } } private void Form1_Load(object sender, EventArgs e) { btn_open.Text = "打开串口"; } } } 这时该程序已经具有开关串口的作用,可以用 单PC机虚拟串口互连方法 介绍的方法进行串口测试(串口互联模式) 运行程序,点击串口配置按钮,进行参数配置,点击打开串口,VSPM就将显示串口的打开和关闭. 六、数据的发送 (一) 十六进制数据发送 使用方法见 C#中用SerialPort类中的Write()方法发送十六进制数 1.为程序添加发送按钮,命名为btn_send,为程序添加文本输入框tb_send 2.在btn_send的回调函数中添加以下代码 private void btn_send_Click(object sender, EventArgs e) { Byte[] BSendTemp = new Byte[1]; //建立临时字节数组对象 BSendTemp[0] = Byte.Parse(this.tb_send.Text);//由文本框读入想要发送的数据 this.serialPort1.Write(BSendTemp, 0, 1);//发送数据 } 3.测试 将串口配置为COM3,打开VSPM和串口调试助手,调试助手为COM4 打开串口COM3,将要发送的数写入输入文本框(0-255),点击发送在串口调试助手中就会出现相应的十六进制数据显示 (二) 字符串数据发送 1 为程序添加CheckBox cB_Hex,如若选中则发送Hex数据,如若未选则发送String数据。 2 将btn_send的响应函数btn_send_Click修改为: private void btn_send_Click(object sender, EventArgs e) { if (this.cB_Hex.Checked == true) { Byte[] BSendTemp = new Byte[1]; //建立临时字节数组对象 BSendTemp[0] = Byte.Parse(this.tb_send.Text);//由文本框读入想要发送的数据 this.serialPort1.Write(BSendTemp, 0, 1);//发送数据 } else { string serialStringTemp = this.tb_send.Text; this.serialPort1.WriteLine(serialStringTemp); } } 3 运行程序,取消Checkbox的选择 4 发送字符串,下面为测试图 5 这里主要利用了WriteLine函数,这个函数在Console中也有定义,用发基本一样。 七、数据的接收 (A)结构介绍 数据的接收大体有两种方案:1 主动定时读取;2 事件响应驱动 1 主动定时读取 这种方式的适应能力较弱,当数据来源为定时并且不是很快的情况时可以考虑采用这种方法,这种方法主要适用于数据采集系统而不适用于随机事件发生时的通信或控制系统。 当然,这种方法的缺点是如果接收的数据不是定时的,则读取定时器的触发频率就要很小,这样才能保证及时的读取串口缓冲区。这也将大大的浪费系统资源。 2 事件响应驱动 这种方式是串口通信上位机制作的主要方式,其采用中断思想而成,当串口输入缓冲区中的字节数据大于某个设定的个数时,触发串口输入中断,这时在中断程序中读取串口输入缓冲区中的数据,具有实时性和灵活性,是个常用的较好的方法。本文也是采用这种方法来进行串口输入缓冲区的实时数据读取。 (B)事件响应驱动下的串口输入缓冲区数据读取 .NET中封装了SerialPort 类 表示串行端口资源。 命名空间: System.IO.Ports 程序集: System(在 System.dll 中) 除了前面用到的串口常规属性设置(BuadRate,PortName),这里用到了一个新的串口属性: ReceivedBytesThreshold 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数。 这个ReceiveBytesThreshold属性即是设置串口输入缓冲区中的数据字节大于ReceiveBytesThreshold时触发DataReceived事件。 用法: <1>在设计器双击串口serialport1的DataReceived事件,在代码中就会自动加入serialPort1_DataReceived函数作为DateReceived的事件触发函数。 <2>作为测试,先将serialport1.ReceiveBytesThreshold设为1,即串口输入缓冲区有数就触发DataReceived事件。 <3>加入RichTextBox rTB_receive作为串口接收数据的显示组件 <4>在DataReceived事件响应函数中读取串口输入缓冲区中的数据 string serialReadString; private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { serialReadString += serialPort1.ReadExisting(); } 这里serialReadString即为读取到串口输入缓冲区的数据。 要想将其显示到RichTextBox rTB_receive中,这里出现了一个跨线程的问题,因为DataReceived事件是在辅助线程中被激发的,所以要将数据显示到rTB_receive的主线程中就要进行一定的处理,处理方法如下: C#中SerialPort类中DataReceived事件GUI实时处理方法 将DataReceived事件响应函数修改为如下: string serialReadString; private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { serialReadString = serialPort1.ReadExisting(); this.rTB_receive.Invoke ( new MethodInvoker ( delegate { this.rTB_receive.AppendText(serialReadString); } ) ); } 这时就可以按字符串收发了! <5> 测试图,打开上位机和调试助手,点击调试助手的发送按钮,上位机就会相应的显示接收到的数据. <6> 这时候就完成了基本上位机功能的编写 至此工程文件: 下载 串口数据的读取还涉及到其他的读取函数, Read 已重载。 从 SerialPort 输入缓冲区中读取。 ReadByte 从 SerialPort 输入缓冲区中同步读取一个字节。 ReadChar 从 SerialPort 输入缓冲区中同步读取一个字符。 ReadExisting 在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。 ReadLine 一直读取到输入缓冲区中的 NewLine 值。 ReadTo 一直读取到输入缓冲区中的指定 value 的字符串。 根据需要自己选择就行了,很简单,就不再啰嗦了。展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




C_中串口组件的使用方法总结及上位机制作方法.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/7821702.html