Sei sulla pagina 1di 4

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 PLC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

hexaconvert konversi = new hexaconvert();


LeftRightMid Ambil = new LeftRightMid();
FormatString translate = new FormatString();

string[] portNames = System.IO.Ports.SerialPort.GetPortNames();


string terima, lrc_xor, pack_str, lrc_wr, pack_wr;
string bcc_read = "30 31 52 58 50 30";
string bcc_write = "30315758533020";
string packet, buffer, buff2, buff3, total_write, sv_wr;
byte[] packs, packs_wr;
int rd_data, fin_data2, flag;
int count, sum_data, x_axis;
string cb1, cb2;

private void Form1_Load(object sender, EventArgs e)


{
timer1.Enabled = false;
serial.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(DataReceived);
for (int i = 0; i <= portNames.Length - 1; i++)
{

CB.Items.Add(portNames[i]);
}
}

private void DataReceived(object sender,


System.IO.Ports.SerialDataReceivedEventArgs e)
{
rf1.BeginInvoke(new transfer(updatedata));

public delegate void transfer();


public void updatedata()
{
if (flag == 1)
{
terima = serial.ReadExisting();
buffer += konversi.StringASCIIToHex(terima);
//if (buffer.Length >= 1000) { rf1.Text.Remove(1);
}
rf1.Text = buffer.Replace(" ", "");
packet =
konversi.ConvertHexToString(Ambil.Left(Ambil.Right(buffer.Replace(" ", ""), 14),
8));
if (Ambil.Right(packet, 2) == "RX")
{
buff2 = "0000";
}
else { buff2 = packet; }

try
{
rd_data = translate.ConvertToDecimal(buff2);
sum_data += rd_data;
if (rd_data > 0) { count++; }

}
catch { }

if (count >= 3)
{
fin_data2 = sum_data / (count);
buff3 = Convert.ToString(fin_data2);
fin_data2 = 0;
sum_data = 0;
count = 0;
}

WW.Text = buff3;
//chart1.Series["Heat1"].Points.AddXY(x_axis - 1,
Convert.ToInt32(buff3));
}

private void Connect_Click(object sender, EventArgs e)


{
serial.PortName = CB.Text;
serial.BaudRate = 4800;
serial.DataBits = 8;
serial.StopBits = System.IO.Ports.StopBits.One;
serial.DiscardNull = false;
serial.Open();
}

private void Disconnect_Click(object sender, EventArgs e)


{
timer1.Enabled = true;
serial.Close();
}

private void Read_Click(object sender, EventArgs e)


{
flag = 1;
timer1.Enabled = false;
}
private void Write_Click(object sender, EventArgs e)
{
flag = 2;
timer1.Enabled = true;
//chart1.Series[0].Points.Clear();
rf1.Clear();
terima = "";
x_axis = 0;
sv_wr = konversi.charToHex(SV1.Text + SV2.Text + SV3.Text + SV4.Text);

total_write = bcc_write + sv_wr;


lrc_wr = GetChecksum(total_write);
pack_wr = "02" + total_write.Replace(" ", "") + lrc_wr;
packs_wr = konversi.ConvertHexStringToByteArray(pack_wr);

ceksum.Text = "BCC LRC= " + lrc_wr;


serial.Write(packs_wr, 0, packs_wr.Length);
serial.Write(packs_wr, 0, packs_wr.Length);
WW.Text = "00";
ADDR.Text = sv_wr;
ADDR2.Text = pack_wr;

private string GetStringFromHex(string s)


{
string result = "";
string s2 = s.Replace(" ", "");
for (int i = 0; i < s2.Length; i += 2)
{
result += Convert.ToChar(int.Parse(s2.Substring(i, 2),
System.Globalization.NumberStyles.HexNumber));
}
return result;
}

private string GetChecksum(string s)


{
int ceksum = 0;
foreach (char c in GetStringFromHex(s))
{
ceksum ^= Convert.ToByte(c);
}
return ceksum.ToString("X2");
}

private void timer1_Tick(object sender, EventArgs e)


{
lrc_xor = GetChecksum(bcc_read);
pack_str = "02" + bcc_read.Replace(" ", "") + lrc_xor;
packs = konversi.ConvertHexStringToByteArray(pack_str);
ceksum.Text = "BCC LRC= " + lrc_xor;
serial.Write(packs, 0, packs.Length);
serial.Write(packs, 0, packs.Length);
x_axis++;
}
}
}

Potrebbero piacerti anche