ldj/winform/utils/elelable/port.cs

100 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace Deiniu.win.elelab
{
public class port
{
private SerialPort commPort = new SerialPort();
public delegate void receive_data(byte[] port_data);
public event receive_data port_event;
//初始化端口 使用的时候必须先初始化
//int com_count 端口号 1 - 100
internal bool initPorts(int com_count)
{
commPort.PortName = "COM" + com_count.ToString();
commPort.BaudRate = 9600;
commPort.Parity = Parity.None;// Parity.Even;
commPort.DataBits = 8;
commPort.StopBits = StopBits.One;
commPort.Encoding = Encoding.ASCII;
commPort.WriteBufferSize = 0x5000;
commPort.ReadBufferSize = 0x5000;//by dhwu 150130
commPort.DataReceived += new SerialDataReceivedEventHandler(dataReceived);
commPort.ReceivedBytesThreshold = 1;
try
{
commPort.Open();
}
catch
{
return false;
}
return true;
}
private void dataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] readBuffer = new byte[commPort.BytesToRead];
commPort.Read(readBuffer, 0, readBuffer.Length);
port_event(readBuffer);
}
//发送数据
//byte[] byt 字节数组 发送内容
internal bool writeBytes(byte[] byt)
{//
for (int i = 0; i < byt.Length; i++)
{
if (write_byte(byt[i]) == false)
{
return false;
}
}
return true;
}
private bool write_byte(byte byt)
{
byte[] byt1 = new byte[1];
byt1[0] = byt;
if (commPort.IsOpen)
{
try
{
commPort.Write(byt1, 0, 1);
}
catch
{
return false;
}
while (commPort.BytesToWrite != 0) ;
}
else
{
try
{
commPort.Open();
}
catch
{
return false;
}
if (commPort.IsOpen)
{
try
{
commPort.Write(byt1, 0, 1);
}
catch
{
return false;
}
while (commPort.BytesToWrite != 0) ;
}
}
return true;
}
}
}