Exemple #1
0
 /// <summary>
 /// 回调方法-配置器接收时
 /// </summary>
 /// <param name="strNotice"></param>
 /// <param name="bArrBuffer"></param>
 private void SelChsForm_OnNotice(string strNotice, byte[] bArrBuffer)
 {
     if (!(string.IsNullOrEmpty(strNotice) || strNotice.Equals("")))
     {
         string strContent = (RunVariable.IfDebug && bArrBuffer != null) ? string.Format("{0}:{1}", strNotice, ScaleConverter.ByteArr2HexStr(bArrBuffer)) : strNotice;
         ShowSendOrReceiveMessage(strContent);
     }
 }
Exemple #2
0
        private bool ProcessOne(byte[] bufFrame, out string strErrMsg)
        {
            bool bIfSucc = false;

            strErrMsg = "";
            Package.ECommandType eResponseType = Package.GetResponseType(bufFrame, out strErrMsg);
            switch (eResponseType)
            {
            case Package.ECommandType.SwipingCard:
                SwipingCardData objSwipingCardData = new SwipingCardData();
                IList <string>  listResponseData   = new List <string>();
                bIfSucc = Package.ParseBag_SwipingCard(bufFrame, ref objSwipingCardData, out strErrMsg);
                if (bIfSucc)
                {
                    SwipingCardData objSent = (objSwipingCardData != null) ? (SwipingCardData)objSwipingCardData.Clone() : null;
                    _OnReceiveSwipingCard?.Invoke(objSent, strErrMsg);

                    DoNotice(string.Format("接收刷卡数据正确"), bufFrame);

                    //保存记录
                    SaveSwipingCardData(objSent);

                    //响应
                    byte[] bArrTargetAddress  = new byte[5];
                    byte[] bArrOrigialAddress = new byte[5];
                    Array.Copy(bufFrame, 5, bArrTargetAddress, 0, bArrTargetAddress.Length);
                    Array.Copy(bufFrame, 10, bArrOrigialAddress, 0, bArrOrigialAddress.Length);

                    //55 AA 00 0B 20 01 00 00 00 00 06 12 34 00 01 1E  主机链路层ACK
                    byte[] bArrBag = Package.BuildBag_MainDeviceACK(bArrTargetAddress, bArrOrigialAddress);
                    bIfSucc = SendCommand(bArrBag, out strErrMsg);
                    DoNotice(string.Format("{0}{1}", "发送主机链路层ACK指令", (bIfSucc ? "成功" : "失败")), bArrBag);

                    /*
                     * Thread.Sleep(50);//停顿数50毫秒
                     *
                     * //55 FF 00 0C 21 06 12 34 00 01 01 00 00 00 00 00 xx 主机应答
                     * byte[] bArrBag2 = Package.BuildBag_MainDeviceResponse(bArrTargetAddress, bArrOrigialAddress);
                     * bIfSucc = SendCommand(bArrBag2, out strErrMsg);
                     * DoNotice(string.Format("{0}{1}", "发送主机应答指令", (bIfSucc ? "成功" : "失败")), bArrBag2);
                     * if (!(bArrBag2 == null || bArrBag2.Length == 0))
                     * {
                     *  this._LastReSendTime = DateTime.Now;
                     *  this._RetryCommandList.Add(new Model.RetryCommand(ScaleConverter.ByteArr2HexStr(bArrBag2).Replace(" ", ""), 1));
                     * }
                     * //55 AA 00 0B 21 06 12 34 00 01 01 00 00 00 00 XX 刷卡头链路层ACK
                     */

                    bIfSucc = true;
                }
                break;

            case Package.ECommandType.CardHeadDeviceACK:
                try
                {
                    if (!(this._RetryCommandList == null || this._RetryCommandList.Count == 0))
                    {
                        string strBuffHexStr    = "";
                        string strCommandHexStr = "";
                        for (int i = this._RetryCommandList.Count - 1; i >= 0; i--)
                        {
                            Model.RetryCommand objCommand = (Model.RetryCommand) this._RetryCommandList[i];
                            if (objCommand != null)
                            {
                                strCommandHexStr = objCommand.CommandHexStr.Substring(10, 20);
                                strBuffHexStr    = ScaleConverter.ByteArr2HexStr(bufFrame).Replace(" ", "").Substring(10, 20);
                                if (string.Compare(strCommandHexStr, strBuffHexStr) == 0)
                                {
                                    this._RetryCommandList.RemoveAt(i);
                                }
                            }
                        }
                    }
                }
                catch (Exception err)
                {
                    strErrMsg = err.Message;
                }
                DoNotice(string.Format("接收刷卡头链路层ACK指令"), bufFrame);
                bIfSucc = true;
                break;

            case Package.ECommandType.PingResponse:
                DeviceAddress objDeviceAddress = new DeviceAddress();
                bIfSucc = Package.ParseBag_PingResponse(bufFrame, ref objDeviceAddress, out strErrMsg);
                if (bIfSucc)
                {
                    DeviceAddress objSent = (objDeviceAddress != null) ? (DeviceAddress)objDeviceAddress.Clone() : null;
                    _OnPingResponse?.Invoke(objSent, strErrMsg);
                    //响应
                    byte[] bArrTargetAddress  = new byte[5];
                    byte[] bArrOrigialAddress = new byte[5];
                    Array.Copy(bufFrame, 5, bArrTargetAddress, 0, bArrTargetAddress.Length);
                    Array.Copy(bufFrame, 10, bArrOrigialAddress, 0, bArrOrigialAddress.Length);

                    //Thread.Sleep(50);//停顿数50毫秒

                    //55 FF 00 0D 93 01 00 00 00 00 06 12 34 00 00 41 98 FE  从机PING应答
                    //55 AA 00 0B 93 01 00 00 00 00 06 12 34 00 00 09 AA   主机链路层应答

                    byte[] bArrBag = Package.BuildBag_MainDeviceACK4Ping(bArrTargetAddress, bArrOrigialAddress);
                    bIfSucc = SendCommand(bArrBag, out strErrMsg);
                    //DoNotice(string.Format("{0}{1}", "发送主机链路层ACK指令", (bIfSucc ? "成功" : "失败")), bArrBag);

                    //_OnPingNotice?.Invoke(string.Format("发送Ping指令{0}", (bIfSucc ? "成功" : "失败")), bArrBag);
                    //if (_OnPingNotice != null) _OnPingNotice(string.Format("发送主机链路层ACK指令{0}", (bIfSucc ? "成功" : "失败")), bArrBag);
                }
                break;

            case Package.ECommandType.MainDeviceACK4PingResponse:
                DeviceAddress objDeviceAddress1 = new DeviceAddress();
                bIfSucc = Package.ParseBag_MainDeviceACK4PingResponse(bufFrame, ref objDeviceAddress1, out strErrMsg);
                if (bIfSucc)
                {
                    DeviceAddress objSent = (objDeviceAddress1 != null) ? (DeviceAddress)objDeviceAddress1.Clone() : null;
                    _OnMainDeviceACK4PingResponse?.Invoke(objSent, strErrMsg);
                }
                break;

            default:
                strErrMsg = "无效数据";
                bIfSucc   = false;
                break;
            }
            return(bIfSucc);
        }
Exemple #3
0
 /// <summary>
 /// 回调方法-当有Ping设备时
 /// </summary>
 /// <param name="strNotice"></param>
 /// <param name="bArrBuffer"></param>
 private void OnPingNotice(string strNotice, byte[] bArrBuffer)
 {
     if (!(string.IsNullOrEmpty(strNotice) || strNotice.Equals("")))
     {
         string strContent = (RunVariable.IfDebug && bArrBuffer != null) ? string.Format("{0}:{1}", strNotice, ScaleConverter.ByteArr2HexStr(bArrBuffer)) : strNotice;
         ShowNotice(string.Format("{0}   {1}", DateTime.Now.ToString(Config.LongTimeFormat), strContent));
     }
 }
Exemple #4
0
        private void OnMainDeviceACK4PingResponse(DeviceAddress objDeviceAddress, string strErrInfo)
        {
            if (!(objDeviceAddress == null || !string.IsNullOrEmpty(strErrInfo)))
            {
                if (this._LastDeviceAddress != null)
                {
                    if (this._LastDeviceAddress.DeviceNo.Equals(objDeviceAddress.DeviceNo) && this._LastDeviceAddress.DeviceType.Equals(objDeviceAddress.DeviceType))
                    {
                        //2017-07-13 11:14:17   接收从机链路层ACK指令:55 AA 00 0B 92 06 01 01 00 00 01 00 00 00 00 57
                        string strContent = string.Format("接收从机链路层ACK指令");
                        strContent = (RunVariable.IfDebug && objDeviceAddress.Buffer != null) ? string.Format("{0}:{1}", strContent, ScaleConverter.ByteArr2HexStr(objDeviceAddress.Buffer)) : strContent;
                        ShowNotice(string.Format("{0}   {1}", DateTime.Now.ToString(Config.LongTimeFormat), strContent));

                        //this._LastDeviceAddress = null;
                        timer1.Enabled = false;
                    }
                }
            }
        }
Exemple #5
0
        private void btnCreate_Click(object sender, EventArgs e)
        {
            PointLatLng point = PositionConverter.ParsePointFromString(txtPosition.Text);
            int         number;
            double      speed, bearing, height;

            if (point.IsEmpty)
            {
            }
            else if (!int.TryParse(txtNumber.Text, out number))
            {
            }
            else if (!double.TryParse(txtSpeed.Text, out speed))
            {
            }
            else if (!double.TryParse(txtBearing.Text, out bearing))
            {
            }
            else if (!double.TryParse(txtHeight.Text, out height) && txtHeight.Text != "Unknown")
            {
            }
            else
            {
                var track = new TrackData
                {
                    CallSign    = txtCallSign.Text.ToUpper(),
                    Status      = (TrackStatus)Enum.Parse(typeof(TrackStatus), cmbStatus.Text),
                    Number      = number,
                    Position    = point,
                    Speed       = ScaleConverter.ConvertSpeed(speed, speedScale, "knots"),
                    Bearing     = ScaleConverter.ConvertBearing(bearing, bearingScale, "degree"),
                    LastUpdated = DateTime.Now
                };
                if (editMode)
                {
                    MessageBox.Show("Passin");
                    if (this.track != null)
                    {
                        track.Faker = this.track.Faker;
                        if (txtHeight.Text != "Unknown")
                        {
                            track.Height = ScaleConverter.ConvertHeight(height, heightScale, "ft");
                        }
                        if (txtCallSign.Text == "")
                        {
                            track.CallSign = null;
                        }
                        if (track.Status == TrackStatus.Pending)
                        {
                            track.Status = TrackStatus.OverridePending;
                        }
                        CommandResponse response = ControlViews.Main.trackHandler.Update(track);
                        if (response.Code == CommandResponseCode.Success)
                        {
                            ControlViews.Track.SetControl(ControlViews.TrackView);
                            ControlViews.TrackView.setTrackInfo(track);
                        }
                        else
                        {
                            MessageBox.Show(response.Message);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Passin2");
                    track.Faker  = true;
                    track.Height = ScaleConverter.ConvertHeight(height, heightScale, "ft");
                    CommandResponse response = ControlViews.Main.trackHandler.Create(track);
                    if (response.Code == CommandResponseCode.Success)
                    {
                        clearFields();
                    }
                    else
                    {
                        MessageBox.Show(response.Message);
                    }
                }
            }
        }
Exemple #6
0
        private void OnPingResponse(DeviceAddress objDeviceAddress, string strErrInfo)
        {
            if (!(objDeviceAddress == null || !string.IsNullOrEmpty(strErrInfo)))
            {
                if (this._LastDeviceAddress != null)
                {
                    if (this._LastDeviceAddress.DeviceNo.Equals(objDeviceAddress.DeviceNo) && this._LastDeviceAddress.DeviceType.Equals(objDeviceAddress.DeviceType) && this._LastDeviceAddress.PingNum.Equals(objDeviceAddress.PingNum))
                    {
                        string strContent = string.Format("ping {0}{1}成功 !", GetDeviceTypeDesc(objDeviceAddress.DeviceType), objDeviceAddress.DeviceNo);
                        strContent = (RunVariable.IfDebug && objDeviceAddress.Buffer != null) ? string.Format("{0}:{1}", strContent, ScaleConverter.ByteArr2HexStr(objDeviceAddress.Buffer)) : strContent;
                        ShowNotice(string.Format("{0}   {1}", DateTime.Now.ToString(Config.LongTimeFormat), strContent));

                        this._LastDeviceAddress = null;
                        //timer1.Enabled = false;
                    }
                }
            }
        }
Exemple #7
0
        public void MediatorContext_OnEarthquake(object sender, Client.Peer.EPSPQuakeEventArgs e)
        {
            if (e.InformationType == QuakeInformationType.Unknown)
            {
                return;
            }

            var earthquakeNotification = configuration.EarthquakeNotification;

            if (!earthquakeNotification.Enabled)
            {
                return;
            }
            if (!earthquakeNotification.Notice)
            {
                return;
            }

            // 震源情報は震度 3 以上で発表されるため、震度 3 とみなす
            var scale =
                e.InformationType == QuakeInformationType.Destination ?
                30 :
                ScaleConverter.Str2Int(e.Scale);

            if (scale < earthquakeNotification.MinScale)
            {
                return;
            }

            var builder = new ToastContentBuilder();

            // タイトル行
            var type = e.InformationType switch
            {
                QuakeInformationType.ScalePrompt => "震度速報",
                QuakeInformationType.Destination => "震源情報",
                QuakeInformationType.ScaleAndDestination => "震源・震度情報",
                QuakeInformationType.Detail => "地震情報",
                QuakeInformationType.Foreign => "遠地(海外)地震情報",
                _ => "地震情報",
            };

            if (e.InformationType == QuakeInformationType.Foreign || e.InformationType == QuakeInformationType.Destination)
            {
                builder.AddText($"{type} ({e.OccuredTime})");
            }
            else
            {
                builder.AddText($"{type} ({e.OccuredTime} 震度{e.Scale})");
            }

            if (e.InformationType == QuakeInformationType.ScalePrompt)
            {
                var maxScaleGroup = e.PointList.OrderBy(e => e.ScaleInt).Reverse().GroupBy(e => e.Scale).First();
                builder.AddText($"震度{maxScaleGroup.Key}: {string.Join('、', maxScaleGroup.Select(e => e.Name))}");
            }
            else
            {
                var tsunamiDescription = e.TsunamiType switch
                {
                    DomesticTsunamiType.None => "津波の心配なし",
                    DomesticTsunamiType.Checking => "津波の有無調査中",
                    DomesticTsunamiType.Effective => "津波予報 発表中",
                    _ => "津波の有無不明",
                };
                builder.AddText($"{e.Destination} (深さ{e.Depth}, {e.Magnitude}) {tsunamiDescription}");
            }

            builder.AddArgument("type", "quake").AddArgument("receivedAt", e.ReceivedAt.ToString());
            builder.Show();
        }
Exemple #8
0
        /// <summary>
        /// 创建包-写卡
        /// </summary>
        /// <param name="objCard"></param>
        /// <returns></returns>
        private static byte[] BuildBag_WriteCard(Card objCard)
        {
            byte[] arrRtn = new byte[0];
            if (objCard != null)
            {
                int iAreaCode, iBuidCode, iUnitCode, iRoomCode;
                iAreaCode = objCard.RAreaCode;
                iBuidCode = objCard.RBuildCode;
                iUnitCode = objCard.RUnitCode;
                iRoomCode = objCard.RRoomCode;

                if ((iAreaCode >= 0 && iAreaCode <= 99) && (iBuidCode >= 0 && iBuidCode <= 99) && (iUnitCode >= 0 && iUnitCode <= 99) && (iRoomCode >= 0 && iRoomCode <= 9999))
                {
                    byte[] arrRtnTemp = new byte[1450];
                    int    iIndex     = 0;
                    //帧起始符 高位
                    arrRtnTemp[iIndex++] = 0x55;
                    //帧起始符 低位
                    arrRtnTemp[iIndex++] = 0xFF;
                    //数据长度 高位
                    arrRtnTemp[iIndex++] = 0x00;
                    //数据长度 低位
                    arrRtnTemp[iIndex++] = 0x21;
                    //命令字
                    arrRtnTemp[iIndex++] = GetCommandCodeByType(ECommandType.WriteCard_Send);

                    //区编码
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(iAreaCode));
                    //栋编码
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(iBuidCode));
                    //单元编码
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(iUnitCode));

                    string strRoomCode = FormatRoomCode(iRoomCode);
                    //楼层编码
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(strRoomCode.Substring(0, 2)));
                    //房间编码
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(strRoomCode.Substring(2, 2)));

                    //过期时间
                    DateTime dt      = Functions.ConvertToNormalTime(objCard.ExpiryDate);
                    string   strYear = dt.Year.ToString();
                    //年-高位
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(strYear.Substring(0, 2));
                    //年-低位
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(strYear.Substring(2, 2));
                    //月
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(dt.Month));
                    //日
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(dt.Day));

                    //卡片类型
                    arrRtnTemp[iIndex++] = Convert.ToByte(objCard.CardType);

                    DateTime CreateDt = System.DateTime.Now;
                    //预留6个字节
                    //iIndex += 6;
                    //发卡时间 当前 年
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(CreateDt.Year.ToString().Substring(2, 2)));
                    //发卡时间 当前 月
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(CreateDt.Month));
                    //发卡时间 当前 日
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(CreateDt.Day));
                    //发卡时间 当前 时
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(CreateDt.Hour));
                    //发卡时间 当前 分
                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(CreateDt.Minute));
                    //发卡时间 当前 写扇区  先转成16进制再转成字符串
                    string chsStr = "";
                    switch (Convert.ToInt32(objCard.listChsInfo[1][0]))
                    {
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        chsStr = objCard.listChsInfo[1][0].ToString();
                        break;

                    case 10:
                        chsStr = string.Format("A");
                        break;

                    case 11:
                        chsStr = string.Format("B");
                        break;

                    case 12:
                        chsStr = string.Format("C");
                        break;

                    case 13:
                        chsStr = string.Format("D");
                        break;

                    case 14:
                        chsStr = string.Format("E");
                        break;

                    case 15:
                        chsStr = string.Format("F");
                        break;
                    }

                    arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(chsStr));

                    //序号 16个字节
                    string strSerialNo = objCard.SerialNo.Replace(" ", "").PadLeft(32, '0');
                    for (int i = 1; i <= 16; i++)
                    {
                        arrRtnTemp[iIndex++] = ScaleConverter.OneHexStr2Byte(strSerialNo.Substring((i - 1) * 2, 2));
                    }

                    //CRC8校验
                    arrRtnTemp[iIndex++] = CRC8A.GetCRC8(arrRtnTemp, 0, iIndex - 1);

                    arrRtn = new byte[iIndex];
                    Array.Copy(arrRtnTemp, arrRtn, arrRtn.Length);
                }
            }
            return(arrRtn);
        }
Exemple #9
0
        /// <summary>
        /// 解包(读卡响应包)
        /// </summary>
        /// <param name="bArrBag"></param>
        /// <returns></returns>
        public static bool ParseBag_ReadCard(byte[] bArrBag, ref CardData objCardData, out string strErrMsg)
        {
            bool bIfSucc = false;

            objCardData = new CardData();
            strErrMsg   = "";
            try
            {
                //数据位
                byte bCode = bArrBag[5];
                strErrMsg = GetFaultInfoByCode(bCode);
                if (strErrMsg.Equals(""))
                {
                    //解析卡号
                    int    iBeginIndex = 6;
                    byte[] bArrCardNo  = new byte[4];
                    for (int i = bArrCardNo.Length - 1; i >= 0; i--)
                    {
                        bArrCardNo[i] = bArrBag[iBeginIndex++];
                    }
                    objCardData.CardNo = Functions.ConverToUInt(bArrCardNo);//低字节在前,高字节在后

                    //空卡直接返回 年月日为零则是空卡
                    if (int.Parse(bArrBag[15].ToString()) +
                        int.Parse(bArrBag[16].ToString()) +
                        int.Parse(bArrBag[17].ToString()) +
                        int.Parse(bArrBag[18].ToString()) == 0)
                    {
                        objCardData.CardType = 6;
                    }
                    else
                    {
                        //解析区编码
                        objCardData.AreaCode = Convert.ToInt32(ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]));
                        //解析栋编码
                        objCardData.BuildCode = Convert.ToInt32(ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]));
                        //解析单元编码
                        objCardData.UnitCode = Convert.ToInt32(ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]));
                        //解析楼层编码
                        int iFloorCode = Convert.ToInt32(ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]));
                        //解析房间编码
                        objCardData.RoomCode = (iFloorCode * 100) + Convert.ToInt32(ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]));

                        //解析日期
                        //解析年
                        string strYear = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]) + ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        //解析月
                        string strMonth = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        //解析日
                        string strDay = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        objCardData.ExpiryDate = Functions.ConvertToUnixTime(Convert.ToDateTime(string.Format("{0}-{1}-{2} 00:00:00", strYear, strMonth, strDay)));

                        //解析卡片类型
                        objCardData.CardType = Convert.ToInt32(bArrBag[iBeginIndex++]);

                        //解析预留 6个字节
                        //iBeginIndex += 6;
                        //新卡预留信息为开卡时间与及当前写扇区,旧卡信息为空
                        //bArrBag[iBeginIndex].ToString();
                        string strBeginYear  = "20" + ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        string strBeginMonth = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        string strBeginDay   = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        string strBeginHour  = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        string strBeginMin   = ScaleConverter.Byte2HexStr(bArrBag[iBeginIndex++]);
                        string chsStr        = bArrBag[iBeginIndex++].ToString();

                        //月份为00表示旧卡
                        if (strBeginMonth.CompareTo("00") != 0 && strBeginMonth.CompareTo("0") != 0)
                        {
                            objCardData.BeginDate = Functions.ConvertToUnixTime(Convert.ToDateTime(string.Format("{0}-{1}-{2} {3}:{4}:00", strBeginYear, strBeginMonth, strBeginDay, strBeginHour, strBeginMin)));
                        }

                        //扇区00也表示旧卡, 防止乱写情况还是做个判断
                        if (chsStr.CompareTo("00") != 0 && chsStr.CompareTo("0") != 0)
                        {
                            objCardData.listChsInfo[1].Add(Convert.ToInt32(chsStr));
                        }
                        else
                        {
                            objCardData.listChsInfo[1].Add(1);
                        }

                        //解析序号 16个字节
                        byte[] bArrSerialNo = new byte[16];
                        Array.Copy(bArrBag, iBeginIndex, bArrSerialNo, 0, bArrSerialNo.Length);
                        objCardData.SerialNo = ScaleConverter.ByteArr2HexStr(bArrSerialNo).Replace(" ", "");
                    }
                    bIfSucc = true;
                }
            }
            catch (Exception err)
            {
                strErrMsg = err.Message;
            }
            return(bIfSucc);
        }
Exemple #10
0
        /// <summary>
        /// 创建发送包
        /// </summary>
        /// <param name="CommandType">指令类型</param>
        /// <param name="objCard">写卡指令专用</param>
        /// <param name="dt">时间,同步时间专用</param>
        /// <param name="objDeviceAddress">地址,Ping指令专用</param>
        /// <param name="chs">扇区重置,写卡专用</param>
        /// <returns></returns>
        public static byte[] BuildBag(ECommandType CommandType, Card objCard = null, String chs = null, DateTime?dt = null, DeviceAddress objDeviceAddress = null)
        {
            byte[] arrRtn = new byte[0];
            byte[] arrTemp;
            switch (CommandType)
            {
            case ECommandType.WriteCard_Send:
                arrTemp = BuildBag_WriteCard(objCard);
                if (arrTemp.Length > 0)
                {
                    arrRtn = new byte[arrTemp.Length];
                    Array.Copy(arrTemp, arrRtn, arrRtn.Length);
                }
                break;

            case ECommandType.ReadCard_Send:
                arrRtn  = new byte[6];
                arrTemp = ScaleConverter.HexStr2ByteArr("55 FF 00 01 34");
                Array.Copy(arrTemp, arrRtn, arrTemp.Length);
                arrRtn[5] = CRC8A.GetCRC8(arrTemp);
                break;

            case ECommandType.Ping:
                if (objDeviceAddress != null)
                {
                    arrTemp = BuildBag_Ping(objDeviceAddress);
                    if (arrTemp.Length > 0)
                    {
                        arrRtn = new byte[arrTemp.Length];
                        Array.Copy(arrTemp, arrRtn, arrRtn.Length);
                    }
                }
                break;

            case ECommandType.SyncTime_Send:    //同步时间
                if (dt != null)
                {
                    byte[] arrRtnTemp2 = BuildBag_SyncTime(Convert.ToDateTime(dt));
                    if (arrRtnTemp2.Length > 0)
                    {
                        arrRtn = new byte[arrRtnTemp2.Length];
                        Array.Copy(arrRtnTemp2, arrRtn, arrRtn.Length);
                    }
                }
                break;

            case ECommandType.ChsSel:    //扇区查询
                arrTemp = BuildBag_ChsSel();
                if (arrTemp.Length > 0)
                {
                    arrRtn = new byte[arrTemp.Length];
                    Array.Copy(arrTemp, arrRtn, arrRtn.Length);
                }
                break;

            case ECommandType.ChsClean:    //扇区重置
                arrTemp = BuildBag_ChsClean(chs);
                if (arrTemp.Length > 0)
                {
                    arrRtn = new byte[arrTemp.Length];
                    Array.Copy(arrTemp, arrRtn, arrRtn.Length);
                }
                break;
            }
            return(arrRtn);
        }
Exemple #11
0
        /// <summary>
        /// 创建包-扇区重置
        /// </summary>
        /// <param name="chs">需要重置的扇区</param>
        /// <returns></returns>
        private static byte[] BuildBag_ChsClean(String chs)
        {
            byte[] arrRtn = new byte[7];
            int    iIndex = 0;

            //帧起始符 高位
            arrRtn[iIndex++] = 0x55;
            //帧起始符 低位
            arrRtn[iIndex++] = 0xFF;
            //数据长度 高位
            arrRtn[iIndex++] = 0x00;
            //数据长度 低位
            arrRtn[iIndex++] = 0x02;
            //命令字
            arrRtn[iIndex++] = 0x38;
            //数据 要重置的扇区

            string chsStr = "";

            switch (Convert.ToInt32(chs))
            {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                chsStr = chs;
                break;

            case 10:
                chsStr = string.Format("A");
                break;

            case 11:
                chsStr = string.Format("B");
                break;

            case 12:
                chsStr = string.Format("C");
                break;

            case 13:
                chsStr = string.Format("D");
                break;

            case 14:
                chsStr = string.Format("E");
                break;

            case 15:
                chsStr = string.Format("F");
                break;
            }
            arrRtn[iIndex++] = ScaleConverter.OneHexStr2Byte(BQ2(chsStr));

            //CRC8校验
            arrRtn[iIndex++] = CRC8A.GetCRC8(arrRtn, 0, arrRtn.Length - 1);
            return(arrRtn);
        }