프로토콜 조정

This commit is contained in:
backuppc
2025-11-14 15:03:51 +09:00
parent 028e9ab35f
commit 97b2a3076f
14 changed files with 612 additions and 251 deletions

View File

@@ -31,6 +31,11 @@ namespace Test_ACS
// Speed combobox default
if (cmbSpeed.Items.Count > 0) cmbSpeed.SelectedIndex = 1; // 보통
cmbMotDirection.SelectedIndex = 0;
cmbMagDirection.SelectedIndex = 0;
cmbAutoSpeed.SelectedIndex = 0;
}
private void InitializeProtocol()
@@ -61,9 +66,14 @@ namespace Test_ACS
AddLog($"RX: {hexstrRaw}\nID:{id}, CMD:{cmd}, DATA:{hexstr}", LogType.RX);
// AGV 상태 수신 처리 (cmd = 3)
if (e.ReceivedPacket.Command == (byte)ENIGProtocol.AGVCommandEH.Status)
var device = e.ReceivedPacket.ID;
var command = (ENIGProtocol.AGVCommandEH)e.ReceivedPacket.Command;
switch (command)
{
UpdateAGVStatus(e.ReceivedPacket.Data);
case AGVCommandEH.Status:
UpdateAGVStatus(e.ReceivedPacket.Data);
break;
}
}
@@ -220,18 +230,21 @@ namespace Test_ACS
private void btnSetCurrent_Click(object sender, EventArgs e)
{
// SetCurrent: data = TargetID(2 hex) + RFID(4 hex)
var rfid = txtRFID.Text.PadLeft(4, '0');
var targetID = selectedAGV.ToString("X2");
var dataStr = targetID + rfid;
var rfidBytes = Encoding.ASCII.GetBytes(txtRFID.Text.PadLeft(4, '0'));
var rfidHex = string.Join("", rfidBytes.Select(b => b.ToString("X2")));
var dataStr = targetID + rfidHex;
SendCommand(AGVCommandHE.SetCurrent, dataStr);
}
private void btnGoto_Click(object sender, EventArgs e)
{
// Goto: data = TargetID(2 hex) + RFID(4 hex)
var rfid = txtRFID.Text.PadLeft(4, '0');
var targetID = selectedAGV.ToString("X2");
var dataStr = targetID + rfid;
var rfidBytes = Encoding.ASCII.GetBytes(txtRFID.Text.PadLeft(4, '0'));
var rfidHex = string.Join("", rfidBytes.Select(b => b.ToString("X2")));
var dataStr = targetID + rfidHex;
SendCommand(AGVCommandHE.Goto, dataStr);
}
@@ -334,7 +347,22 @@ namespace Test_ACS
serialPort.Write(packet, 0, packet.Length);
var hexString = string.Join(" ", packet.Select(b => b.ToString("X2")));
AddLog($"TX: {hexString}\nCMD: {command} ({(byte)command:X2}), DATA: {dataHexString}", LogType.TX);
//정보를 조금더 추출한다.
var Sender = packet[2];
if (Sender == 0x00)
{
var Receiver = packet[4];
var strdata = System.Text.Encoding.Default.GetString(dataBytes, 1, dataBytes.Length - 1);// (dataHexString.Substring(2), 16);
AddLog($"{hexString}|{command}({(byte)command:X2}) From:{Sender} To:{Receiver} => {dataHexString} STR:{strdata}", LogType.TX);
}
else
{
AddLog($"{hexString}|{command}({(byte)command:X2}) From:{Sender} => {dataHexString}", LogType.TX);
}
}
catch (Exception ex)
{
@@ -344,7 +372,7 @@ namespace Test_ACS
private void UpdateAGVStatus(byte[] data)
{
if (data.Length < 13)
if (data.Length < 12)
{
AddLog($"AGV 상태 데이터 길이 오류: {data.Length} bytes", LogType.Error);
return;
@@ -383,36 +411,47 @@ namespace Test_ACS
break;
}
// Direction[1]: 0=straight, 1=left, 2=right, 3=markstop
// Mot Direction[1]: 0=forward, 1:backward
switch (data[2])
{
case 0:
lblDirectionValue.Text = "진";
lblDirectionValue.Text = "진";
break;
case 1:
lblDirectionValue.Text = "좌회전";
break;
case 2:
lblDirectionValue.Text = "우회전";
break;
case 3:
lblDirectionValue.Text = "마크정지";
lblDirectionValue.Text = "후진";
break;
default:
lblDirectionValue.Text = "알 수 없음";
lblDirectionValue.Text = "??";
break;
}
// Direction[1]: 0=straight, 1=left, 2=right, 3=markstop
switch (data[3])
{
case 0:
lblDirectionValue.Text += "/직진";
break;
case 1:
lblDirectionValue.Text += "/좌회전";
break;
case 2:
lblDirectionValue.Text += "/우회전";
break;
default:
lblDirectionValue.Text += "/??";
break;
}
// Inposition[1]: 0=off, 1=on
lblInpositionValue.Text = data[3] == 0 ? "OFF" : "ON";
lblInpositionValue.ForeColor = data[3] == 0 ? Color.Gray : Color.Green;
lblInpositionValue.Text = data[4] == 0 ? "OFF" : "ON";
lblInpositionValue.ForeColor = data[4] == 0 ? Color.Gray : Color.Green;
// ChargeSt[1]: 0=off, 1=on
lblChargeStValue.Text = data[4] == 0 ? "OFF" : "ON";
lblChargeStValue.ForeColor = data[4] == 0 ? Color.Gray : Color.Orange;
lblChargeStValue.Text = data[5] == 0 ? "OFF" : "ON";
lblChargeStValue.ForeColor = data[5] == 0 ? Color.Gray : Color.Orange;
// CartSt[1]: 0=off, 1=on, 2=unknown
switch (data[5])
switch (data[6])
{
case 0:
lblCartStValue.Text = "없음";
@@ -422,18 +461,14 @@ namespace Test_ACS
lblCartStValue.Text = "있음";
lblCartStValue.ForeColor = Color.Green;
break;
case 2:
lblCartStValue.Text = "알 수 없음";
lblCartStValue.ForeColor = Color.Orange;
break;
default:
lblCartStValue.Text = "오류";
lblCartStValue.Text = "??";
lblCartStValue.ForeColor = Color.Red;
break;
}
// LiftSt[1]: 0=down, 1=up, 2=unknown
switch (data[6])
switch (data[7])
{
case 0:
lblLiftStValue.Text = "하강";
@@ -443,18 +478,13 @@ namespace Test_ACS
lblLiftStValue.Text = "상승";
lblLiftStValue.ForeColor = Color.Green;
break;
case 2:
lblLiftStValue.Text = "알 수 없음";
lblLiftStValue.ForeColor = Color.Orange;
break;
default:
lblLiftStValue.Text = "오류";
lblLiftStValue.Text = "??";
lblLiftStValue.ForeColor = Color.Red;
break;
}
// LastTag[6]: "000000"
string lastTag = Encoding.ASCII.GetString(data, 7, 6);
string lastTag = Encoding.ASCII.GetString(data, 8, 4);
lblLastTagValue.Text = lastTag;
lblLastTagValue.ForeColor = Color.Black;
}
@@ -511,5 +541,18 @@ namespace Test_ACS
}
base.OnFormClosing(e);
}
private void btAMove_Click(object sender, EventArgs e)
{
// Manual: data = TargetID(2 hex) + Direction(1 byte) + Speed(1 byte) + Runtime(1 byte)
var targetID = selectedAGV.ToString("X2");
var Motdirection = (byte)cmbMotDirection.SelectedIndex;
var Magdirection = (byte)cmbMagDirection.SelectedIndex;
var speed = (byte)cmbAutoSpeed.SelectedIndex;
var dataBytes = new byte[] { Motdirection, Magdirection, speed };
var dataStr = targetID + string.Join("", dataBytes.Select(b => b.ToString("X2")));
SendCommand(AGVCommandHE.AutoMove, dataStr);
}
}
}