123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- using AmrControl.Dto;
- using Newtonsoft.Json;
- using NPOI.SS.Formula.Functions;
- using System.IO;
- using System.Runtime.InteropServices;
- using System.Security.Policy;
- namespace AmrControl.ADS
- {
- [Serializable]
- public class JGR_Tc_Model
- {
- // 0:仓储车 , 1:运输车, 2:仓储位充电器,3:轨道位充电器
- public byte jgrType;
- //出厂编号,30个长度带'\0',有效最多29个字节
- public string jgrSN;
- //车ID,取值范围0~63,不同类型的车/充电器的jgrID可以重复
- public byte jgrID;
- //无线模块的地址,长度2字节
- public ushort rcAddr;
- //无线模块的频率码,取值0~155,对应频率为 900+RC_FreqCode*0.2,单位MHz,默认频率码为0x32(50)
- public byte rcFreqCode;
- //在线/离线状态 是否在线(通讯是否正常)
- public byte isOnline;
- //健康状态 =0:正常; >=1:异常,异常编码看接口给
- public byte isHealthy;
- //充电标志,1:充电中,0:未在充电
- public byte isCharging;
- //充电电压,单位:V
- public float chargeVoltage;
- //充电电流,单位:mA
- public float chargeCurrent;
- //电池剩余电量,取值 0~100 , 100表示满电量
- public byte electricity;
- //驱动器通电/断电状态
- public byte isDriverPowerOn;
- //(*工作模式
- //1: 正常工作模式,即自动控制模式,只需给出运动的目标坐标,动作序列小车自己控制,正常工作时使用;
- //2:调试模式,即手动控制模式,用于调试,每一个动作都需要发送指令*)
- public byte workMode;
- //车轮位置(车身姿态) =1高姿态,=2中姿态,=3低姿态
- public byte wheelPosition;
- //行进/停止状态
- //(* 车体运动状态
- //0:静止状态
- //1:X负向移动
- //2:X正向移动
- //3:Y负向移动
- //4:Y正向移动*)
- public byte moveStatus;
- //移动速度,单位:m/s
- public float moveSpeed;
- //当前位置X
- public short currLocation_X;
- //当前位置Y
- public short currLocation_Y;
- //目标位置X
- public short destLocation_X;
- //目标位置Y
- public short destLocation_Y;
- /// <summary>
- /// 显示位置X,Y坐标
- /// </summary>
- public int displayX;
- public int displayY;
- //车轮是否在位置切换中
- public byte isWheelAltering;
- //4个碰撞传感器,true:碰撞,false:未碰撞
- public byte[] collideSensor;
- //X加速度,单位 m/s2
- public float acceleration_X;
- //Y加速度,单位 m/s2
- public float acceleration_Y;
- //Z加速度,单位 m/s2
- public float acceleration_Z;
- //XZ角度,单位:°
- public float angleXZ;
- //YZ角度,单位:°
- public float angleYZ;
- //吊篮限位标志,吊篮处于的位置 0:最高点; 1~7层
- public byte basketPosition;
- //吊篮抓夹状态 1:闭合状态; 2:张开状态
- public byte basketGripperStatus;
- //吊篮是否在移动,吊篮运动状态 吊篮运动状态 0:静止; 1:正在上提; 2:正在下放
- public byte basketMoveStatus;
- //RFID
- public string rfid;
- /// <summary>
- /// 需要移动的路径
- /// </summary>
- [JsonIgnore]
- public List<MovingPath> movingPaths;
- public JGR_Tc_Model()
- {
- collideSensor = new byte[4];
- movingPaths = new List<MovingPath>();
- }
- public int GetPathCounts()
- {
- int count = 0;
- lock(this)
- {
- count = movingPaths.Count;
- }
- return count;
- }
- public MovingPath GetFirstPath()
- {
- MovingPath path = null;
- lock (this)
- {
- if(movingPaths.Count > 0)
- {
- path = movingPaths[0];
- }
- }
- return path;
- }
- public MovingPath RemoveFirstPath()
- {
- MovingPath path = null;
- lock (this)
- {
- if (movingPaths.Count > 0)
- {
- path = movingPaths[0];
- movingPaths.RemoveAt(0);
- }
- }
- return path;
- }
- public void ClearPath()
- {
- lock (this)
- {
- movingPaths.Clear();
- }
- }
- /// <summary>
- /// 如果对象为空,可以加入,表示当前这辆车只能执行一组动作
- /// </summary>
- /// <param name="paths"></param>
- public void AddPath(List<MovingPath> paths)
- {
- lock (this)
- {
- if(movingPaths.Count == 0)
- {
- movingPaths.AddRange(paths);
- }
- }
- }
- }
- //用内存对齐方式并不对,可能是和TC程序接口是C#开发的有关 [StructLayout(LayoutKind.Sequential, Pack = 1)]
- /// <summary>
- /// TC程序中定义的JGR小车的数据结构
- /// </summary>
- [Serializable]
- public struct JGR_Ads_Struct
- {
- //出厂编号,30个长度带'\0',有效最多29个字节
- [JsonConverter(typeof(TcModelArrayConverter))]
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
- public byte[] jgrSN;
- // 0:仓储车 , 1:运输车, 2:仓储位充电器,3:轨道位充电器
- public byte jgrType;
- //车ID,取值范围0~63,不同类型的车/充电器的jgrID可以重复
- public byte jgrID;
- //无线模块的地址,长度2字节
- public ushort rcAddr;
- //无线模块的频率码,取值0~155,对应频率为 900+RC_FreqCode*0.2,单位MHz,默认频率码为0x32(50)
- public byte rcFreqCode;
- //在线/离线状态 是否在线(通讯是否正常)
- public byte isOnline;
- //健康状态 true:正常; false:异常
- public byte isHealthy;
- //充电标志,1:充电中,0:未在充电
- public byte isCharging;
- //充电电压,单位:V
- public float chargeVoltage;
- //充电电流,单位:mA
- public float chargeCurrent;
- //电池剩余电量,取值 0~100 , 100表示满电量
- public byte electricity;
- //驱动器通电/断电状态
- public byte isDriverPowerOn;
- //(*工作模式
- //1: 正常工作模式,即自动控制模式,只需给出运动的目标坐标,动作序列小车自己控制,正常工作时使用;
- //2:调试模式,即手动控制模式,用于调试,每一个动作都需要发送指令*)
- public byte workMode;
- //车轮位置(车身姿态) =1高姿态,=2中姿态,=3低姿态
- public byte wheelPosition;
- //行进/停止状态
- //(* 车体运动状态
- //0:静止状态
- //1:X负向移动
- //2:X正向移动
- //3:Y负向移动
- //4:Y正向移动*)
- public byte moveStatus;
- //移动速度,单位:m/s
- public float moveSpeed;
- //当前位置X
- public short currLocation_X;
- //当前位置Y
- public short currLocation_Y;
- //目标位置X
- public short destLocation_X;
- //目标位置Y
- public short destLocation_Y;
- //车轮是否在位置切换中
- public byte isWheelAltering;
- //4个碰撞传感器,true:碰撞,false:未碰撞
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
- public byte[] collideSensor;
- //X加速度,单位 m/s2
- public float acceleration_X;
- //Y加速度,单位 m/s2
- public float acceleration_Y;
- //Z加速度,单位 m/s2
- public float acceleration_Z;
- //XZ角度,单位:°
- public float angleXZ;
- //YZ角度,单位:°
- public float angleYZ;
- //吊篮限位标志,吊篮处于的位置 1:最高点; 2:最低点
- public byte basketPosition;
- //吊篮抓夹状态 1:闭合状态; 2:张开状态
- public byte basketGripperStatus;
- //吊篮是否在移动,吊篮运动状态 吊篮运动状态 0:静止; 1:正在上提; 2:正在下放
- public byte basketMoveStatus;
- //RFID
- [JsonConverter(typeof(TcModelArrayConverter))]
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
- public byte[] rfid;
- }
- /// <summary>
- /// 车、充电桩的类型
- /// </summary>
- public enum JgrType : byte
- {
- /// <summary>
- /// 仓储车
- /// </summary>
- StorageCar = 0,
- /// <summary>
- /// 轨道车
- /// </summary>
- RailCar = 1,
- /// <summary>
- /// 仓储充电桩
- /// </summary>
- StorageCharging = 2,
- /// <summary>
- /// 轨道充电桩
- /// </summary>
- RailCharging = 3
- }
- }
|