SerialPort实现与地磅通信
来源:互联网 发布:软件销售是卖软件吗 编辑:程序博客网 时间:2024/04/27 14:28
1.拖一个serialPort 命名sp。
2.
.关键在于DataReceived事件的处理
.波特率设定与仪表设置一致:1200
.ReadBufferSize可设置为通信协定的数据长度:12
.注意起始与结束编码:0x02, 0x03
.Invoke实现委托,使得辅助线程修改主线程控件内容(也可以设置CheckForIllegalCrossThreadCalls直接跨线程作业)
(参考:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html )
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.IO.Ports;
- using System.Threading;
- namespace WMS.SD.DeliveryGoods
- {
- public partial class frmUpLoad : Form
- {
- private delegate void HandleInterfaceUpdateDelegate(string aString);
- HandleInterfaceUpdateDelegate interfaceUpdateHandle;
- static string strReceive; // 接收到数据的缓冲区
- public frmUpLoad()
- {
- InitializeComponent();
- }
- private void frmUpLoad_Load(object sender, EventArgs e)
- {
- //是否允许跨线程访问
- // CheckForIllegalCrossThreadCalls = false;
- interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(ShowText);
- try
- {
- if (!sp.IsOpen)
- {
- sp.Open();//打开串口方法
- }
- btnGetWeight.Enabled = false;
- }//抛出异常
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message.ToString());
- }
- }
- private void ShowText(string aString)
- {
- //根据通信数据规格显示数据
- this.lblData.Text = aString.Substring(1, 5) + "." + aString.Substring(5, 1);
- }
- private void btnGetWeight_Click(object sender, EventArgs e)
- {
- try
- {
- btnGetWeight.Enabled = false;
- if (!sp.IsOpen)
- {
- Thread.Sleep(5000);
- sp.Open();//打开串口方法
- }
- }//抛出异常
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message.ToString());
- }
- }
- private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
- {
- try
- {
- //取得第一个字节
- if (sp.IsOpen)
- {
- byte firstbyte = Convert.ToByte(sp.ReadByte());
- //判断第一个字节是否是起始位:16进制的0x02
- if (firstbyte == 0x02)
- {
- //定义接收数据长度
- int bytesRead = sp.ReadBufferSize;
- //数据接收字节数组
- byte[] bytesData = new byte[bytesRead];
- //接收字节
- byte byteData;
- for (int i = 0; i <= bytesRead - 1; i++)
- {
- try
- {
- if (sp.IsOpen)
- {
- byteData = Convert.ToByte(sp.ReadByte());
- //判断数据结束字节
- if (byteData == 0x03)
- {
- break;
- }
- bytesData[i] = byteData;
- }
- }
- catch (Exception ex)
- {
- // MessageBox.Show( ex.Message + ex.GetType().FullName);
- }
- }
- //将字节数组转换成字符串
- strReceive = System.Text.Encoding.Default.GetString(bytesData);
- //this.lblData.Text = strReceive.Substring(1, 5) + "." + strReceive.Substring(5, 1);
- // Invoke(interfaceUpdateHandle, strczData);
- BeginInvoke(interfaceUpdateHandle, strReceive);
- }
- }
- }
- catch (Exception ex)
- {
- // MessageBox.Show(ex.Message + ex.GetType().FullName);
- }
- }
- private void btnexit_Click(object sender, EventArgs e)
- {
- if (sp.IsOpen)
- {
- sp.DiscardInBuffer();
- sp.Close();
- }
- this.Close();
- }
- private void btnreset_Click(object sender, EventArgs e)
- {
- try
- {
- if (sp.IsOpen)
- {
- sp.DiscardInBuffer();
- sp.Close();
- }
- this.lblData.Text = "";
- btnGetWeight.Enabled = true;
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void frmUpLoad_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (sp.IsOpen)
- {
- sp.DiscardInBuffer();
- sp.Close();
- }
- }
- }
- }
- SerialPort实现与地磅通信
- 自定义串口通信类的实现(SerialPort)
- 在VC中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- SerialPort类实现串口通信时遇到的多线程问题
- 在C#中使用SerialPort类实现串口通信
- c#serialport类实现串口通信的源代码
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- 在C#中使用SerialPort类实现串口通信
- C#中使用SerialPort类实现串口通信
- C#serialport类实现串口通信的源代码
- Continuous Integration: Improving Software Quality and Reducing Risk
- lisp语言概述
- 长尾管理软件市场怎么做-我看E-CELL
- STL 之Sort
- Web Bloopers: 60 Common Web Design Mistakes, and How to Avoid Them
- SerialPort实现与地磅通信
- AJAX应用解决一些常见问题
- Javascript的scrollIntoView方法,控制页面锚点
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?
- 中国与印度软件工程师之比较
- Flex Tree组件展开和折叠的方法
- 直播rmvb格式的DVD出来啦,RMDVD携手蓝光战寒冬!
- Freezed header & footer table
- MPEG-Encode