Files
ENIG/AGVEmulator/DevXBE.cs
backuppc 90340f4a7d ..
2026-01-06 17:35:34 +09:00

117 lines
3.7 KiB
C#

using ENIG;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace AGVEmulator
{
public class DevXBE : AR.Dev.RS232
{
private EEProtocol proto;
public event EventHandler<EEProtocol.DataEventArgs> ProtocReceived;
public DevXBE()
{
proto = new EEProtocol();
proto.OnDataReceived += Proto_OnDataReceived;
proto.OnMessage += Proto_OnMessage;
}
~DevXBE()
{
proto.OnDataReceived -= Proto_OnDataReceived;
proto.OnMessage -= Proto_OnMessage;
}
public override bool ProcessRecvData(byte[] data)
{
return true;
}
protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
{
//여기서 최초데이터를 파싱한다
remainBuffer = null;
this.proto.ProcessReceivedData(buf);
return false;
}
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");
var dataStr = System.Text.Encoding.Default.GetString(e.ReceivedPacket.Data);
RaiseMessage(MessageType.Recv, $"ID:{id},CMD:{cmd},DATA:{hexstr}");
ProtocReceived?.Invoke(this, e);
}
private void Proto_OnMessage(object sender, EEProtocol.MessageEventArgs e)
{
RaiseMessage(e.IsError, e.Message);
}
/// <summary>
/// 목적지 태그번호 전송
/// </summary>
public void SendGotoTag(byte id, uint tag)
{
//var idSTR = id.ToString("X2");
//var tagSTR = tag.ToString("0000");
//var dataStr = $"{idSTR}{tagSTR}";
var data = new List<byte>();
data.Add(id);
data.AddRange(System.Text.Encoding.Default.GetBytes(tag.ToString("0000")));
Send(ENIGProtocol.AGVCommandHE.Goto, data.ToArray());
}
/// <summary>
/// 카트를 가지러 들어간다
/// </summary>
/// <param name="id"></param>
public void SendPickOn(byte id)
{
var data = new List<byte>();
data.Add(id);
Send(ENIGProtocol.AGVCommandHE.PickOn, data.ToArray());
}
/// <summary>
/// 카트를 내려놓는다
/// </summary>
/// <param name="id"></param>
public void SendPickOff(byte id)
{
var data = new List<byte>();
data.Add(id);
Send(ENIGProtocol.AGVCommandHE.PickOff, data.ToArray());
}
public void SendCurrentPos(byte id, uint tag)
{
var data = new List<byte>();
data.Add(id);
data.AddRange(System.Text.Encoding.Default.GetBytes(tag.ToString("0000")));
Send(ENIGProtocol.AGVCommandHE.SetCurrent, data.ToArray());
}
private void Send(ENIGProtocol.AGVCommandHE Command, byte[] data)
{
byte id = 0;
byte cmd = (byte)Command; //move to target
var packet = proto.CreatePacket(id, cmd, data);
if (WriteData(packet, false))
{
var hexstr =(data == null || data.Any()==false) ? string.Empty : System.Text.Encoding.Default.GetString(data);
RaiseMessage(MessageType.Send, $"ID:{id},CMD:{cmd},DATA:{hexstr}");
}
}
}
}