blueskit / MitsubishiPlcProtocol

三菱PLC(Mitsubishi)通讯协议的C#实现,支持FX、Q系列的ASCII-3E、BIN-3E、FX串口格式。
MIT License
296 stars 153 forks source link

FX系列的AddressLayoutInt16类型地址编码错误 #8

Open bamboo98 opened 1 year ago

bamboo98 commented 1 year ago

public FxAddress (string tagName, ControllerTypeConst controllerType) 中switch的default应修改为Int16,此前默认的Bin模式会在计算D寄存器地址时额外/8,这是错误的

            default:
                _AddressLayoutType = FxAddressLayoutType.AddressLayoutInt16;
                break;

public static string Make(FxCommandConst cmd, FxAddress addr, int length) 中的sb.Append(addr.ToAddressHexString());似乎是Byte需要交换高低位,而不是Bin?

        /// 返回标准格式的地址字符串,用于MOD-BUS协议控制命令中的“地址”部分
        /// 注意:地址需要交换高低字节
        /// </summary>
        public string ToAddressHexString ()
        {
            uint addr = _UniformAddr;
            if(_AddressLayoutType == FxAddressLayoutType.AddressLayoutByte) {
                addr = ((_UniformAddr >> 8) & 0xff) | ((_UniformAddr & 0xff) << 8);
            }
            return string.Format("{0:X4}", addr);
        }

public static string ConvertToString<T>(List<uint> data) 中的FxConvert.DecToHex后需要再进行一次高低字节交换

测试PLC型号是FX3GA