Dostum öncelikle kolay gelsin geç dönüş yaptığım için kusura bakma ;
Kodlarını revize edip alta yazıyorum çok büyük bir ihtimal çalışacaktır fakat gözden kaçan yerler olabilir öyle bir durum oluşursa teamviewer bağlantısı verirsin özelden bağlanıp bakarım.
Kolay gelsin.
DataReceived tarafında revize yaptım biraz. Timerleri iptal et sadece orayı kullan port bağlantını gerçekleştirdikten sonra. Eğer çapraz iş parçacığı hatası alırsan formun load kısmını şunu yaz ;
Control.CheckForIllegalCrossThreadCalls = false;
Revize edilen kodlar;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace ModbusCom
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
AcikPortlariTara();
}
string sonuc;
public void AcikPortlariTara()
{
string[] AcikComPort = SerialPort.GetPortNames();
ComPort.Items.AddRange(AcikComPort);
}
private void PortAcma_Click(object sender, EventArgs e)
{
try
{
serialPort1.PortName = ComPort.Text;
serialPort1.BaudRate = Convert.ToInt32(Baud.Text);
serialPort1.DataBits = Convert.ToInt16(ComboDataBits.Text);
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None;
serialPort1.Handshake = Handshake.None;
TextboxComStatus.BackColor = Color.LightGreen;
TextboxComStatus.ForeColor = Color.Black;
TextboxComStatus.Text = ComPort.Text;
PortAcma.Enabled = false;
ButtonPortKapa.Enabled = true;
GroupBox_Gelen.Enabled = true;
GroupBox_Gonderilecek.Enabled = true;
Text_Gelen.Enabled = true;
Text_Gonder.Enabled = true;
Button_Gonder.Enabled = true;
serialPort1.Open();
}
catch
{
MessageBox.Show("Port Mesgul veya com bilgilerinde eksiklik");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen==false)
{
serialPort1.Close();
}
}
private void ButtonPortKapa_Click(object sender, EventArgs e)
{
TextboxComStatus.BackColor = Color.Red;
TextboxComStatus.ForeColor = Color.Black;
TextboxComStatus.Text = ComPort.Text;
PortAcma.Enabled = true;
ButtonPortKapa.Enabled = false;
GroupBox_Gelen.Enabled = false;
GroupBox_Gonderilecek.Enabled = false;
Text_Gelen.Enabled = false;
Text_Gonder.Enabled = false;
Button_Gonder.Enabled = false;
serialPort1.Close();
}
private void Button_Gonder_Click(object sender, EventArgs e)
{
serialPort1.Write(":"+Text_Gonder.Text+"\r\n");
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
byte[] buffer;
buffer = new byte[1];
serialPort1.Read(buffer, 0, 0);
sonuc = serialPort1.ReadExisting();
}
catch (Exception)
{
AnaEkranSeriPort.Write("veri yolu hatasi");
}
}
}
}