public FxAddress(string tagName, FxAddressLayoutType addrLayoutType) { _TagName = tagName; _AddressLayoutType = addrLayoutType; _TagOffset = GetTagOffset(tagName, _BaseNumberOfXY); _UniformAddr = GetUniformAddr(tagName, out _AddressType, addrLayoutType); }
/// <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); } }
public FxAddress() { _TagName = string.Empty; _TagOffset = 0; _UniformAddr = 0; _AddressLayoutType = FxAddressManager.DefaultLayoutType; _AddressType = FxAddressType.D; _BaseNumberOfXY = 8; // 默认支持 Fx 系列 }
/// <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); }
public uint this[FxAddressLayoutType layoutType, FxAddressType addrType] { get { if (_LayoutList.ContainsKey(layoutType)) { return(_LayoutList[layoutType][addrType]); } return(0); } }
public FxAddressLayoutInfo this[FxAddressLayoutType layoutType] { get { if (_LayoutList.ContainsKey(layoutType)) { return(_LayoutList[layoutType]); } return(null); } }
/// <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); }