Exemple #1
0
 public ReadResultStyle(All.Class.TypeUse.TypeList type, int random, bool result, object value)
 {
     this.Type   = type;
     this.Random = random;
     this.Result = result;
     this.Value  = value;
 }
Exemple #2
0
 public WriteDataStyle(All.Class.TypeUse.TypeList type, int start, object value)
 {
     this.Random = (int)All.Class.Num.GetRandom(0, 99999);
     this.Type   = type;
     this.Start  = start;
     this.Value  = value;
 }
Exemple #3
0
        public override bool Read <T>(out List <T> value, Dictionary <string, string> parm)
        {
            value = new List <T>();
            if (!Init())
            {
                return(false);
            }
            ScanHP();
            lock (lockObject)
            {
                try
                {
                    string readValue = "";
                    if (this.WriteAndRead <string, string>("FETC?\r\n", 16 * len - 1, out readValue))
                    {
                        readValue = readValue.Trim();
                        string[] buff = readValue.Split(',');
                        string[] tmp;
                        All.Class.TypeUse.TypeList type = All.Class.TypeUse.GetType <T>();
                        for (int i = 0; i < buff.Length; i++)
                        {
                            tmp = buff[i].Split('E');
                            if (tmp.Length != 2)
                            {
                                All.Class.Error.Add("当前34970返回的数据,不包含E分隔的数据,请更新驱动");
                                return(false);
                            }
                            switch (type)
                            {
                            case Class.TypeUse.TypeList.Double:
                                value.Add((T)(object)(tmp[0].ToDouble() * Math.Pow(10, tmp[1].ToInt())));
                                break;

                            case Class.TypeUse.TypeList.Float:
                                value.Add((T)(object)(float)(tmp[0].ToFloat() * Math.Pow(10, tmp[1].ToInt())));
                                break;

                            default:
                                All.Class.Error.Add("当前34970无法返回指定的数据结构,请检查程序读取数据结构,或更新此驱动");
                                return(false);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    All.Class.Error.Add(e);
                    return(false);
                }
            }
            return(true);
        }
Exemple #4
0
 /// <summary>
 /// 从初始化值中解析须要的数据类型,以及读取值
 /// </summary>
 public void Analysis()
 {
     if (Parent == null || Values == null || !Values.ContainsKey("Data"))
     {
         return;
     }
     if (!Values.ContainsKey("Text") || !Values.ContainsKey("Index"))
     {
         All.Class.Error.Add(string.Format("{0}.{1},没有数据类型或数据序号", Parent.Value.Parent.Text, Parent.Value.Text));
     }
     readType   = All.Class.TypeUse.GetType(Values["Data"]);
     this.Datas = GetIndexFromSet(Values["Index"], Values["Text"]);
 }
Exemple #5
0
        /// <summary>
        /// 读取的数据组,添加批量读取项目
        /// </summary>
        /// <param name="t"></param>
        /// <param name="buff"></param>
        public void AddRange(All.Class.TypeUse.TypeList t, Dictionary <int, string> buff)
        {
            switch (t)
            {
            case Class.TypeUse.TypeList.Boolean:
                this.BoolValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Byte:
                this.ByteValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Bytes:
                this.BytesValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.DateTime:
                this.DateTimeValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Double:
                this.DoubleValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Float:
                this.FloatValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Int:
                this.IntValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.Long:
                this.LongValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.String:
                this.StringValue.AddRange(buff);
                break;

            case Class.TypeUse.TypeList.UnKnow:
                break;

            case Class.TypeUse.TypeList.UShort:
                this.UshortValue.AddRange(buff);
                break;
            }
        }
Exemple #6
0
        /// <summary>
        /// 批量写入的时候,
        /// Y点地址0 -> Y0~Y7 , 1 -> Y10~Y17 , 2->Y20~Y27
        /// M点地址0 -> M0~M7 , 1 -> M08~M15 , 2->M16~M23
        /// X点地址0 -> X0~X7 , 1 -> X10~X17 , 2->X20~X27
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <param name="parm"></param>
        /// <returns></returns>
        public override bool WriteInternal <T>(List <T> value, Dictionary <string, string> parm)
        {
            lock (lockObject)
            {
                bool result = true;
                //写入数据
                if (value == null || value.Count <= 0)
                {
                    All.Class.Error.Add("写入数据为空,不能写入空数据", Environment.StackTrace);
                    return(false);
                }
                //单个boolean值写入
                All.Class.TypeUse.TypeList t = All.Class.TypeUse.GetType <T>();
                if (t == All.Class.TypeUse.TypeList.Boolean && ((value.Count % 8) != 0))
                {
                    return(Write((bool)(object)value[0], parm));
                }
                //写入地址
                if (!parm.ContainsKey("Start") && !parm.ContainsKey("Address"))
                {
                    All.Class.Error.Add("数据写入参数中不包含寄存器地址", Environment.StackTrace);
                    return(false);
                }
                ushort tmpAddress = 0;
                if (parm.ContainsKey("Start"))
                {
                    tmpAddress = parm["Start"].ToUshort();
                }
                if (parm.ContainsKey("Address"))
                {
                    tmpAddress = parm["Address"].ToUshort();
                }
                //写入区域
                List <byte> sendBuff  = new List <byte>(); //发送的总字符
                List <byte> sendValue = new List <byte>(); //发送的数据区域
                if (!parm.ContainsKey("Code"))
                {
                    switch (t)
                    {
                    case Class.TypeUse.TypeList.Boolean:
                        parm.Add("Code", "M");
                        break;

                    case Class.TypeUse.TypeList.UShort:
                    case Class.TypeUse.TypeList.Byte:
                    case Class.TypeUse.TypeList.Int:
                    case Class.TypeUse.TypeList.String:
                    case Class.TypeUse.TypeList.Long:
                        parm.Add("Code", "D");
                        break;

                    default:
                        All.Class.Error.Add("数据写入类型不正确,须要先添加并测试", Environment.StackTrace);
                        break;
                    }
                }
                sendBuff.Add(0x02);
                sendBuff.Add(0x31);
                string tmpCode = parm["Code"];
                switch (tmpCode)
                {
                case "D":
                    tmpAddress = (ushort)(0x1000 + 2 * tmpAddress);
                    break;

                case "M":
                    tmpAddress = (ushort)(0x0100 + tmpAddress);
                    break;

                case "X":
                    tmpAddress = (ushort)(0x0080 + Convert.ToUInt16(tmpAddress.ToString(), 8));
                    break;

                case "Y":
                    tmpAddress = (ushort)(0x00A0 + Convert.ToUInt16(tmpAddress.ToString(), 8));
                    break;

                case "S":
                case "T":
                case "C":
                    All.Class.Error.Add("数据写入指令正确,但当前驱动没有添加实现此区域操作,请添加并测试", Environment.StackTrace);
                    break;

                default:
                    All.Class.Error.Add("数据写入指令不正确,当前驱动没有指定的指令", Environment.StackTrace);
                    return(false);
                }
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X4}", (ushort)(tmpAddress & 0xFFFF))));
                switch (tmpCode)
                {
                case "D":
                    switch (t)
                    {
                    case Class.TypeUse.TypeList.String:
                        //下面的字符串字节与高低交换,如果不须要,则改
                        sendValue.AddRange(All.Class.Num.SwitchHighAndLow(Encoding.ASCII.GetBytes((string)(object)value[0])));
                        break;

                    case Class.TypeUse.TypeList.Byte:
                        for (int i = 0; i < value.Count; i++)
                        {
                            sendValue.Add((byte)(object)value[i]);
                        }
                        break;

                    case Class.TypeUse.TypeList.Int:
                        ushort tmpInt = 0;
                        for (int i = 0; i < value.Count; i++)
                        {
                            tmpInt = (ushort)(((int)(object)value[i]) & 0xFFFF);
                            sendValue.AddRange(new byte[] { (byte)(tmpInt & 0xFF), (byte)(tmpInt >> 8) });
                        }
                        break;

                    case Class.TypeUse.TypeList.UShort:
                        ushort tmpUshort = 0;
                        for (int i = 0; i < value.Count; i++)
                        {
                            tmpUshort = (ushort)(((ushort)(object)value[i]) & 0xFFFF);
                            sendValue.AddRange(new byte[] { (byte)(tmpUshort & 0xFF), (byte)(tmpUshort >> 8) });
                        }
                        break;

                    case Class.TypeUse.TypeList.Long:
                        ushort tmpLong = 0;
                        for (int i = 0; i < value.Count; i++)
                        {
                            tmpInt = (ushort)(((long)(object)value[i]) & 0xFFFF);
                            sendValue.AddRange(new byte[] { (byte)(tmpLong & 0xFF), (byte)(tmpLong >> 8) });
                        }
                        break;
                    }
                    break;

                case "M":
                case "X":
                case "Y":
                    bool[] tmpBool = new bool[8 * (int)(Math.Floor(value.Count / 8.0f))];
                    for (int i = 0; i < tmpBool.Length; i++)
                    {
                        tmpBool[i] = (bool)(object)value[i];
                    }
                    sendValue.AddRange(All.Class.Num.Bool2Byte(tmpBool));
                    break;
                }
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", sendValue.Count)));
                for (int i = 0; i < sendValue.Count; i++)
                {
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", sendValue[i])));
                }
                sendBuff.Add(0x03);
                byte   sumLow, sumHigh;
                byte[] readBuff;
                All.Class.Check.SumCheck(sendBuff.ToArray(), 1, sendBuff.Count - 1, out sumLow, out sumHigh);
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", sumLow)));
                if (WriteAndRead <byte[], byte[]>(sendBuff.ToArray(), 1, out readBuff))
                {
                    if (readBuff == null || readBuff.Length < 1 || readBuff[0] != 0x06)
                    {
                        result = false;
                    }
                }
                else
                {
                    result = false;
                }
                return(result);
            }
        }
Exemple #7
0
        /// <summary>
        /// 设置读取后的数据
        /// </summary>
        /// <param name="t"></param>
        /// <param name="buff"></param>
        public void SetValue(All.Class.TypeUse.TypeList t, Dictionary <int, object> buff)
        {
            if (buff == null || buff.Count <= 0)
            {
                return;
            }
            switch (t)
            {
            case Class.TypeUse.TypeList.Boolean:
                foreach (int i in buff.Keys)
                {
                    this.BoolValue.SetValue(i, (bool)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Byte:
                foreach (int i in buff.Keys)
                {
                    this.ByteValue.SetValue(i, (byte)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Bytes:
            case Class.TypeUse.TypeList.UnKnow:
                break;

            case Class.TypeUse.TypeList.DateTime:
                foreach (int i in buff.Keys)
                {
                    this.DateTimeValue.SetValue(i, (DateTime)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Double:
                foreach (int i in buff.Keys)
                {
                    this.DoubleValue.SetValue(i, (double)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Float:
                foreach (int i in buff.Keys)
                {
                    this.FloatValue.SetValue(i, (float)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Int:
                foreach (int i in buff.Keys)
                {
                    this.IntValue.SetValue(i, (int)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.Long:
                foreach (int i in buff.Keys)
                {
                    this.LongValue.SetValue(i, (long)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.String:
                foreach (int i in buff.Keys)
                {
                    this.StringValue.SetValue(i, (string)buff[i]);
                }
                break;

            case Class.TypeUse.TypeList.UShort:
                foreach (int i in buff.Keys)
                {
                    this.UshortValue.SetValue(i, (ushort)buff[i]);
                }
                break;
            }
        }
Exemple #8
0
        public override bool WriteInternal <T>(List <T> value, Dictionary <string, string> parm)
        {
            lock (lockObject)
            {
                bool result = true;
                //写入数据
                if (value == null || value.Count <= 0)
                {
                    All.Class.Error.Add("写入数据为空,不能写入空数据", Environment.StackTrace);
                    return(false);
                }
                //单个boolean值写入
                All.Class.TypeUse.TypeList t = All.Class.TypeUse.GetType <T>();
                //写入地址
                if (!parm.ContainsKey("Start") && !parm.ContainsKey("Address"))
                {
                    All.Class.Error.Add("数据写入参数中不包含寄存器地址", Environment.StackTrace);
                    return(false);
                }
                ushort tmpAddress = 0;
                if (parm.ContainsKey("Start"))
                {
                    tmpAddress = parm["Start"].ToUshort();
                }
                if (parm.ContainsKey("Address"))
                {
                    tmpAddress = parm["Address"].ToUshort();
                }
                //写入区域
                string code = "BW";
                if (!parm.ContainsKey("Code"))
                {
                    switch (t)
                    {
                    case Class.TypeUse.TypeList.Boolean:
                        parm.Add("Code", "M");
                        break;

                    case Class.TypeUse.TypeList.UShort:
                    case Class.TypeUse.TypeList.Byte:
                    case Class.TypeUse.TypeList.Int:
                    case Class.TypeUse.TypeList.String:
                    case Class.TypeUse.TypeList.Long:
                        parm.Add("Code", "D");
                        code = "WW";
                        break;

                    default:
                        All.Class.Error.Add("数据写入类型不正确,须要先添加并测试", Environment.StackTrace);
                        break;
                    }
                }
                List <byte> sendBuff = new List <byte>();
                sendBuff.Add(0x05);
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", address)));
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", 0xFF)));
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0}", code)));
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X1}", delay)));
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0}", parm["Code"].ToUpper())));
                sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X4}", tmpAddress)));
                switch (t)
                {
                case Class.TypeUse.TypeList.Boolean:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", value.Count)));
                    for (int i = 0; i < value.Count; i++)
                    {
                        sendBuff.Add((byte)((bool)(object)value[i] ? 0x31 : 0x30));
                    }
                    break;

                case Class.TypeUse.TypeList.Double:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", 4 * value.Count)));
                    for (int i = 0; i < value.Count; i++)
                    {
                        sendBuff.AddRange(Encoding.ASCII.GetBytes(All.Class.Num.Hex2Str(BitConverter.GetBytes((double)(object)value[i]))));
                    }
                    break;

                case Class.TypeUse.TypeList.Float:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", 2 * value.Count)));
                    for (int i = 0; i < value.Count; i++)
                    {
                        sendBuff.AddRange(Encoding.ASCII.GetBytes(All.Class.Num.Hex2Str(BitConverter.GetBytes((float)(object)value[i]))));
                    }
                    break;

                case Class.TypeUse.TypeList.Int:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", value.Count)));
                    int tmpInt = 0;
                    for (int i = 0; i < value.Count; i++)
                    {
                        tmpInt = (int)(object)value[i];
                        if (tmpInt < 0)
                        {
                            tmpInt = -((tmpInt ^ 0xFFFF) + 1);
                        }
                        sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X4}", tmpInt)));
                    }
                    break;

                case Class.TypeUse.TypeList.Long:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", value.Count)));
                    for (int i = 0; i < value.Count; i++)
                    {
                        sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X4}", (long)(object)value[i])));
                    }
                    break;

                case Class.TypeUse.TypeList.UShort:
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", value.Count)));
                    for (int i = 0; i < value.Count; i++)
                    {
                        sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X4}", (ushort)(object)value[i])));
                    }
                    break;
                }
                if (check)
                {
                    sendBuff.AddRange(Encoding.ASCII.GetBytes(string.Format("{0:X2}", All.Class.Check.SumCheck(sendBuff.ToArray(), 1, sendBuff.Count - 1))));
                }
                if (crlf)
                {
                    sendBuff.Add(0x0D);
                    sendBuff.Add(0x0A);
                }
                byte[] readBuff;
                if (WriteAndRead <byte[], byte[]>(sendBuff.ToArray(), 5, out readBuff))
                {
                    if (readBuff[0] != sendBuff[0] || readBuff[1] != sendBuff[1] || readBuff[2] != sendBuff[2] || readBuff[3] != sendBuff[3] || readBuff[4] != sendBuff[4])
                    {
                        All.Class.Error.Add("读取参数帧头或帧尾校验失败", Environment.StackTrace);
                        All.Class.Error.Add(string.Format("读取帧为:{0}", All.Class.Num.Hex2Str(readBuff)));
                        return(false);
                    }
                    result = true;
                }
                else
                {
                    result = false;
                }
                return(result);
            }
        }
Exemple #9
0
 public ReadDataStyle(All.Class.TypeUse.TypeList type, Dictionary <string, string> symbol)
 {
     this.Type   = type;
     this.Random = (int)All.Class.Num.GetRandom(0, 99999);
     this.Symbol = symbol;
 }