IFlyAd2021Core.cs 12.2 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2
using FlyADBase;
using System;
3 4 5 6 7 8 9 10 11
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlyAd2021.Inc
{
    /// <summary>
潘栩锋's avatar
潘栩锋 committed
12 13
    /// AD盒2021版 , 核心模块 
    /// 实现AD盒2021版 基本接口  
14
    /// </summary>
潘栩锋's avatar
潘栩锋 committed
15
    public interface IFlyAd2021Core : INotifyPropertyChanged
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
    {
        #region 测量速度
        bool IsMeasuring { get; }

        /// <summary>
        ///  通讯速度 byte/s
        /// </summary>
        double CommSpeed { get; }

        /// <summary>
        /// 传输速度 单位 pack/s
        /// </summary>
        double PackSpeed { get; }

        /// <summary>
        /// 开始测量速度
        /// </summary>
        void StartMeasure();

        /// <summary>
        ///结束测量速度
        /// </summary>
        void StopMeasure();
        #endregion

        /// <summary>
        /// 包出错次数
        /// </summary>
        int ErrCnt { get; }

        /// <summary>
        /// 连接成功;
        /// 当命令多次发送失败,IsConnected = false
        /// </summary>
        bool IsConnected { get; }

潘栩锋's avatar
潘栩锋 committed
52 53 54 55 56 57 58 59
        

        #region 模块运行接口
        /// <summary>
        /// 超时判断,长时间收不到数据,会触发,0.5s调用一次
        /// </summary>
        void OnPoll_TimeOut();

60 61 62 63 64 65 66 67 68 69 70
        /// <summary>
        /// 在接收事件中调用;
        /// 全部接收事件 及 超时事件也是在这里触发
        /// </summary>
        /// <param name="recBuf"></param>
        void RecMsg(byte[] recBuf);
        /// <summary>
        /// 获取 发送队列 第1条msg
        /// </summary>
        /// <returns></returns>
        byte[] GetSendMsg();
潘栩锋's avatar
潘栩锋 committed
71 72 73 74 75 76 77 78 79 80 81
        /// <summary>
        /// 有数据需要发送
        /// </summary>
        /// <param name="sender"></param>
        event SendMsgEventHander SendMsgEvent;

        /// <summary>
        /// 复位全部状态,通常由于通讯模块检测到连接断开导致的
        /// </summary>
        void ResetMsg();
        #endregion
82

潘栩锋's avatar
潘栩锋 committed
83
        #region AD 功能
84 85 86 87
        /// <summary>
        /// 数据推送事件
        /// </summary>
        event PushDataEventHandler PushDataEvent;
潘栩锋's avatar
潘栩锋 committed
88 89 90 91
        /// <summary>
        /// 运行状态推送事件
        /// </summary>
        event PushRunResultEventHandler PushRunResultEvent;
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
        #region IOComm IO指令

        [CallBack(typeof(UInt16))]
        void GetIn(CallBackHandler asyncDelegate, object asyncContext);


        [CallBack(typeof(UInt16))]
        void GetOut(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(Int32))]
        void GetEnc1(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(Int32))]
        void GetEnc2(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(GetEncAll_Reponse))]
        void GetEncAll(CallBackHandler asyncDelegate, object asyncContext);

        void SetOutPorts(UInt16 mask, UInt16 value, CallBackHandler asyncDelegate, object asyncContext);
        #endregion

        #region RunComm 运行指令 SetRunParam

潘栩锋's avatar
潘栩锋 committed
115
        void SetRunParam_V(UInt32 velocity, CallBackHandler asyncDelegate, object asyncContext);
116

潘栩锋's avatar
潘栩锋 committed
117
        void SetRunParam_SV(UInt32 sv, CallBackHandler asyncDelegate, object asyncContext);
118

潘栩锋's avatar
潘栩锋 committed
119
        void SetRunParam_AccTime(UInt32 accTime, CallBackHandler asyncDelegate, object asyncContext);
120

潘栩锋's avatar
潘栩锋 committed
121
        void SetRunParam_DecTime(UInt32 decTime, CallBackHandler asyncDelegate, object asyncContext);
122

潘栩锋's avatar
潘栩锋 committed
123
        void SetRunParam_HSpd1(UInt32 homespd1, CallBackHandler asyncDelegate, object asyncContext);
124

潘栩锋's avatar
潘栩锋 committed
125
        void SetRunParam_HSpd2(UInt32 homespd2, CallBackHandler asyncDelegate, object asyncContext);
126 127 128
        #endregion

        #region RunComm 运行指令 GetRunParam
潘栩锋's avatar
潘栩锋 committed
129
        void GetRunParam_V(CallBackHandler asyncDelegate, object asyncContext);
130

潘栩锋's avatar
潘栩锋 committed
131
        void GetRunParam_SV(CallBackHandler asyncDelegate, object asyncContext);
132

潘栩锋's avatar
潘栩锋 committed
133
        void GetRunParam_AccTime(CallBackHandler asyncDelegate, object asyncContext);
134

潘栩锋's avatar
潘栩锋 committed
135
        void GetRunParam_DecTime(CallBackHandler asyncDelegate, object asyncContext);
136

潘栩锋's avatar
潘栩锋 committed
137
        void GetRunParam_HSpd1(CallBackHandler asyncDelegate, object asyncContext);
138

潘栩锋's avatar
潘栩锋 committed
139
        void GetRunParam_HSpd2(CallBackHandler asyncDelegate, object asyncContext);
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218

        #endregion

        #region RunComm 运行指令

        [CallBack(typeof(GetRunResult_Reponse))]
        void GetRunResult(CallBackHandler asyncDelegate, object asyncContext);

        void Forw(Int32 serial, CallBackHandler asyncDelegate, object asyncContext);

        void Backw(Int32 serial, CallBackHandler asyncDelegate, object asyncContext);
        void Org(Int32 serial, CallBackHandler asyncDelegate, object asyncContext);

        void RunTo(Int32 serial, int targetPos, CallBackHandler asyncDelegate, object asyncContext);
        
        void Stop(CallBackHandler asyncDelegate, object asyncContext);

        void EStop(CallBackHandler asyncDelegate, object asyncContext);
        #endregion

        #region 同步运行指令
        void SyncRun_SetHShift(int hShift, CallBackHandler asyncDelegate, object asyncContext);
        void SyncRun_SetVShift(int vOShift, CallBackHandler asyncDelegate, object asyncContext);

        void SyncRun_Start(CallBackHandler asyncDelegate, object asyncContext);
        void SyncRun_Stop(CallBackHandler asyncDelegate, object asyncContext);
        void SyncRun_Clear(CallBackHandler asyncDelegate, object asyncContext);

        /// <summary>
        /// 同步扫描至;
        /// D+0xE0+开始主轴位置+结束主轴位置+结束横向脉冲位置(逻辑位置)+脉冲开关(1B)+命令识标号(4B)
        /// </summary>
        /// <param name="pos2_begin"></param>
        /// <param name="pos2_end"></param>
        /// <param name="pos1lc"></param>
        /// <param name="hasDataGrid"></param>
        /// <param name="marker"></param>
        void SyncRun_RunAtLC(int pos2_begin, int pos2_end, int pos1lc, UInt32 serial, CallBackHandler asyncDelegate, object asyncContext);


        /// <summary>
        /// 位于队列头时运行,归零;
        /// D+0xE1+命令识标号(4B)
        /// </summary>
        /// <param name="marker"></param>
        void SyncRun_Origin(UInt32 serial, CallBackHandler asyncDelegate, object asyncContext);


        /// <summary>
        /// 位于队列头时运行,以速度运行至物理位置;
        /// D+0xE2+横向脉冲位置(4B:int32,物理位置)+速度(4B:int32)+脉冲开关(1B)+命令识标号(4B)
        /// </summary>
        /// <param name="pos1"></param>
        /// <param name="velocity"></param>
        /// <param name="hasDataGrid"></param>
        /// <param name="marker"></param>
        void SyncRun_RunTo(int pos1, UInt32 velocity, UInt32 serial, CallBackHandler asyncDelegate, object asyncContext);


        /// <summary>
        /// 位于队列头时运行,以速度运行至逻辑位置;
        /// D+0xE3+横向脉冲位置(4B:int32,逻辑位置)+速度(4B:int32)+脉冲开关(1B)+命令识标号(4B)
        /// </summary>
        /// <param name="pos1lc"></param>
        /// <param name="velocity"></param>
        /// <param name="hasDataGrid"></param>
        /// <param name="marker"></param>
        void SyncRun_RunToLC(int pos1lc, UInt32 velocity, UInt32 serial, CallBackHandler asyncDelegate, object asyncContext);


        /// <summary>
        /// 获取队列长度
        /// </summary>
        /// <param name="asyncDelegate"></param>
        /// <param name="asyncContext"></param>
        void SyncRun_GetListCount(CallBackHandler asyncDelegate, object asyncContext);
        #endregion

        #region SysParamComm 系统参数指令
潘栩锋's avatar
潘栩锋 committed
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256

        /// <summary>
        /// 获取系统当前Tick
        /// </summary>
        [CallBack(typeof(UInt32))]
        void GetSysTick(CallBackHandler asyncDelegate, object asyncContext);

        /// <summary>
        /// 初始化系统信息区
        /// </summary>
        /// <param name="asyncDelegate"></param>
        /// <param name="asyncContext"></param>
        [CallBack(typeof(bool))]
        void InitArea(CallBackHandler asyncDelegate, object asyncContext);

        /// <summary>
        /// 输入系统授权码
        /// </summary>
        /// <param name="access"></param>
        /// <param name="asyncDelegate"></param>
        /// <param name="asyncContext"></param>
        [CallBack(typeof(AREA_ERR))]
        void CheckAccessCode(byte[] access, CallBackHandler asyncDelegate, object asyncContext);

        /// <summary>
        /// 获取系统授权信息
        /// </summary>
        /// <param name="asyncDelegate"></param>
        /// <param name="asyncContext"></param>
        [CallBack(typeof(GetAccess_Reponse))]
        void GetAccess(CallBackHandler asyncDelegate, object asyncContext);

        /// <summary>
        /// 系统运行时间+1
        /// </summary>
        /// <param name="asyncDelegate"></param>
        /// <param name="asyncContext"></param>
        void AddAccess(CallBackHandler asyncDelegate, object asyncContext);
257 258
        #endregion
        #region GetSysParam 读运行参数
潘栩锋's avatar
潘栩锋 committed
259 260 261 262 263
        [CallBack(typeof(MOTORTYPE))]
        void GetSysParam_MotorType(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(UInt16))]
        void GetSysParam_Ratio01(CallBackHandler asyncDelegate, object asyncContext);
264

潘栩锋's avatar
潘栩锋 committed
265 266 267 268 269 270 271 272
        [CallBack(typeof(UInt16))]
        void GetSysParam_Ratio02(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(Int16))]
        void GetSysParam_Zero(CallBackHandler asyncDelegate, object asyncContext);

        [CallBack(typeof(UInt32))]
        void GetSysParam_Jog(CallBackHandler asyncDelegate, object asyncContext);
273 274 275
        #endregion

        #region SetSysParam 设置运行参数
潘栩锋's avatar
潘栩锋 committed
276 277
        void SetSysParam_MotorType(MOTORTYPE motorType, CallBackHandler asyncDelegate, object asyncContext);

278

潘栩锋's avatar
潘栩锋 committed
279 280 281 282 283 284 285 286
        void SetSysParam_Ratio01(UInt16 ratio01, CallBackHandler asyncDelegate, object asyncContext);

        void SetSysParam_Ratio02(UInt16 ratio02, CallBackHandler asyncDelegate, object asyncContext);

        void SetSysParam_Zero(Int16 zero, CallBackHandler asyncDelegate, object asyncContext);

        void SetSysParam_Jog(UInt32 jog, CallBackHandler asyncDelegate, object asyncContext);
        #endregion
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
        #endregion
    }


    public class PushDataEventArgs : EventArgs
    {
        public byte SysTick { get; set; }
        public UInt16 AD { get; set; }
        public UInt16? ENC1 { get; set; }
        public UInt16? ENC2 { get; set; }
        public UInt16? In { get; set; }
        public UInt16? InChange { get; set; }
        public UInt16? Out { get; set; }

        public PushDataEventArgs()
        {

        }
    }
    public delegate void PushDataEventHandler(object sender, PushDataEventArgs e);

潘栩锋's avatar
潘栩锋 committed
308 309 310 311 312 313 314 315 316 317 318 319 320 321
    public class PushRunResultEventArgs : EventArgs
    {
        public byte SysTick { get; set; }
        /// <summary>
        /// 运行序号
        /// </summary>
        public UInt32 Serial { get; set; }

        /// <summary>
        /// 运行状态
        /// </summary>
        public DRIVE_MAN_STATUS Status { get; set; }
    }
    public delegate void PushRunResultEventHandler(object sender, PushRunResultEventArgs e);
322 323 324 325 326 327 328 329
    /// <summary>
    /// 异常不回复
    /// </summary>
    /// <param name="asyncContext"></param>
    /// <param name="retData"></param>
    public delegate void CallBackHandler(object asyncContext, object retData);


潘栩锋's avatar
潘栩锋 committed
330
    public class CallBackAttribute : Attribute
331 332 333 334 335 336 337 338
    {
        public Type RetType;
        public CallBackAttribute(Type type) 
        {
            RetType = type;
        }
    }

潘栩锋's avatar
潘栩锋 committed
339 340 341 342 343 344 345
    /// <summary>
    /// 有数据需要发送
    /// </summary>
    /// <param name="sender"></param>
    public delegate void SendMsgEventHander(object sender);


346 347 348 349 350
    public class GetEncAll_Reponse
    {
        public int pos1;
        public int pos2;
    }
潘栩锋's avatar
潘栩锋 committed
351
    
352 353
    public class GetRunResult_Reponse
    {
潘栩锋's avatar
潘栩锋 committed
354
        public DRIVE_MAN_STATUS result;
355 356
        public UInt32 serial;
    }
潘栩锋's avatar
潘栩锋 committed
357 358 359 360 361 362 363 364 365

    public class GetAccess_Reponse
    {
        public AREA_STATUS status;
        public AREA_ERR ret;
        public byte[] code = new byte[6];
        public UInt16 surplus;
        public byte[] access = new byte[8];
    }
366
}