Files
ENIG/Cs_HMI/Project/StateMachine/_Xbee.cs
2025-06-25 17:55:37 +09:00

130 lines
5.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using AR;
using arDev;
using COMM;
namespace Project
{
public partial class fMain
{
private void XBE_ProtocReceived(object sender, ENIG.EEProtocol.DataEventArgs e)
{
//TODO : 기능 처리필요 (XBee 메세지 데이터처리)
//PUB.CheckManualChargeMode() : 수동충전확인
//VAR.BOOL[eVarBool.FLAG_AUTORUN] : 자동실행
//PUB.Speak("현재 위치는 QA 입니다.") : 음성출력
//ACS 수신 데이터 처리(타 장비는 확인하지 않는다)
if (e.ReceivedPacket.ID == 0)
{
var data = e.ReceivedPacket.Data;
var dataStr = System.Text.Encoding.Default.GetString(data);
var cmd = (ENIGProtocol.AGVCommands)e.ReceivedPacket.Command;
switch (cmd)
{
case ENIGProtocol.AGVCommands.SetCurrent: //Set Current Position
if (dataStr.Length == 6)
{
var targID = dataStr.Substring(0, 2);
var targstr = dataStr.Substring(2);
if (byte.TryParse(targID, out byte tID))
{
if (PUB.setting.XBE_ID == tID)
{
if (ushort.TryParse(targstr, out ushort tagno))
{
if (PUB.mapctl.SetCurrentPosition(tagno) == true)
{
PUB.log.AddI($"Set Position:{tagno}");
}
else PUB.log.AddE($"Position Set Error:{tagno}");
}
else PUB.log.AddE($"Position Param(tagstr) Error:{dataStr}");
}
else PUB.log.AddI($"Another Target {tID}:{PUB.setting.XBE_ID}");
}
else PUB.log.AddE($"Position Param(targetid) Error:{dataStr}");
}
else PUB.log.AddE($"Position Param Error:{dataStr}");
break;
case ENIGProtocol.AGVCommands.Goto: //move to tag
if (uint.TryParse(dataStr, out uint tagno2))
{
var currPos = PUB.mapctl.agv.CurrentRFID;///.AGVMoveToRFID(;
if (PUB.mapctl.SetTargetPosition(tagno2))
PUB.log.AddI($"New Target {tagno2}");
else
PUB.log.AddE($"Path Error {tagno2}");
}
else PUB.log.AddE($"Path Param Error :{dataStr}");
break;
case ENIGProtocol.AGVCommands.Stop: //stop
PUB.AGV.AGVMoveStop("xbee");
break;
case ENIGProtocol.AGVCommands.Reset: //Error Reset
PUB.AGV.AGVErrorReset();
break;
case ENIGProtocol.AGVCommands.Manual: //Manual Move (Direction, speed, runtime)
var Direction = data[0]; //0=back, 1=forward, 2=left, 3=right
var Speed = data[1]; //0=slow, 1=normal, 2=fast
var Runtime = data[2]; // running seconds
arDev.Narumi.ManulOpt opt = arDev.Narumi.ManulOpt.BS;
arDev.Narumi.Speed spd = arDev.Narumi.Speed.Low;
if (Speed == 1) spd = arDev.Narumi.Speed.Mid;
else if (Speed == 2) spd = arDev.Narumi.Speed.High;
//0.자동모드가 아니라면 실행하지 않는다
//1.입력된 파라미터로 AGV를 이동한다
if (Direction == 0) opt = arDev.Narumi.ManulOpt.BS;
else if (Direction == 1) opt = arDev.Narumi.ManulOpt.FS;
else if (Direction == 2) opt = arDev.Narumi.ManulOpt.LT;
else if (Direction == 3) opt = arDev.Narumi.ManulOpt.RT;
PUB.AGV.AGVMoveManual(opt, spd, arDev.Narumi.Sensor.PBSOn);
break;
case ENIGProtocol.AGVCommands.MarkStop: //Set MarkStop
var MarkStop = data[0]; //0=off, 1=on
//마크센서에서 멈추게 한다
PUB.AGV.AGVMoveStop("Xbee", arDev.Narumi.eStopOpt.MarkStop);
break;
case ENIGProtocol.AGVCommands.LiftControl: //Lift Control
var LiftCommand = data[0]; //0=stop, 1=up, 2=down
arDev.Narumi.LiftCommand LCmd = arDev.Narumi.LiftCommand.STP;
if (LiftCommand == 1) LCmd = arDev.Narumi.LiftCommand.UP;
else if (LiftCommand == 2) LCmd = arDev.Narumi.LiftCommand.DN;
//리프트제어
PUB.AGV.LiftControl(LCmd);
break;
}
}
}
private void XBE_MessageReceived(object sender, Device.Xbee.MessageArgs e)
{
if (e.IsError) PUB.log.AddE(e.Message);
else PUB.log.Add(e.Message);
}
}
}