在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.首先要引用 System.IO.Ports 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 System.IO.Ports; using System.Threading; namespace FrmScanProt { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //APICloud //app string text = ""; SerialPort sp = new SerialPort(); delegate void UpdateTextEventHandler(string text); //委托,此为重点. UpdateTextEventHandler updateText; //事件 private void Form1_Load(object sender, EventArgs e) { AddParameters(); string[] itemName = SerialPort.GetPortNames(); //获取当前计算机串型端口名称数组. cboPortName.Items.Clear(); foreach (var item in itemName) { cboPortName.Items.Add(item); } cboPortName.SelectedIndex = 0; cboBaudRate.SelectedIndex = 1; cboDataBit.SelectedIndex = 3; cboParityBit.SelectedIndex = 0; cboStopBit.SelectedIndex = 1; updateText += new UpdateTextEventHandler(UpdateTextBox); //委托方法 sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //处理串口对象的数据接收事件的方法. sp.Close(); lblScan.Text = "未开启采集程序."; } private void button1_Click(object sender, EventArgs e) { if (txtCode.Text != "") { listBox1.Items.Add(txtCode.Text); txtCode.Text = ""; txtCode.Focus(); } else { MessageBox.Show(" 条码不能为空!"); txtCode.Focus(); } } private void btnStartScan_Click(object sender, EventArgs e) { if (!sp.IsOpen) { sp.Open(); //打开一个新的串口连接. lblScan.Text = "采集中..."; txtCode.Focus(); } } private void btnEndScan_Click(object sender, EventArgs e) { if (sp.IsOpen) { sp.Close(); //关闭一个串口连接. lblScan.Text = "采集结束."; txtCode.Focus(); } } /// <summary> /// 串口名称 /// </summary> private void cboPortName_SelectedIndexChanged(object sender, EventArgs e) { sp.PortName = cboPortName.Items[cboPortName.SelectedIndex].ToString(); } /// <summary> /// 波特率(每秒传送字节数) /// </summary> private void cboBaudRate_SelectedIndexChanged(object sender, EventArgs e) { //获取或设置串口波特率 // cboBaudRate.Items.Add(sp.BaudRate); sp.BaudRate = Convert.ToInt32(cboBaudRate.Items[cboBaudRate.SelectedIndex].ToString()); } /// <summary> /// 数据字节 /// </summary> private void cboDataBit_SelectedIndexChanged(object sender, EventArgs e) { //设置每个字节的标准数据长度 sp.DataBits = Convert.ToInt32(cboDataBit.Items[cboDataBit.SelectedIndex].ToString()); } /// <summary> /// 停止位置 /// </summary> private void cboStopBit_SelectedIndexChanged(object sender, EventArgs e) { //设置每个字节的标准停止位数 sp.StopBits =(StopBits)cboStopBit.SelectedIndex; } /// <summary> /// 奇偶位置 /// </summary> private void cboParityBit_SelectedIndexChanged(object sender, EventArgs e) { //设置奇偶校验检查协议 // sp.Parity = Parity.Odd; sp.Parity = (Parity)System.Enum.Parse(typeof(Parity), cboParityBit.SelectedIndex.ToString()); } /// <summary> /// 接收到的数据 /// </summary> private void sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { if(!sp.IsOpen) { MessageBox.Show("请先启用扫描枪采集..."); Thread.Sleep(2000); this.Close(); return; } Thread.Sleep(100); byte[] buffer = Encoding.UTF8.GetBytes(sp.ReadExisting()); string newString = Encoding.UTF8.GetString(buffer); //string readString = sp.ReadExisting();//读取串口对象的流和输入缓冲区所有立即可用的字节流. this.Invoke(updateText, new string[] { newString }); //控件基础句柄的线程上,执行委托. } /// <summary> /// 获取数据. /// </summary> private void UpdateTextBox(string text) { this.txtCode.Text = text; listBox1.Items.Add(txtCode.Text); txtCode.Text = ""; } private void AddParameters() { this.cboBaudRate.Items.AddRange(new object[] { "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200", "128000" }); this.cboDataBit.Items.AddRange(new object[] { "5", "6", "7", "8" }); this.cboStopBit.Items.AddRange(new object[] { "0.5", "1", "1.5", "2" }); this.cboParityBit.Items.AddRange(new object[]{"none","odd","even"}); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); } } }
|
请发表评论