agv 정보 전송 수정

This commit is contained in:
backuppc
2025-11-14 15:03:41 +09:00
parent 6c8ed6d2f2
commit 4f360f33a7
5 changed files with 52 additions and 23 deletions

View File

@@ -74,8 +74,8 @@ public enum DeviceAlias : byte
[STX][LEN][ID][CMD][DATA][CRC16][ETX] [STX][LEN][ID][CMD][DATA][CRC16][ETX]
``` ```
- **STX (Start of Text)**: 0x02 - **STX (Start of Text)**: 0x02
- **ID (Client ID)**: 데이터 길이 (1바이트) : 디바이스식별코드(=DeviceType)
- **LEN (Length)**: 데이터 길이 (1바이트) = {CMD+DATA} - **LEN (Length)**: 데이터 길이 (1바이트) = {CMD+DATA}
- **ID (Client ID)**: 데이터 길이 (1바이트) : 디바이스식별코드(=DeviceType)
- **CMD (Command)**: 명령어 코드 (1바이트) - **CMD (Command)**: 명령어 코드 (1바이트)
- **DATA**: 명령어에 따른 데이터 (가변 길이) - **DATA**: 명령어에 따른 데이터 (가변 길이)
- **CRC16**: 데이터 무결성 검사 (2바이트) - **CRC16**: 데이터 무결성 검사 (2바이트)
@@ -99,27 +99,42 @@ public enum DeviceAlias : byte
3. **AGV** 3. **AGV**
- H -> E | Move : cmd(100) : 대상태그까지 이동(자동이동) - H -> E | Move : cmd(100) : 대상태그까지 이동(자동이동)
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- TagID[4] = 0000 - TagID[4] = "0000"
- H -> E | Move : cmd(107) : 대상별칭까지 이동(자동이동)
- Target[1] = {DeviceType}
- TagID[4] = 0000
- H -> E | Stop : cmd(101) : 멈춤 - H -> E | Stop : cmd(101) : 멈춤
- H -> E | Reset : cmd(102) : 오류 소거 - H -> E | Reset : cmd(102) : 오류 소거
- H -> E | Charge On: cmd(103) : 충전실행(충전기 이동 후 자동 충전 진행)
- H -> E | SetCurrent : cmd(103) : 현재위치설정
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- Action[1] : 0=Charge Off, 1=Charge On - TagID[4] = "0000"
- H -> E | MoveManual : cmd(104) : 메뉴얼이동 - H -> E | MoveManual : cmd(104) : 메뉴얼이동
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- Direction[1] : 0=Backward, 1=Forward, 2=TurnLeft, 3=TurnRight - Direction[1] : 0=Backward, 1=Forward, 2=TurnLeft, 3=TurnRight
- Speed[1] : 0=Slow, 1=Normal, 2=Fast - Speed[1] : 0=Slow, 1=Normal, 2=Fast
- Runtime[1] : 0 second
- H -> E | MarkStop : cmd(105) : 마크센서스톱 - H -> E | MarkStop : cmd(105) : 마크센서스톱
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- H -> E | Lift Control : cmd(106) : 리프트제어 - H -> E | Lift Control : cmd(106) : 리프트제어
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- Action[1] : 0=STOP, 1=UP, 2=DOWN - Action[1] : 0=STOP, 1=UP, 2=DOWN
- H -> E | Move : cmd(107) : 대상별칭까지 이동(자동이동)
- Target[1] = {DeviceType}
- AliasName[n] = ".....
- H -> E | MoveAuto : cmd(108) : 자동이동
- Target[1] = {DeviceType}
- MotDirection[1] : 0=Backward, 1=Forward
- MagnetDirection[1] : 0=Straight,1=Left, 2=Right
- Speed[1] : 0=Slow, 1=Normal, 2=Fast
- H -> E | Charge On: cmd(109) : 충전실행(충전기 이동 후 자동 충전 진행)
- Target[1] = {DeviceType}
- Action[1] : 0=Charge Off, 1=Charge On
- E -> H | Move Complete : cmd(1) : 목적지이동완료 후 전송 - E -> H | Move Complete : cmd(1) : 목적지이동완료 후 전송
- TagID[4] : "0000" - TagID[4] : "0000"
- E -> H | TagID Received : cmd(2) : 태그값 인식시 전송 - E -> H | TagID Received : cmd(2) : 태그값 인식시 전송

View File

@@ -11,11 +11,14 @@ namespace ENIGProtocol
{ {
Goto = 100, Goto = 100,
Stop = 101, Stop = 101,
Reset, Reset = 102,
SetCurrent, SetCurrent = 103,
Manual, Manual = 104,
MarkStop, MarkStop = 105,
LiftControl LiftControl = 106,
GotoAlias = 107,
AutoMove=108,
ChargeControl=109,
} }
/// <summary> /// <summary>
@@ -26,7 +29,7 @@ namespace ENIGProtocol
Error = 1, Error = 1,
Arrived = 2, Arrived = 2,
ReadRFID = 3, ReadRFID = 3,
Status=9, Status = 9,
} }
public enum AGVErrorCode : byte public enum AGVErrorCode : byte
@@ -34,5 +37,7 @@ namespace ENIGProtocol
PredictFix, PredictFix,
TurnTimeout, TurnTimeout,
TurnError, TurnError,
EmptyNode,
Goto,
} }
} }

View File

@@ -178,14 +178,16 @@ namespace ENIG
OnDataReceived?.Invoke(this, new DataEventArgs { ReceivedPacket = packet }); OnDataReceived?.Invoke(this, new DataEventArgs { ReceivedPacket = packet });
return true; return true;
} }
catch catch(Exception ex)
{ {
RaiseMessage(ex.Message, true);
return false; return false;
} }
} }
// 데이터 수신 처리 메서드 (시리얼 포트에서 데이터를 받았을 때 호출) // 데이터 수신 처리 메서드 (시리얼 포트에서 데이터를 받았을 때 호출)
private List<byte> buffer = new List<byte>(); private List<byte> buffer = new List<byte>();
private int ProtocolParseError = 0;
public void ProcessReceivedData(byte[] data) public void ProcessReceivedData(byte[] data)
{ {
buffer.AddRange(data); buffer.AddRange(data);
@@ -216,7 +218,12 @@ namespace ENIG
byte[] packetData = buffer.Take(expectedLength).ToArray(); byte[] packetData = buffer.Take(expectedLength).ToArray();
buffer.RemoveRange(0, expectedLength); buffer.RemoveRange(0, expectedLength);
ParsePacket(packetData); var parseOK = ParsePacket(packetData);
if(parseOK==false) //분석이 실패되었다면 해당 데이터는 삭제한다.
{
ProtocolParseError += 1;
if (ProtocolParseError > 3) buffer.Clear();
} else ProtocolParseError = 0;
} }
} }
} }

View File

@@ -50,6 +50,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include=".gitignore" /> <None Include=".gitignore" />
<None Include="ReadMe.MD" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View File

@@ -56,8 +56,8 @@ public enum DeviceType : byte
[STX][LEN][ID][CMD][DATA][CRC16][ETX] [STX][LEN][ID][CMD][DATA][CRC16][ETX]
``` ```
- **STX (Start of Text)**: 0x02 - **STX (Start of Text)**: 0x02
- **LEN (Length)**: 데이터 길이 (1바이트) = {ID+CMD+DATA}
- **ID (Client ID)**: 데이터 길이 (1바이트) : 디바이스식별코드(=DeviceType) - **ID (Client ID)**: 데이터 길이 (1바이트) : 디바이스식별코드(=DeviceType)
- **LEN (Length)**: 데이터 길이 (1바이트) = {CMD+DATA}
- **CMD (Command)**: 명령어 코드 (1바이트) - **CMD (Command)**: 명령어 코드 (1바이트)
- **DATA**: 명령어에 따른 데이터 (가변 길이) - **DATA**: 명령어에 따른 데이터 (가변 길이)
- **CRC16**: 데이터 무결성 검사 (2바이트) - **CRC16**: 데이터 무결성 검사 (2바이트)
@@ -81,10 +81,10 @@ public enum DeviceType : byte
3. **AGV** 3. **AGV**
- H -> E | Move : cmd(100) : 대상태그까지 이동(자동이동) - H -> E | Move : cmd(100) : 대상태그까지 이동(자동이동)
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- TagID[4] = 0000 - TagID[4] = "0000"
- H -> E | Move : cmd(107) : 대상별칭까지 이동(자동이동) - H -> E | Move : cmd(107) : 대상별칭까지 이동(자동이동)
- Target[1] = {DeviceType} - Target[1] = {DeviceType}
- TagID[4] = 0000 - AliasName[n] = "....."
- H -> E | Stop : cmd(101) : 멈춤 - H -> E | Stop : cmd(101) : 멈춤
- H -> E | Reset : cmd(102) : 오류 소거 - H -> E | Reset : cmd(102) : 오류 소거
- H -> E | Charge On: cmd(103) : 충전실행(충전기 이동 후 자동 충전 진행) - H -> E | Charge On: cmd(103) : 충전실행(충전기 이동 후 자동 충전 진행)
@@ -107,15 +107,16 @@ public enum DeviceType : byte
- E -> H | TagID Received : cmd(2) : 태그값 인식시 전송 - E -> H | TagID Received : cmd(2) : 태그값 인식시 전송
- TagID[4] : "0000" - TagID[4] : "0000"
- E -> H | Status : cmd(3) - 총 13바이트 - E -> H | Status : cmd(3) - 총 12바이트
- Mode[1] : 0=manual, 1=auto - Mode[1] : 0=manual, 1=auto
- RunSt[1] : 0=stop, 1=run, 2=error - RunSt[1] : 0=stop, 1=run, 2=error
- Diection[1] : 0=straight, 1=left, 2=right, 3=markstop MotDirection[1] : 0:Forward, 1:Backward, 0xFF:unknown
- MagDiection[1] : 0=straight, 1=left, 2=right , 0xFF:unknown
- Inposition[1] : 0=off, 1=on : 목적위치에 도달완료 시 설정 이동 이동시 OFF됨 - Inposition[1] : 0=off, 1=on : 목적위치에 도달완료 시 설정 이동 이동시 OFF됨
- ChargeSt[1] : 0=off, 1=on - ChargeSt[1] : 0=off, 1=on
- CartSt[1] : 0=off, 1=on, 2=unknown - CartSt[1] : 0=off, 1=on, 2=unknown
- LiftSt[1] : 0=down , 1=up, 2=unknown - LiftSt[1] : 0=down , 1=up, 2=unknown
- LastTag[6] : "000000" (ASCII 6바이트) - LastTag[4] : "0000" (ASCII 4바이트)
4. **Door** 4. **Door**
- H -> E | cmd(1): 출입문 열기 - H -> E | cmd(1): 출입문 열기