コード例 #1
0
        public static void DataProc(byte[] buffer)
        {
            int fzh   = buffer[0];
            int order = buffer[4]; //0x44,D命令
            int mark  = buffer[6]; //3表示分站远程升级相关命令
            StationUpdateState state = StationUpdateState.unKnowm;
            string             msg   = "";

            if (fzh < stationItems.Length - 1 && order == 0x44 && mark == 3)
            {
                GetStateFromByte(buffer[7], ref state, ref msg);

                stationItems[fzh - 1].updateState = state;
                stationItems[fzh - 1].msg         = msg;
                if (state == StationUpdateState.fileMissing)
                {
                    #region ----解析后续缺少序号----

                    #endregion
                }
            }
            else
            {
                LogHelper.Error("回发数据包类型错误!");
            }
        }
コード例 #2
0
        private static void GetStateFromByte(byte data, ref StationUpdateState state, ref string msg)
        {
            int bit0_3 = 0;
            int bit4_7 = 0;

            bit4_7 = (data >> 4) & 0xFF;
            bit0_3 = data & 0x0F;

            if (bit4_7 == 1)
            {
                #region ----=1中心站请求远程升级----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.requestSuccess;
                    msg   = "请求升级成功";
                }
                else
                {
                    state = StationUpdateState.requestFailure;
                    if (bit0_3 == 1)
                    {
                        //=1:升级文件不属于该类设备(不能升级)
                        msg = "升级文件不属于该类设备";
                    }
                    else if (bit0_3 == 2)
                    {
                        //=2:升级条件不满足(不能升级)
                        msg = "升级条件不满足";
                    }
                    else if (bit0_3 == 3)
                    {
                        //=3:本地代码存储空间过小(不能升级)
                        msg = "本地代码存储空间过小";
                    }
                    else if (bit0_3 == 4)
                    {
                        //=4:分站已处于远程升级模式且升级软件版本号与本次请求一致(分站将不更新已接收数据);
                        msg = "分站已处于远程升级模式且升级软件版本号与本次请求一致";
                    }
                    else if (bit0_3 == 5)
                    {
                        //=5:分站已处于升级模式且升级软件版本号与本次请求不匹配(中心站若想升级该分站,应下发强制中止当前升级流程再重新下发本次升级请求。)
                        msg = "分站已处于升级模式且升级软件版本号与本次请求不匹配";
                    }
                    else if (bit0_3 == 6)
                    {
                        //=6:本地存储器不可靠,最近一次升级失败(不能升级)
                        msg = "本地存储器不可靠,最近一次升级失败";
                    }
                    else if (bit0_3 == 7)
                    {
                        //=7:分站还未做好升级准备,稍后再试;(不能升级)
                        msg = "分站还未做好升级准备,稍后再试";
                    }
                    else if (bit0_3 == 8)
                    {
                        //=8:硬件版本号与本地不匹配(不能升级)
                        msg = "硬件版本号与本地不匹配";
                    }
                }
                #endregion
            }
            else if (bit4_7 == 4)
            {
                #region ----=4中心站巡检分站的文件接收情况----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.reciveComplete;
                    msg   = "升级文件已接收完毕";
                }
                else
                {
                    state = StationUpdateState.error;
                    if (bit0_3 == 1)
                    {
                        //=1:升级文件不属于该类设备(不能升级)
                        msg = "升级文件不属于该类设备";
                    }
                    else if (bit0_3 == 2)
                    {
                        //=2:请求的升级文件版本号与本地的升级文件版本号不匹配;(不能升级)
                        msg = "请求的升级文件版本号与本地的升级文件版本号不匹配";
                    }
                    else if (bit0_3 == 3)
                    {
                        //=3:该设备不处于升级模式(不能升级)
                        msg = "该设备不处于升级模式";
                    }
                    else if (bit0_3 == 4)
                    {
                        //=4:升级文件缺失(不能升级,后续有缺失文件编号字段)
                        msg   = "升级文件缺失";
                        state = StationUpdateState.fileMissing;
                    }
                    else if (bit0_3 == 5)
                    {
                        //=5:文件编号异常;
                        msg = "文件编号异常";
                    }
                    else if (bit0_3 == 6)
                    {
                        //=6:硬件版本号不匹配(不能升级)
                        msg = "硬件版本号不匹配";
                    }
                }
                #endregion
            }
            else if (bit4_7 == 5)
            {
                #region ----=5中心站告知分站重启并升级----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.restart;
                    msg   = "分站准备重启并升级";
                }
                else
                {
                    state = StationUpdateState.error;
                    if (bit0_3 == 1)
                    {
                        //=1:升级文件不属于该类设备(不能升级)
                        msg = "升级文件不属于该类设备";
                    }
                    else if (bit0_3 == 2)
                    {
                        //=2:请求的升级文件版本号与本地的升级文件版本号不匹配;(不能升级)
                        msg = "请求的升级文件版本号与本地的升级文件版本号不匹配";
                    }
                    else if (bit0_3 == 3)
                    {
                        //=3:该分站不处于升级模式(不能升级)
                        msg = "该分站不处于升级模式";
                    }
                    else if (bit0_3 == 4)
                    {
                        //=4:该分站升级文件缺失;(不能升级)
                        msg = "该分站升级文件缺失";
                    }
                    else if (bit0_3 == 5)
                    {
                        //=5:文件校验失败(不能升级)
                        msg = "文件校验失败";
                    }
                    else if (bit0_3 == 6)
                    {
                        //=6:硬件版本号不匹配(不能升级)
                        msg = "硬件版本号不匹配";
                    }
                }
                #endregion
            }
            else if (bit4_7 == 6)
            {
                #region ----=6中心站告知分站该次升级过程中止----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.updateCancleSuccess;
                    msg   = "分站已中止该次升级";
                }
                else
                {
                    state = StationUpdateState.error;
                    if (bit0_3 == 1)
                    {
                        //=1:设备类型不匹配(未能中止)
                        msg = "设备类型不匹配";
                    }
                    else if (bit0_3 == 2)
                    {
                        //=2:升级文件版本号不匹配(未能中止)
                        msg = "升级文件版本号不匹配";
                    }
                    else if (bit0_3 == 3)
                    {
                        //=3:硬件版本号不匹配(未能中止)
                        msg = "硬件版本号不匹配";
                    }
                }
                #endregion
            }
            else if (bit4_7 == 7)
            {
                #region ----=7中心站告知分站恢复最近一次备份----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.restore;
                    msg   = "分站已准备恢复操作";
                }
                else
                {
                    state = StationUpdateState.error;
                    if (bit0_3 == 1)
                    {
                        //=1:设备类型不匹配(未能恢复)
                        msg = "设备类型不匹配";
                    }
                    else if (bit0_3 == 2)
                    {
                        //=2:版本号不匹配(未能恢复)
                        msg = "版本号不匹配";
                    }
                    else if (bit0_3 == 3)
                    {
                        //=3:该分站未进行备份,不能恢复;
                        msg = "该分站未进行备份";
                    }
                    else if (bit0_3 == 4)
                    {
                        //=4:分站最近因存储器不可靠而升级失败,不能恢复
                        msg = "分站最近因存储器不可靠而升级失败";
                    }
                    else if (bit0_3 == 5)
                    {
                        //=5:硬件版本号不匹配(未能恢复)
                        msg = "硬件版本号不匹配";
                    }
                }
                #endregion
            }
            else if (bit4_7 == 8)
            {
                #region ----=8中心站查询分站信息----
                if (bit0_3 == 0)
                {
                    state = StationUpdateState.normal;
                    msg   = "分站状态正常";
                }
                else
                {
                    state = StationUpdateState.error;
                    msg   = "未知故障码:" + bit4_7;
                }
                #endregion
            }
        }