Beispiel #1
0
        public override CMessage GetRecordMessage(CMessage message, int Index)
        {
            //获取记录相关报文,根据记录索引号
            CMessage RecordMessage = message.Clone();

            RecordMessage.Schema[0] = (byte)this.Address;

            if (message.Index == 35)
            {
                RecordMessage.Schema[3] = (byte)(CommonUtility.ByteToInt(RecordMessage.Schema[3]) + Index * 0x10);
            }
            else
            {
                RecordMessage.Schema[3] = (byte)(CommonUtility.ByteToInt(RecordMessage.Schema[3]) + Index * 0x08);
            }

            //int crc = CRC16.calcCrc16(RecordMessage.Schema, 0, message.Schema.length);
            //RecordMessage.Schema[message.Schema.length] = (byte) (crc & 0x00FF);
            //RecordMessage.Schema[message.Schema.length + 1] = (byte) ((crc & 0xFF00) >> 8);

            return(RecordMessage);
        }
Beispiel #2
0
        public override bool SyncDateTime()
        {
            String DateString = DateTime.Now.ToString("yyMMdd");
            String TimeString = DateTime.Now.ToString("HHmmss");

            byte[] DateBytes = CommonUtility.str2Bcd(DateString);
            byte[] TimeBytes = CommonUtility.str2Bcd(TimeString);

            CMessage message      = this.GetMessage(57);
            CMessage WriteMessage = message.Clone();

            WriteMessage.Schema[0]  = (byte)this.Address;
            WriteMessage.Schema[8]  = DateBytes[0];
            WriteMessage.Schema[9]  = DateBytes[1];
            WriteMessage.Schema[10] = DateBytes[2];
            WriteMessage.Schema[12] = TimeBytes[0];
            WriteMessage.Schema[13] = TimeBytes[1];
            WriteMessage.Schema[14] = TimeBytes[2];

            AutoResetEvent NotifyObj = new AutoResetEvent(false);

            return(this.ExchangeMessage(WriteMessage, NotifyObj));
        }
Beispiel #3
0
        public override bool WriteVar(CVar Var, String Value, AutoResetEvent objectNotify)
        {
            //写变量
            int RawValue = 0;

            if (Var.Table)
            {
                //查表
                bool ValidValue = false;
                for (int TableIndex = 0; TableIndex < Var.Tables.Count; TableIndex++)
                {
                    CTable table = Var.Tables[TableIndex];
                    if (table.Value.ToString() == (Value.ToString()))
                    {
                        RawValue   = table.Index;
                        ValidValue = true;
                        break;
                    }
                }

                if (!ValidValue)
                {
                    return(false);
                }
            }
            else
            {
                //根据数据类型分别处理
                switch (Var.DataType)
                {
                case 1:
                    RawValue = Convert.ToInt32(Convert.ToDouble(Value.ToString()) / Var.Multiple);
                    break;

                case 5:
                    double DoubleValue = Convert.ToDouble(Value.ToString());

                    RawValue = Convert.ToInt32(DoubleValue / Var.Multiple);

                    if (Var.Memo == ("最高位为1扩大100倍,为0扩大10倍"))
                    {
                        if (DoubleValue < 10)
                        {
                            RawValue = Convert.ToInt32(DoubleValue * 100 + 32768);
                        }
                        else
                        {
                            RawValue = Convert.ToInt32(DoubleValue * 10);
                        }
                    }
                    break;

                case 9:
                    RawValue = (Value.ToString() == ("否") || Value.ToString().ToLower() == ("false")) ? 0 : 1;
                    break;

                //case 10 : break;
                default: return(false);
                }
            }

            CMessage message      = (CMessage)Var.OwnerMessage;
            CMessage WriteMessage = message.Clone();

            WriteMessage.Schema[0] = (byte)this.Address;
            WriteMessage.Schema[1] = 0x06;

            int VarAddress = CommonUtility.ByteToInt(WriteMessage.Schema[2]) * 256 + CommonUtility.ByteToInt(WriteMessage.Schema[3]) + Var.ByteOffset / 2;

            WriteMessage.Schema[2] = (byte)((VarAddress & 0xFF00) >> 8);
            WriteMessage.Schema[3] = (byte)(VarAddress & 0x00FF);

            if (Var.BitOffset < 0)
            {
                if (Var.Length == 16)
                {
                    WriteMessage.Schema[4] = (byte)((RawValue & 0xFF00) >> 8);
                    WriteMessage.Schema[5] = (byte)(RawValue & 0x00FF);
                }
            }
            else
            {
                int TotalWord = message.Response[Var.ByteOffset + 3] * 256 + message.Response[Var.ByteOffset + 4];
                int W         = 0xFFFF;
                W         = W << (16 - Var.Length - Var.BitOffset);
                W         = W & 0x0000FFFF;
                W         = W >> (16 - Var.Length);
                W         = W & 0x0000FFFF;
                W         = W << Var.BitOffset;
                W         = W & 0x0000FFFF;
                W         = ~W;
                W         = W & 0x0000FFFF;
                TotalWord = TotalWord & W;
                RawValue  = RawValue << Var.BitOffset;
                RawValue  = TotalWord | RawValue;
                RawValue  = RawValue & 0x0000FFFF;

                WriteMessage.Schema[4] = (byte)((RawValue & 0xFF00) >> 8);
                WriteMessage.Schema[5] = (byte)(RawValue & 0x00FF);
            }

            if (objectNotify != null)
            {
                return(this.ExchangeMessage(WriteMessage, objectNotify));
            }
            else
            {
                this.AddUpdateMessage(WriteMessage);
                return(true);
            }
        }