16 Mart 2018 Cuma

SerialPort Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.IO.Ports;
Constructor
Şöyle yaparız. Bu durumda Port + BaudRate vs. gibi alanlara değer atayıp, daha sonra Open() metodu çağrılır.
System.ComponentModel.IContainer components =
 new System.ComponentModel.Container();
SerialPort serialPort = new SerialPort(components);
Constructor - String
Şöyle yaparız.
SerialPort serialPort = new SerialPort("COM19");
Constructor - String + Speed
Şöyle yaparız.
string port  = ...;
SerialPort serialPort = new SerialPort(port, 9600);
Constructor - String + Speed + Parity + Databit
Şöyle yaparız.
String COMPort, int Baudrate, Parity Parity, int Databit)
SerialPort serialPort = new SerialPort(COMPort, Baudrate, Parity, Databit);
Şöyle yaparız.
SerialPort serialPort = ;
  new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
Close metodu
Şöyle yaparız.
serialPort.Close();
BytesToRead Alanı
Okumaya hazır kaç byte olduğunu verir.Şöyle yaparız.
if(serialPort.BytesToRead != 100)           
{
  ...
} 
BaudRate Alanı
Açıklaması şöyle.
Baud rate is the rate of individual bit times or slots for symbols. Not all slots necessarily carry data bits, and in some protocols, a slot can carry multiple bits. Imagine, for example, four voltage levels used to indicate two bits at a time.

Bit rate is the rate at which the actual data bits get transferred. This can be less than the baud rate because some bit time slots are used for protocol overhead. It can also be more than the baud rate in advanced protocols that carry more than one bit per symbol.
Ayrıca
The baud rate is almost always much less than the bit rate.
Şöyle yaparız.
serialPort.BaudRate = 115200;
Şöyle yaparız.


serialPort.BaudRate = 9600;
DataBits Alanı
Şöyle yaparız. 5 ve 6 bit veri büyüklükleri çok eskiden kullanılırdı.
serialPort.DataBits = 8;
DataReceived Event'i
Açıklaması şöyle.
The DataReceived event is raised on a secondary thread when data is received from the SerialPort object
Handler'ı bağlamak için şöyle yaparız.
serialPort.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
Aşağıdaki örneklerden hangisini kullanırsak kullanalım UI'a geçmek için BeginInvoke() çağrılır. Şöyle yaparız.
private void OnDataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
  string InputData = ComPort.ReadLine();
  if (InputData != String.Empty)
  {
    this.Invoke(st,new object[] { InputData});
  }
}
Örnek - ReadExisting ile
Metod şöyledir.
void OnDataReceived(object sender, SerialDataReceivedEventArgs e){
  SerialPort sp = (SerialPort)sender;
  string indata = sp.ReadExisting();
  ...
}
Örnek - Read ile
Sabit boydaki veriyi okumak için şöyle yaparız.
const int MessageSize = 256;
byte[] buf = new byte[MessageSize];
int offset = 0;


void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{

  SerialPort port = (SerialPort)sender;
  try
  {
    offset += port.Read(buf, offset, MessageSize - offset);

    if(offset == MessageSize)
    {
      //Full
      ...
      offset = 0;
    }
  }
  catch (Exception ex)
  {
    ...
  }
}
Örnek - BytesToRead ile
Aynı şeyi şöyle de yapabiliriz.
void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
  int dataLength =  serialPort.BytesToRead;
  byte[] data = new byte[dataLength];
  int nbrDataRead = serialPort.Read(data, 0, dataLength);
  ...
}
Örnek - BaseStream ile
Aynı şeyi şöyle de yapabiliriz. Bu sefer nesnenin içindeki BaseStream'i kullanıyoruz.
void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
{
  byte[] buff = new byte[9600];
  int readByteCount = serialPort.BaseStream.Read(buff, 0, serialPort.BytesToRead);
  ...
}
DiscardInBuffer metodu
Şöyle yaparız.
serialPort.DiscardInBuffer();
DiscardOutBuffer metodu
Şöyle yaparız.
serialPort.DiscardOutBuffer();
DtrEnable Alanı
Şöyle yaparız.
serialPort.DtrEnable = true;
GetNames metodu
Şöyle yaparız.
string[] ports = SerialPort.GetPortNames();
HandShake Alanı
Şöyle yaparız.
serialPort.Handshake = Handshake.None;
IsOpen Alanı
Şöyle yaparız.
if (serialPort1.IsOpen){...}
Open metodu
Şöyle yaparız.
serialPort.Open();
Parity Alanı
Şöyle yaparız.
serialPort.Parity = Parity.None;
Şöyle yaparız.
serialPort.Parity = Parity.Odd;      
Şöyle yaparız.
serialPort.Parity = Parity.Even;      
PortName Alanı
Şöyle yaparız.
serialPort1.PortName = "COM4";
ReadExisting metodu
Şöyle yaparız.
string indata = serialPort.ReadExisting();
ReadLine metodu
Şöyle yaparız.
string returnMessage = serialPort.ReadLine();
ReadTimeout Alanı
Şöyle yaparız.
serialPort.ReadTimeout = 400;
StopBits Alanı
Şöyle yaparız.
serialPort.StopBits = StopBits.One;
WriteLine metodu
String yazabilmemizi sağlar. Şöyle yaparız
serialPort.WriteLine("ATE1" + "\r");
WriteTimeout Alanı
Şöyle yaparız.
serialPort.WriteTimeout = 400;

Hiç yorum yok:

Yorum Gönder