コード例 #1
0
        /// <summary>
        /// 向指定地址添加指定类型和数量的数据
        /// [注:当向同一个地址多次发送数据时,可以定义一个数据单元;但当向不同地址发送数据时,则需要定义多个数据单元]
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="address"></param>
        /// <param name="number"></param>
        public void AssignValue <T>(ushort address, int number) where T : struct
        {
            this.Address = address;
            {
                ProDriver.Auxiliary.HZZHComDataType dtTp = ProDriver.Auxiliary.HZZHComDataType.Int;
                System.Type tp = typeof(T);
                if (tp.Name == "Int32")
                {
                    dtTp          = ProDriver.Auxiliary.HZZHComDataType.Int;
                    this.IntValue = new int[number];
                }
                else if (tp.Name == "Single")
                {
                    dtTp            = ProDriver.Auxiliary.HZZHComDataType.Float;
                    this.FloatValue = new float[number];
                }
                else if (tp.Name == "UInt16")
                {
                    dtTp             = ProDriver.Auxiliary.HZZHComDataType.Ushort;
                    this.UshortValue = new ushort[number];
                }
                else if (tp.Name == "Int16")
                {
                    dtTp            = ProDriver.Auxiliary.HZZHComDataType.Short;
                    this.ShortValue = new short[number];
                }
                else if (tp.Name == "UInt32")
                {
                    dtTp           = ProDriver.Auxiliary.HZZHComDataType.Uint;
                    this.UintValue = new uint[number];
                }
                else if (tp.Name == "Byte")
                {
                    dtTp           = ProDriver.Auxiliary.HZZHComDataType.Byte;
                    this.ByteValue = new byte[number * 2];
                }

                this.DataType = dtTp;
            }

            this.RegisterNumber = (ushort)number;
            this.ComSucceed     = false;
        }
コード例 #2
0
        /// <summary>
        /// 向指定地址添加指定类型的数据
        /// [注:当向同一个地址多次发送数据时,可以定义一个数据单元;但当向不同地址发送数据时,则需要定义多个数据单元]
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="address"></param>
        /// <param name="arrValue"></param>
        public void AssignValue <T>(ushort address, T[] arrValue) where T : struct
        {
            this.Address = address;
            {
                ProDriver.Auxiliary.HZZHComDataType dtTp = ProDriver.Auxiliary.HZZHComDataType.Int;
                System.Type tp = typeof(T);
                if (tp.Name == "Int32")
                {
                    dtTp          = ProDriver.Auxiliary.HZZHComDataType.Int;
                    this.IntValue = (int[])arrValue.Clone();
                }
                else if (tp.Name == "Single")
                {
                    dtTp            = ProDriver.Auxiliary.HZZHComDataType.Float;
                    this.FloatValue = (float[])arrValue.Clone();
                }
                else if (tp.Name == "UInt16")
                {
                    dtTp             = ProDriver.Auxiliary.HZZHComDataType.Ushort;
                    this.UshortValue = (ushort[])arrValue.Clone();
                }
                else if (tp.Name == "Int16")
                {
                    dtTp            = ProDriver.Auxiliary.HZZHComDataType.Short;
                    this.ShortValue = (short[])arrValue.Clone();
                }
                else if (tp.Name == "UInt32")
                {
                    dtTp           = ProDriver.Auxiliary.HZZHComDataType.Uint;
                    this.UintValue = (uint[])arrValue.Clone();
                }
                else if (tp.Name == "Byte")
                {
                    dtTp           = ProDriver.Auxiliary.HZZHComDataType.Byte;
                    this.ByteValue = (byte[])arrValue.Clone();
                }

                this.DataType = dtTp;
            }
            this.ComSucceed = false;
        }
コード例 #3
0
        public ProDriver.Auxiliary.HZZHComBaseData ReadRegister(ushort address, ushort registerNumber, ProDriver.Auxiliary.HZZHComDataType dataType, int blockTime = 1000)
        {
            ProDriver.Auxiliary.HZZHComBaseData bsData = new HZZHComBaseData();
            bsData.IsDataValid    = false;
            bsData.InitiativeRead = true;
            bsData.RegisterNumber = registerNumber;
            switch (dataType)
            {
            case ProDriver.Auxiliary.HZZHComDataType.Byte:
                bsData.AssignValue(address, new byte[registerNumber]);
                AddNetList(bsData);
                break;

            case ProDriver.Auxiliary.HZZHComDataType.Float:
                bsData.AssignValue(address, new float[registerNumber]);
                AddNetList(bsData);
                break;

            case ProDriver.Auxiliary.HZZHComDataType.Int:
                bsData.AssignValue(address, new int[registerNumber]);
                AddNetList(bsData);
                break;

            case ProDriver.Auxiliary.HZZHComDataType.Short:
                bsData.AssignValue(address, new short[registerNumber]);
                AddNetList(bsData);
                break;

            case ProDriver.Auxiliary.HZZHComDataType.Uint:
                bsData.AssignValue(address, new uint[registerNumber]);
                AddNetList(bsData);
                break;

            case ProDriver.Auxiliary.HZZHComDataType.Ushort:
                bsData.AssignValue(address, new ushort[registerNumber]);
                AddNetList(bsData);
                break;

            default:
                break;
            }
            int cnt = 0;

            //在板卡连接成功的情形下,一直等到数据源访问成功
            while (!bsData.ComSucceed)
            {
                //板卡连接不成功,退出等待
                if (!IsConnected)
                {
                    break;
                }

                System.Threading.Thread.Sleep(1);
                cnt++;

                //超时退出
                if (cnt > blockTime)
                {
                    break;
                }
            }

            bsData.IsDataValid = bsData.ComSucceed;

            return(bsData);
        }