프로토콜 조정
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user