123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO.Ports;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Honeywell1900扫码枪程序触发
- {
- public partial class Form1 : Form
- {
- SerialPort serialPort1 = new SerialPort();
- delegate void myDelegate(); //委托,此为重点.
- public Form1()
- {
- InitializeComponent();
- }
- private void button3_Click(object sender, EventArgs e)
- {
- serialPort1 = new SerialPort();
- serialPort1.PortName = comboBox1.Text;
- try
- {
- serialPort1.Open();
- serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
- }
- catch (Exception ex)
- {
- label3.ForeColor = Color.Red;
- label3.Text = "打开串口出错";
- //MessageBox.Show("打开串口出错");
- }
- label3.ForeColor = Color.Green;
- label3.Text = "串口已打开";
- }
- private void button4_Click(object sender, EventArgs e)
- {
- if (serialPort1.IsOpen)
- {
- serialPort1.Close();
- label3.ForeColor = Color.Green;
- label3.Text = "关闭串口成功";
- return;
- }
- label3.ForeColor = Color.Black;
- label3.Text = "关闭串口成功";
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Byte[] BSendTemp = HexStringToBytes("16 54 0D");
-
- serialPort1.Write(BSendTemp,0,BSendTemp.Length);//发送数据
-
- }
- private void button2_Click(object sender, EventArgs e)
- {
- Byte[] BSendTemp = HexStringToBytes("16 55 0D");
- this.serialPort1.Write(BSendTemp, 0, BSendTemp.Length);//发送数据
- }
- private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
- {
- textBox1.BeginInvoke(new myDelegate(updateTextBox));
- }
- public void updateTextBox()
- {
- int len = serialPort1.BytesToRead;
- byte[] sbytes = new byte[len];
- serialPort1.Read(sbytes, 0, len);
- textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.000")+"扫到码如下:\r\n"+Encoding.UTF8.GetString(sbytes);
- }
- public static byte[] HexStringToBytes(string hs)
- {
- string[] strArr = hs.Trim().Split(' ');
- byte[] b = new byte[strArr.Length];
- //逐个字符变为16进制字节数据
- for (int i = 0; i < strArr.Length; i++)
- {
- b[i] = Convert.ToByte(strArr[i], 16);
- }
- //按照指定编码将字节数组变为字符串
- return b;
- }
- private string receive_data = "";
- private void button6_Click(object sender, EventArgs e)
- {
- receive_data = "34";
- }
- private void button5_Click(object sender, EventArgs e)
- {
- Task.Factory.StartNew(()=> {
- bool ret = TimeoutGetValue(ref receive_data, 4000);
- if (ret)
- {
- System.Diagnostics.Trace.WriteLine(ret+ receive_data);
- receive_data = "";
- }
- else
- {
- System.Diagnostics.Trace.WriteLine("获取超时");
- }
- });
-
- }
- /// <summary>
- /// 用来获取data变量的值,并设置超时时间
- /// </summary>
- /// <param name="data">ref 传递变量</param>
- /// <param name="timeout">超时时间</param>
- /// <returns></returns>
- private bool TimeoutGetValue(ref string data,int timeout)
- {
- int i_count = 0;
- int all_count = timeout / 200;
- while (data.Equals("") && i_count <all_count)
- {
- i_count++;
- Thread.Sleep(200);
- }
- if (data.Equals(""))
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- }
- }
|