Skip to content

Commit 0c1af61

Browse files
author
“寧々”
committed
2021-10-20 V1.07
1 parent 52bb87c commit 0c1af61

File tree

5 files changed

+80
-13
lines changed

5 files changed

+80
-13
lines changed

MiniCarLib/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
3333
//通过使用 "*",如下所示:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.6.0.0")]
36-
[assembly: AssemblyFileVersion("1.6.0.0")]
35+
[assembly: AssemblyVersion("1.7.0.0")]
36+
[assembly: AssemblyFileVersion("1.7.0.0")]

MiniCarLib/QianCar.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class QianCar : ICar
1414
public byte CarVersion { get; set; }
1515
public string CarName { get; set; }
1616
public CarState State { get; set; }
17-
public int Speed { get; set; }
17+
public int CarSpeed { get; set; }
1818
public IComClient ComClient { get; set; }
1919
public CarErrorState ErrorState { get; set; }
2020
public object ErrorInfo { get; set; }
@@ -25,5 +25,7 @@ public class QianCar : ICar
2525
public virtual byte Direction { get; set; }
2626

2727
public ushort RouteRemain { get; set; }
28+
public byte Battery { get; set; }
29+
public byte MoterSpeed { get; set; }
2830
}
2931
}

MiniCarLib/QianCarAPI.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ namespace MiniCarLib
1212
public delegate void OnCarLeaveConfirmedHandler(QianCar car);
1313
public delegate void OnCarUnregisterHandler(QianCar car);
1414
public delegate void OnCarErrorReportedHandler(QianCar car, CarErrorState errcode, byte[] errinfo);
15+
public delegate void OnCarMotorSpeedSetHandler(QianCar car, byte speed);
16+
//public delegate void OnCarPausedHandler(QianCar car);
17+
public delegate void OnCarResumingHandler(QianCar car,ReportCarStateData data);
18+
1519
public static class QianCarAPI
1620
{
1721
static QianCarController controller;
@@ -31,12 +35,25 @@ public static class QianCarAPI
3135
public static event OnCarUnregisterHandler OnCarUnregisterRequest;
3236
public static event OnCarUnregisterHandler OnCarUnregisterResponse;
3337
public static event OnCarErrorReportedHandler OnCarErrorReported;
38+
public static event OnCarMotorSpeedSetHandler OnCarMotorSpeedSet;
39+
//public static event OnCarPausedHandler OnCarPaused;
40+
public static event OnCarResumingHandler OnCarResuming;
3441

3542
private static void InitEvents()
3643
{
3744
controller.OnCustomData += OnCustomData;
3845
controller.AfterRegistered += (car, data) => { if (car != null) OnCarRegistered?.Invoke((QianCar)car); };
39-
controller.AfterReportState += (car, data) => OnCarStateReported?.Invoke((QianCar)car,((ReportCarStateData)data).IsACK);
46+
controller.AfterReportState += (car, data) =>
47+
{
48+
OnCarStateReported?.Invoke((QianCar)car, ((ReportCarStateData)data).IsACK);
49+
};
50+
controller.BeforeReportState += (car,data) =>
51+
{
52+
QianCar c = (QianCar)car;
53+
ReportCarStateData dt = (ReportCarStateData)data;
54+
if (c.State == CarState.EmergencyStop && dt.State != CarState.EmergencyStop)
55+
OnCarResuming?.Invoke(c, dt);
56+
};
4057
controller.OnApplyForEnter += (car, data) => OnCarApplyForEnter?.Invoke(
4158
(QianCar)car,
4259
controller.Map[((ApplyForEnterData)data).PointID]
@@ -57,6 +74,7 @@ private static void InitEvents()
5774
var obj = (ErrorReportData)data;
5875
OnCarErrorReported?.Invoke((QianCar)car, obj.ErrorCode, obj.ErrorData);
5976
};
77+
controller.OnMotorSpeedSet += (car, data) => OnCarMotorSpeedSet((QianCar)car, ((SetMotorSpeedData)data).MotorSpeed);
6078
}
6179

6280

@@ -109,7 +127,10 @@ public static void Init(QianCarController ct, string mapfile, byte[] password =
109127
public static void CallCarLeave(QianCar car, bool allow) => controller.CallCarLeave(car, allow);
110128
public static void UnregisterCar(QianCar car) => controller.UnregisterCar(car);
111129
public static void ConfirmUnregteration(QianCar car, bool allow, bool removecar = true) => controller.ConfirmUnregteration(car, allow, removecar);
112-
public static void EmergencyStopCar(QianCar car) => controller.EmergencyStopCar(car, 0x00);
130+
//public static void EmergencyStopCar(QianCar car) => controller.EmergencyStopCar(car, 0x00);
131+
public static void PauseCar(QianCar car, byte code = 0x00) => controller.EmergencyStopCar(car, true, code);
132+
public static void ResumeCar(QianCar car, byte code = 0x00) => controller.EmergencyStopCar(car, false, code);
133+
public static void SetMotroSpeed(QianCar car, byte speed) => controller.SetMotorSpeed(car, speed);
113134
public static void SendCustomData(QianCar car,byte[] data)=> controller.SendCustomData(car, new CustomData() { UserData = data });
114135

115136
}

MiniCarLib/QianCarController.cs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class QianCarController
3737
public event OnCarEventHandler OnUnregisterRequest;
3838
public event OnCarEventHandler OnUnregisterResponse;
3939
public event OnCarEventHandler OnErrorReport;
40+
public event OnCarEventHandler OnMotorSpeedSet;
4041
public event OnCustomDataEventHandler OnCustomData;
4142

4243
protected void _init(ushort serverid)
@@ -156,11 +157,19 @@ public virtual void ConfirmUnregteration(QianCar car,bool allow,bool removecar=t
156157
SendCarDataPack(car, res);
157158
}
158159

159-
public virtual void EmergencyStopCar(QianCar car,byte code)
160+
public virtual void EmergencyStopCar(QianCar car,bool flag,byte code)
160161
{
161162
var data = (EmergencyStopData)QianComDataFactory.CreateInstance(DataFunctionType.EmergencyStop);
162163
data.EmergencyCode = code;
163-
car.State = CarState.EmergencyStop;
164+
if(flag)
165+
car.State = CarState.EmergencyStop;
166+
SendCarDataPack(car, data);
167+
}
168+
169+
public virtual void SetMotorSpeed(QianCar car, byte speed)
170+
{
171+
var data = (SetMotorSpeedData)QianComDataFactory.CreateInstance(DataFunctionType.SetMotorSpeed);
172+
data.MotorSpeed = speed;
164173
SendCarDataPack(car, data);
165174
}
166175

@@ -213,12 +222,21 @@ protected virtual void Server_OnCarDataReceived(IComClient client, QianComHeader
213222
ErrorReportHandler(car, (ErrorReportData)data);
214223
OnErrorReport?.Invoke(car, data);
215224
break;
225+
case DataFunctionType.SetMotorSpeed:
226+
MotorSpeedSetHandler(car, (SetMotorSpeedData)data);
227+
OnMotorSpeedSet?.Invoke(car, data);
228+
break;
216229
default:
217230
OnCustomData?.Invoke(car, header, data);
218231
break;
219232
}
220233
}
221234

235+
public virtual void MotorSpeedSetHandler(QianCar car, SetMotorSpeedData data)
236+
{
237+
car.MoterSpeed = data.MotorSpeed;
238+
}
239+
222240
public virtual void ErrorReportHandler(QianCar car,ErrorReportData data)
223241
{
224242
car.State = CarState.Error;
@@ -277,13 +295,12 @@ public virtual ICar RegisrationHandler(IComClient client, QianComHeader header,
277295

278296
public virtual void QueryDataHandler(QianCar car, ReportCarStateData data)
279297
{
280-
car.Speed = data.Speed;
298+
car.CarSpeed = data.Speed;
281299
car.State = data.State;
282300
car.CurrentPoint = Map[data.PointID];
283301
car.Direction = data.Direction;
284302
car.RouteRemain = data.RouteRemain;
285-
286-
303+
car.Battery = data.Battery;
287304
}
288305

289306

MiniCarLib/QianCarData.cs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public enum DataFunctionType : byte
5050
UnregisterRequest = 0x0C,
5151
UnregisterResponse = 0x0D,
5252
EmergencyStop = 0x0E,
53-
53+
SetMotorSpeed = 0x0F,
5454

5555
CustomData = 0xFF,
5656
}
@@ -237,8 +237,9 @@ public class ReportCarStateData : QianComData
237237
public string PointID { get; set; }
238238
public ushort Speed { get; set; }
239239
public ushort RouteRemain { get; set; }
240+
public byte Battery { get; set; }
240241

241-
public override byte DataLen => (byte)(PointIDLen + 8);
242+
public override byte DataLen => (byte)(PointIDLen + 9);
242243

243244
public override DataFunctionType FuncType => DataFunctionType.ReportCarState;
244245

@@ -253,6 +254,7 @@ public override void FillByteData(byte[] data, int offset)
253254
dw.WriteString(PointID, Encoding.ASCII);
254255
dw.WriteHalfWord(Speed);
255256
dw.WriteHalfWord(RouteRemain);
257+
dw.WriteByte(Battery);
256258
}
257259

258260
public override void ParseByteData(byte[] data, int offset)
@@ -265,6 +267,7 @@ public override void ParseByteData(byte[] data, int offset)
265267
PointID = dr.ReadString(len, Encoding.ASCII);
266268
Speed = dr.ReadHalfWord();
267269
RouteRemain = dr.ReadHalfWord();
270+
Battery = dr.ReadByte();
268271
}
269272
}
270273

@@ -500,18 +503,21 @@ public override void ParseByteData(byte[] data, int offset)
500503

501504
public class EmergencyStopData : QianComData
502505
{
506+
public bool Flag { get; set; }
503507
public byte EmergencyCode { get; set; }
504-
public override byte DataLen => 1;
508+
public override byte DataLen => 2;
505509

506510
public override DataFunctionType FuncType => DataFunctionType.EmergencyStop;
507511

508512
public override void FillByteData(byte[] data, int offset)
509513
{
514+
data[offset++] = (byte)(Flag ? 1 : 0);
510515
data[offset] = EmergencyCode;
511516
}
512517

513518
public override void ParseByteData(byte[] data, int offset)
514519
{
520+
Flag = data[offset++] == 0 ? false : true;
515521
EmergencyCode = data[offset];
516522
}
517523
}
@@ -546,4 +552,25 @@ public override void ParseByteData(byte[] data, int offset)
546552
}
547553
}
548554

555+
public class SetMotorSpeedData : QianComData
556+
{
557+
public override byte DataLen => 1;
558+
559+
public override DataFunctionType FuncType => DataFunctionType.SetMotorSpeed;
560+
561+
public byte MotorSpeed { get; set; }
562+
563+
public override void FillByteData(byte[] data, int offset)
564+
{
565+
ComDataWriter dw = new ComDataWriter(data, offset);
566+
dw.WriteByte(MotorSpeed);
567+
}
568+
569+
public override void ParseByteData(byte[] data, int offset)
570+
{
571+
ComDataReader dr = new ComDataReader(data, offset);
572+
MotorSpeed = dr.ReadByte();
573+
}
574+
}
575+
549576
}

0 commit comments

Comments
 (0)