コード例 #1
0
        /// <summary>Создать запрос на счетчик Энергомера</summary>
        /// <param name="addresssDevice">Адрес устройства</param>
        /// <param name="codeCommand">Код команды</param>
        /// <param name="data">Необязательный массив параметров для комманды</param>
        byte[] CreateRequest(int addresssDevice, ushort codeCommand, string psw, params byte[] data)
        {
            var buff = new List <byte>();

            buff.Add(Codes.BYTE_END);
            buff.Add(Codes.BYTE_OPT);
            buff.AddRange(BitConverter.GetBytes((ushort)addresssDevice));
            buff.Add(0);
            buff.Add(0);

            //пакет
            for (int i = 0; i < 4; i++)
            {
                byte b = byte.Parse(psw.Substring(i, 1));
                buff.Add(b);
            }

            /*buff.Add(0);
            *  buff.Add(0);
            *  buff.Add(0);
            *  buff.Add(0);*/
            byte serv = (byte)(Codes.BYTE_SERV | data.Length);

            buff.Add(serv);
            buff.AddRange(BitwiseUtils.Reverse(BitConverter.GetBytes(codeCommand)));
            for (int i = 0; i < data.Length; i++)
            {
                buff.Add(data[i]);
            }
            buff.Add(CRC.getCRC(buff.ToArray(), 0));
            var list = encodePacket(buff);

            list.Add(Codes.BYTE_END);
            return(list.ToArray());
        }
コード例 #2
0
        public OperationResult TryWriteDateDate(IIODriverClient channel, int address, string psw, TimeZoneMap map, DeviceCompOn diff)
        {
            // Установка даты и времени защищена основным паролем.

            OperationResult result = WaitRequest(channel);

            if (!result.IsGood)
            {
                return(result);
            }

            DateTimeZone dateTime = diff.GetServerToDeviceTime(map);

            byte[] arr = new byte[7];
            arr[0] = BitwiseUtils.DecToBCD((byte)dateTime.Second);
            arr[1] = BitwiseUtils.DecToBCD((byte)dateTime.Minute);
            arr[2] = BitwiseUtils.DecToBCD((byte)dateTime.Hour);
            arr[3] = (byte)dateTime.DayOfWeek;
            arr[4] = BitwiseUtils.DecToBCD((byte)dateTime.Day);
            arr[5] = BitwiseUtils.DecToBCD((byte)dateTime.Month);
            arr[6] = BitwiseUtils.DecToBCD((byte)(dateTime.Year - 2000));

            try
            {
                var send = CreateRequest(address, Codes.CODE_WRITE_DATETIME, psw, arr);
                result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer);
            }
            catch (Exception e)
            {
                result = OperationResult.From(e);
            }
            return(result);
        }
コード例 #3
0
        public void DoRecurseUpdateLayers(Transform trans)
        {
            if (!_removeFromLayer)
            {
                int val = _targetLayer.value == 0 ? 0 : BitwiseUtils.Position(_targetLayer.value) - 1;

                //trans.gameObject.layer |= _layerMask;
                trans.gameObject.layer = val;
            }
            else
            {
                trans.gameObject.layer = 0;
            }

            if (_recursivelyChangeChildren)
            {
                foreach (Transform child in trans)
                {
                    if (child == null)
                    {
                        continue;
                    }
                    DoRecurseUpdateLayers(child);
                }
            }
        }
コード例 #4
0
        public bool HasAccountStatusFlag(AccountStatusFlags flag)
        {
            var account = GetCurrentLoggedInAccount();

            //TODO THOW ERROR???
            if (account == null)
            {
                return(false);
            }

            return(BitwiseUtils.HasFlag(account.StatusFlags, ( int )flag));
        }
コード例 #5
0
        private DateTimeZone ParseDateTime(byte[] answer, TimeZoneMap zone)
        {
            var year  = 2000 + BitwiseUtils.BcdToDec(answer[6]);
            var month = BitwiseUtils.BcdToDec(answer[5]);
            var day   = BitwiseUtils.BcdToDec(answer[4]);
            int hour  = BitwiseUtils.BcdToDec(answer[2]);
            int min   = BitwiseUtils.BcdToDec(answer[1]);
            int sec   = BitwiseUtils.BcdToDec(answer[0]);

            var ret = new DateTimeZone(year, month, day, hour, min, sec, zone);

            return(ret);
        }
コード例 #6
0
        public void RemoveAccountStausFlag(AccountStatusFlags flag)
        {
            var account = GetCurrentLoggedInAccount();

            //TODO THOW ERROR???
            if (account == null)
            {
                return;
            }

            account.StatusFlags = BitwiseUtils.RemoveFlag(account.StatusFlags, ( int )flag);

            Context.LogValidationFailSaveChanges(RootRepository.SecurityRepository.AuditLogUserId);
        }
コード例 #7
0
        /// <summary>Показание счетчика с момента запуска</summary>

        /*private OperationResult TryReadEnergyFromLaunch(IIODriverClient channel, ShortRequest request, out Energy response)
         * {
         *  return TryReadEnergy(channel, request, Codes.CODE_TOTAL, 0, 0, 0, out response);
         * }*/
        #endregion

        #region Энергия по времени

        /// <summary>Чтение 30 минутных срезов энергии</summary>
        /// <param name="channel">Канал</param>
        /// <param name="request">Запрос</param>
        /// <param name="timeSlices">Время среза должно быть точное и выравненне</param>
        public OperationResult TryReadSlicesEnergy(IIODriverClient channel, string psw, DeviceCompOn deviceTime, SlicesQuery request, out Energy response)
        {
            response = Energy.Default;
            //log.Trace.Write(1, (l) => l.Info("Emul: {0}", request.EmulError));
            if (!request.EmulError)
            {
                //log.Trace.Write(1, (l) => l.Info("DiffMsec: {0}, DiffMsecReal: {1}, DeviceTimeUtc: {2}, IsTimeSlices: {3}, TimeOneSidePathMsec: {4}, TimeSlices: {5}",
                //  deviceTime.DiffMsec, deviceTime.DiffMsecReal, deviceTime.GetDeviceTimeUtc(),
                //  deviceTime.IsItTime(request.GetTimeSlicesFrom30()), deviceTime.TimeOneSidePathMsec, request.GetTimeSlicesFrom30()));
                if (!deviceTime.IsItTime(request.GetTimeSlicesFrom30().AddSeconds(10)))
                {
                    return(new OperationResult(Quality.Bad, "Time has not yet come"));
                }
            }

            OperationResult result;

            try
            {
                byte[] arr = new byte[5];
                arr[0] = BitwiseUtils.DecToBCD(request.Day);
                arr[1] = BitwiseUtils.DecToBCD(request.Month);
                arr[2] = BitwiseUtils.DecToBCD((byte)(request.TimeSlices.Year - 2000));
                arr[3] = request.Index;
                arr[4] = 1;

                var send = CreateRequest(request.Address, Codes.CODE_READ_ENERGY_INTERVAL, psw, arr);
                result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer);

                Array.Resize <byte>(ref answer, 4);
                var seg   = new ByteArraySegment(answer, 0, answer.Length);
                var value = seg.ReadUInt32(0);
                if (value == 0xFFFFFF)
                {
                    response = new Energy(0, 0, 0, 0); //это значит что его нет в памяти и надо возвращать нули
                    return(OperationResult.Bad);
                }
                response = new Energy(value, 0, 0, 0);
                result   = OperationResult.Good;
            }
            catch (Exception e)
            {
                result = OperationResult.From(e);
            }
            return(result);
        }
コード例 #8
0
        public OperationResult TryReadSerialNumber(IIODriverClient channel, int address, string psw, out string response)
        {
            OperationResult result = OperationResult.Bad;

            response = null;
            var send = CreateRequest(address, Codes.CODE_READ_SERIAL_NUMBER, psw, 0x00);

            result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer);
            if (!result.IsGood)
            {
                return(result);
            }
            try
            {
                response = Encoding.ASCII.GetString(BitwiseUtils.Reverse(answer));
            }
            catch (Exception e)
            {
                result = OperationResult.From(e);
            }
            return(result);
        }