如何使用C# 进行串口的读写,请详细点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用C# 进行串口的读写,请详细点相关的知识,希望对你有一定的参考价值。
用C# 对串口进行读写,我希望有注释详细点,最好是个人的,网上粘贴的也行,但是我希望我问你能讲明白。
一、C#串口操作之读取串口数据:try axMSComm2.CommPort = 1i; axMSComm2.InputMode = MSCommLib.InputModeConstants.comInputModeBinary; //用于设置或返回传输数据的类型, //此例程是通过Input属性以二进制方式检取回数据 axMSComm2.PortOpen = true; //打开端口 axMSComm2.InBufferCount = 0; //用于返回输入缓冲区内的等待读取得字节个数 catch (Exception e) MessageBox.Show(e.ToString()); 在axMSComm的OnComm事件里写: private void axMSComm2_OnComm(object sender, EventArgs e) switch (axMSComm2.CommEvent) //查询CommEvent属性 case (short)(MSCommLib.OnCommConstants.comEvReceive): //当接收缓冲区内字符数达到RThreshold值, //进入CommData()子程序 CommData(); //接收缓冲区内数据 break; private void CommData() //接收数据 int BufferDataNumStart = 0; //定义第一次查询缓冲区内数据个数 int BufferDataNumEnd = 0; //定义最后一次查询缓冲区内数据个数 byte[] CommBufferData = new byte[1024]; byte[] ComByte = new byte[8]; BufferDataNumStart = axMSComm2.InBufferCount; ; //将缓冲区内等待读取的字节个数赋给BufferDataNumStart if (BufferDataNumStart == 0) return; //如果缓冲区为空,说明还没有数据传来, //则返回;若不为空,进入下面的循环 //读取缓冲区内全部内容 axMSComm2.InputLen = 0; while (true) System.Threading.Thread.Sleep(50); //延时,以确保数据完全接收 BufferDataNumEnd = axMSComm2.InBufferCount; //再次读取缓冲区内字节个数 if (BufferDataNumStart == BufferDataNumEnd) break; //如果BufferDataNumStart==BufferDataNumEnd, //说明本帧数据已经读完,退出循环 BufferDataNumStart = BufferDataNumEnd; //否则,将BufferDataNumEnd赋给BufferDataNumStart, //并继续循环,直到完全接收 object objIn; objIn = axMSComm2.Input; //这里注意MSComm.Input返回的是一个object的类型, //所以必须使用显式的类型转换 CommBufferData = (byte[])objIn; //CommBufferData为串口缓冲区内所有数据 //存取最后一次接收到的缓冲区的数据, //存储部分时作为后期数据处理所用, //以便于程序员分析数据。使用StreamWriter, //需在添加命名控件using System.IO; //将上次未处理的数据和本次存储数据在ReceivedData相连, //此部分是防止发送过来的数据本身就不完整, //以至于数据处理不能进行完全,故保留并与新接收的数据相连 for (int i = 0; i < BufferDataNumEnd; i++) ReceiveDataNum++; UnsettledDataNum++; ReceivedData[ReceiveDataNum - 1] = CommBufferData[i]; //进入数据处理字程序 private void DealData() //数据处理 for (int i = 0; i < ReceivedData.Length - 7; i++) if (ReceivedData[i] == 0xff && ReceivedData[i + 1] == 0x04)判断通讯头 zhou++; INTzhouzhong[zhou] = int.Parse(ReceivedData[i + 4].ToString("X")) * 10000 + int.Parse(ReceivedData[i + 3].ToString("X")) * 100 + int.Parse(ReceivedData[i + 2].ToString("X")); ReceiveDataNum = 0; UnsettledDataNum = 0; 二、C#串口操作之发送数据 try axMSComm1.CommPort = zifuchuankou; axMSComm1.Settings = "9600,N,8,1"; axMSComm1.PortOpen = true; catch MessageBox.Show("COM3初始化失败!"); byte[] b1 = 0x0A, 0x46, 0x31, 0x31, 0x31, 0x2E, 0x31, 0x0D ; axMSComm1.Output = b3; 参考技术A http://blog.csdn.net/yefanqiu/archive/2007/11/21/1897039.aspx我觉得这个写的不错。在C#后台调用window.open,,并且传递参数。。怎么写 啊?? 我是菜鸟,请详细点
参考技术A 帅哥,你要搞清楚,前台和后台的区别哦,后台程序是在iis服务器收到请求数据处理时运行的,
前台脚本是客户机器上ie显示html时运行的,
后台程序和前台脚本是运行在不同的电脑上的哦,你所说的在后台调用window.open,我理解你是要在更新页面后弹出一个窗口对不?,如果是的话可以在页面程序cs里,调用ScriptManager向前台注册启动运行脚本,脚本内容为window.open(.....);这样当用户的ie窗口刷新到该页面时就会自动弹出一个新的ie窗口了, 参考技术B <script type="text/javascript">
function winopen(p_name,p_listid)
var url ="datalistshow.aspx?name="+p_name+"&listid=" +p_listid;
window.showModalDialog(url,'',"dialogWidth=800px;dialogHeight=500px");
</script> Page.ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>winopen('" +参数1 + "','" +参数2+ "');</script>");来自:求助得到的回答本回答被提问者采纳 参考技术B 不明
以上是关于如何使用C# 进行串口的读写,请详细点的主要内容,如果未能解决你的问题,请参考以下文章
C#,Csharp,多串口如何后台运行,如何把数据写入数据库的问题