コード例 #1
0
 public FxAddress(string tagName, FxAddressLayoutType addrLayoutType)
 {
     _TagName           = tagName;
     _AddressLayoutType = addrLayoutType;
     _TagOffset         = GetTagOffset(tagName, _BaseNumberOfXY);
     _UniformAddr       = GetUniformAddr(tagName, out _AddressType, addrLayoutType);
 }
コード例 #2
0
        /// <summary>
        /// 按给定符号名、控制器类型构建地址对象(推荐使用)
        /// </summary>
        public FxAddress(string tagName, ControllerTypeConst controllerType)
        {
            _BaseNumberOfXY = controllerType.ToBaseNumber();

            _TagName     = tagName;
            _AddressType = FxAddressManager.Instance[tagName];

            // 按实际地址更新 地址布局类型
            switch (_AddressType)
            {
            case FxAddressType.X:
            case FxAddressType.Y:
            case FxAddressType.M:
                _AddressLayoutType = FxAddressLayoutType.AddressLayoutBin;
                break;

            case FxAddressType.T:
                _AddressLayoutType = FxAddressLayoutType.AddressLayoutInt32;
                break;

            default:
                _AddressLayoutType = FxAddressLayoutType.AddressLayoutBin;
                break;
            }

            _TagOffset = GetTagOffset(tagName, _BaseNumberOfXY);

            if (controllerType.IsFxPLCController())
            {
                _UniformAddr = GetUniformAddr(tagName, out _AddressType, _AddressLayoutType);
            }
        }
コード例 #3
0
 public FxAddress()
 {
     _TagName           = string.Empty;
     _TagOffset         = 0;
     _UniformAddr       = 0;
     _AddressLayoutType = FxAddressManager.DefaultLayoutType;
     _AddressType       = FxAddressType.D;
     _BaseNumberOfXY    = 8;                             // 默认支持 Fx 系列
 }
コード例 #4
0
 /// <summary>
 /// 根据地址类型与地址偏移构建地址
 /// </summary>
 public FxAddress(ControllerTypeConst controllerType, FxAddressType addressType, int offset)
 {
     _BaseNumberOfXY    = controllerType.ToBaseNumber();
     _TagOffset         = offset;
     _AddressType       = addressType;
     _AddressLayoutType = FxAddressManager.DefaultLayoutType;
     _TagName           = ToFormatedTagName();
     _UniformAddr       = GetUniformAddr(_TagName, out _AddressType, _AddressLayoutType);
 }
コード例 #5
0
 public uint this[FxAddressLayoutType layoutType, FxAddressType addrType]
 {
     get
     {
         if (_LayoutList.ContainsKey(layoutType))
         {
             return(_LayoutList[layoutType][addrType]);
         }
         return(0);
     }
 }
コード例 #6
0
 public FxAddressLayoutInfo this[FxAddressLayoutType layoutType]
 {
     get
     {
         if (_LayoutList.ContainsKey(layoutType))
         {
             return(_LayoutList[layoutType]);
         }
         return(null);
     }
 }
コード例 #7
0
        /// <summary>
        /// 根据地址符号名称得到内部地址索引
        /// 这是函数仅由 FX 系列PLC使用
        /// </summary>
        /// <param name="tagName">以一个字符X/Y/M/C/T/S/D/加上10进制的序号构成</param>
        /// <returns>返回的地址序号,如果为0一般表示地址错误或不存在</returns>
        public static uint GetUniformAddr(string tagName, out FxAddressType addrType, FxAddressLayoutType addrLayoutType)
        {
            if (string.IsNullOrWhiteSpace(tagName))
            {
                addrType = FxAddressType.Undefine;
                return(0);
            }

            char tagType = tagName[0];

            uint pos = (uint)GetTagOffset(tagName, 8);

            if (addrLayoutType == FxAddressLayoutType.AddressLayoutBin)
            {
                pos = (uint)(pos / 8);
            }

            uint off = 0;

            switch (tagType)
            {
            case 'X':
            case 'x':
                addrType = FxAddressType.X;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'Y':
            case 'y':
                addrType = FxAddressType.Y;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'M':
            case 'm':
                addrType = FxAddressType.M;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'S':
            case 's':
                addrType = FxAddressType.S;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'T':
            case 't':
                addrType = FxAddressType.T;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'C':
            case 'c':
                addrType = FxAddressType.C;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            case 'D':
            case 'd':
                addrType = FxAddressType.D;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                pos     *= 2;
                break;

            case 'K':
            case 'k':
                addrType = FxAddressType.K;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                break;

            default:                                                                            // 默认视作“D"类型
                addrType = FxAddressType.D;
                off      = FxAddressManager.Instance[addrLayoutType, addrType];
                pos      = 0;
                break;
            }

            return(off + pos);
        }