| | |
| | | { |
| | | public Action<SeerAGVDriver, string> OnAGVPositoinChanged; |
| | | public Action<SeerAGVDriver, AGVTaskStatus> OnAGVTaskStatusChanged; |
| | | public Action<SeerAGVDriver, float, float> OnAGVBatteryLvlChanged; |
| | | |
| | | SeerAGVInitialConfig IConfig |
| | | { |
| | |
| | | { |
| | | msg_Position = new SeerMessage((int)AGVCode.QueryPosition, SID); |
| | | msg_GuideStatus = new SeerMessage((int)AGVCode.QueryTaskStatus, SID, IConfig.IsSimpleMonitor ? JsonConvert.SerializeObject(new { simple = true }) : ""); |
| | | msg_Battery = new SeerMessage((int)AGVCode.QueryBattery, SID, IConfig.IsSimpleMonitor ? JsonConvert.SerializeObject(new { simple = true }) : ""); |
| | | |
| | | Task.Run(() => |
| | | { |
| | |
| | | if (client_Guide != null && client_Guide.Connected) |
| | | { |
| | | CancelTask(); |
| | | client_Guide.Close(); |
| | | client_Guide.Close(); |
| | | client_Guide = null; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | float batteryLvl = 0; |
| | | public float BatteryLvl |
| | | { |
| | | get => batteryLvl; |
| | | set |
| | | { |
| | | if (batteryLvl != value) |
| | | { |
| | | float pre = batteryLvl; |
| | | batteryLvl = value; |
| | | OnAGVBatteryLvlChanged?.Invoke(this, pre, batteryLvl); |
| | | } |
| | | } |
| | | } |
| | | |
| | | SeerMessage msg_Position = new SeerMessage(); |
| | | SeerMessage msg_GuideStatus = new SeerMessage(); |
| | | SeerMessage msg_Battery = new SeerMessage(); |
| | | private void MonitorAGV() |
| | | { |
| | | while (CurrentState != EnumHelper.DeviceState.DSClose && CurrentState != EnumHelper.DeviceState.DSExcept) |
| | |
| | | SendMsg(client_State, IConfig.StatusPort, msg_Position); |
| | | Thread.Sleep(IConfig.ScanInterval); |
| | | SendMsg(client_State, IConfig.StatusPort, msg_GuideStatus); |
| | | Thread.Sleep(IConfig.ScanInterval); |
| | | SendMsg(client_State, IConfig.StatusPort, msg_Battery); |
| | | Thread.Sleep(IConfig.ScanInterval); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | case (int)AGVCode.QueryTaskStatus: |
| | | TaskStatus = (AGVTaskStatus)recMsg.JValues.Value<int>("task_status"); |
| | | break; |
| | | case (int)AGVCode.QueryBattery: |
| | | BatteryLvl = recMsg.JValues.Value<float>("battery_level"); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | |
| | | { |
| | | CurrentPosition = ""; |
| | | SeerMessage msg = new SeerMessage((int)AGVCode.TaskOrder, SID, JsonConvert.SerializeObject(new { id = dest })); |
| | | |
| | | OnLog?.BeginInvoke(DateTime.Now, this, $"{Name}行驶向 {dest}", null, null); |
| | | SendMsg(client_Guide, IConfig.GuidePort, msg); |
| | | } |
| | | } |