217 lines
6.8 KiB
C#
217 lines
6.8 KiB
C#
using AR;
|
|
using ENIG;
|
|
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;
|
|
|
|
namespace SampleProject
|
|
{
|
|
enum messageType
|
|
{
|
|
rx,
|
|
tx,
|
|
normal,
|
|
error
|
|
}
|
|
public partial class Form1 : Form
|
|
{
|
|
|
|
System.IO.Ports.SerialPort dev;
|
|
EEProtocol proto;
|
|
Dictionary<string, byte> idlist;
|
|
public Form1()
|
|
{
|
|
InitializeComponent();
|
|
this.Text = $"Amkor ENIG Protocol Test (PanID:46A5, CH:17)";
|
|
proto = new EEProtocol();
|
|
proto.OnDataReceived += Proto_OnDataReceived;
|
|
proto.OnMessage += Proto_OnMessage;
|
|
dev = new System.IO.Ports.SerialPort();
|
|
dev.ReadTimeout = 2000;
|
|
dev.WriteTimeout = 1000;
|
|
dev.DataReceived += (s1, e1) =>
|
|
{
|
|
var buffer = new byte[dev.BytesToRead];
|
|
dev.Read(buffer, 0, buffer.Length);
|
|
proto.ProcessReceivedData(buffer);
|
|
};
|
|
|
|
idlist = new Dictionary<string, byte>();
|
|
idlist.Add("ACS", 0);
|
|
idlist.Add("AGV1", 10);
|
|
idlist.Add("AGV2", 11);
|
|
idlist.Add("BUFFER1", 20);
|
|
idlist.Add("BUFFER2", 21);
|
|
idlist.Add("BUFFER3", 22);
|
|
idlist.Add("BUFFER4", 23);
|
|
idlist.Add("BUFFER5", 24);
|
|
idlist.Add("DOOR", 30);
|
|
|
|
this.cmbid.Items.Clear();
|
|
foreach (var item in idlist)
|
|
cmbid.Items.Add($"{item.Key}");
|
|
|
|
tbCmd.Text = "FF";
|
|
tbmsg.Text = string.Empty;
|
|
}
|
|
|
|
private void Proto_OnDataReceived(object sender, EEProtocol.DataEventArgs e)
|
|
{
|
|
var hexstrRaw = e.ReceivedPacket.RawData.HexString();
|
|
var hexstr = e.ReceivedPacket.Data.HexString();
|
|
var cmd = e.ReceivedPacket.Command.ToString("X2");
|
|
var id = e.ReceivedPacket.ID.ToString("X2");
|
|
AddMessage($"{hexstrRaw}\nID:{id},CMD:{cmd},DATA:{hexstr}", messageType.rx);
|
|
}
|
|
private void Proto_OnMessage(object sender, EEProtocol.MessageEventArgs e)
|
|
{
|
|
AddMessage(e.Message);
|
|
}
|
|
|
|
void AddMessage(string msg, messageType type = messageType.normal)
|
|
{
|
|
if(this.InvokeRequired)
|
|
{
|
|
this.BeginInvoke(new Action(() => AddMessage(msg, type)));
|
|
return;
|
|
}
|
|
|
|
if (type == messageType.rx)
|
|
{
|
|
rtRx.AppendText($"<{DateTime.Now.ToString("HH:mm:ss")} RX> {msg}\r\n");
|
|
rtRx.ScrollToCaret();
|
|
}
|
|
else if (type == messageType.tx)
|
|
{
|
|
rtTx.AppendText($"<{DateTime.Now.ToString("HH:mm:ss")} TX> {msg}\r\n");
|
|
rtTx.ScrollToCaret();
|
|
}
|
|
else
|
|
{
|
|
rtMsg.AppendText($"<{DateTime.Now.ToString("HH:mm:ss")} > {msg}\r\n");
|
|
rtMsg.ScrollToCaret();
|
|
}
|
|
}
|
|
|
|
private void Form1_Load(object sender, EventArgs e)
|
|
{
|
|
cmbport.Items.Clear();
|
|
foreach (var item in System.IO.Ports.SerialPort.GetPortNames())
|
|
{
|
|
cmbport.Items.Add(item);
|
|
}
|
|
cmbport.Text = "COM11";
|
|
if (cmbport.Items.Count > 0) cmbport.SelectedIndex = 0;
|
|
if (cmbid.Items.Count > 0) cmbid.SelectedIndex = 0;
|
|
LoadCmds();
|
|
this.timer1.Start();
|
|
}
|
|
|
|
private void btconnect_Click(object sender, EventArgs e)
|
|
{
|
|
var port = cmbport.Text.Trim();
|
|
var buid = tbbaud.Text.toInt();
|
|
if(dev.IsOpen)
|
|
{
|
|
dev.Close();
|
|
AddMessage("port closed");
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
this.dev.PortName = port;
|
|
this.dev.BaudRate = buid;
|
|
dev.Open();
|
|
AddMessage("port opened");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddMessage(ex.Message, messageType.error);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private void timer1_Tick(object sender, EventArgs e)
|
|
{
|
|
sbPort.Text = $"{dev.PortName}:{dev.BaudRate} {(dev.IsOpen ? "Open" : "Closed")}";
|
|
}
|
|
|
|
private void tbmsg_TextChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void btsend_Click(object sender, EventArgs e)
|
|
{
|
|
//send to device
|
|
var msg = tbmsg.Text.Trim();
|
|
var id = this.idlist[cmbid.Text];
|
|
var cmdHex = this.tbCmd.Text.Trim();
|
|
byte cmd = Convert.ToByte(cmdHex, 16);
|
|
byte[] msgBytes = Encoding.ASCII.GetBytes(msg); // 메시지를 byte 배열로 변환
|
|
|
|
var data = proto.CreatePacket(id, cmd, msgBytes);
|
|
SendToDevice(data);
|
|
}
|
|
|
|
void SendToDevice(byte[] packet)
|
|
{
|
|
if (dev.IsOpen == false)
|
|
{
|
|
AddMessage("port closed", messageType.error);
|
|
}
|
|
else
|
|
{
|
|
dev.Write(packet, 0, packet.Length);
|
|
var hexstring = packet.HexString();
|
|
AddMessage(hexstring, messageType.tx);
|
|
}
|
|
|
|
}
|
|
|
|
private void btsim_Click(object sender, EventArgs e)
|
|
{
|
|
//packet test
|
|
var msg = tbmsg.Text.Trim();
|
|
var id = this.idlist[cmbid.Text];
|
|
var cmdHex = this.tbCmd.Text.Trim();
|
|
byte cmd = Convert.ToByte(cmdHex, 16); // 16진수 문자열을 byte로 변환
|
|
byte[] msgBytes = Encoding.ASCII.GetBytes(msg); // 메시지를 byte 배열로 변환
|
|
|
|
var data = proto.CreatePacket(id, cmd, msgBytes);
|
|
this.proto.PacketTest(data);
|
|
}
|
|
string fn = "cmds.rtf";
|
|
private void btSave_Click(object sender, EventArgs e)
|
|
{
|
|
System.IO.File.WriteAllText("cmds.rtf", rtCmd.Rtf, System.Text.Encoding.Default);
|
|
}
|
|
|
|
private void btload_Click(object sender, EventArgs e)
|
|
{
|
|
LoadCmds();
|
|
}
|
|
|
|
void LoadCmds()
|
|
{
|
|
var fi = new System.IO.FileInfo("cmds.rtf");
|
|
if (fi.Exists == false)
|
|
{
|
|
AddMessage("no cmds file", messageType.error);
|
|
return;
|
|
}
|
|
var data = System.IO.File.ReadAllText("cmds.rtf", System.Text.Encoding.Default);
|
|
rtCmd.Rtf = data;
|
|
}
|
|
}
|
|
}
|