public void BoolArrayToByteTransferTest( )
        {
            byte[] data = new byte[2] {
                0xA3, 0x46
            };
            bool[] buffer = new bool[] { true, true, false, false, false, true, false, true, false, true, true, false, false, false, true, false };


            byte[] value = byteTransform.TransByte(buffer);
            Assert.IsTrue(HslCommunication.BasicFramework.SoftBasic.IsTwoBytesEquel(data, value));
        }
Exemplo n.º 2
0
        /// <summary>
        /// 数据转换,string到byte[]
        /// </summary>
        /// <param name="dataType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static BllResult <byte[]> TransferStringToBuffer(ModbusDataType dataType, string value)
        {
            try
            {
                switch (dataType)
                {
                case ModbusDataType.Bool:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(Convert.ToBoolean(value))));

                case ModbusDataType.Short:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Int16[] { Convert.ToInt16(value) })));

                case ModbusDataType.UShort:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new UInt16[] { Convert.ToUInt16(value) })));

                case ModbusDataType.Int:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Int32[] { Convert.ToInt32(value) })));

                case ModbusDataType.UInt:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new UInt32[] { Convert.ToUInt32(value) })));

                case ModbusDataType.Long:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Int64[] { Convert.ToInt64(value) })));

                case ModbusDataType.ULong:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new UInt64[] { Convert.ToUInt64(value) })));

                case ModbusDataType.Float:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Single[] { Convert.ToSingle(value) })));

                case ModbusDataType.Double:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Double[] { Convert.ToDouble(value) })));

                case ModbusDataType.String:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(value.PadRight(20, ' '), Encoding.ASCII)));

                default:
                    return(BllResultFactory <byte[]> .Error("未识别的数据类型"));
                }
            }
            catch (Exception ex)
            {
                return(BllResultFactory <byte[]> .Error("转换出现问题:" + ex.Message));
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 数据转换,byte[]到string
        /// </summary>
        /// <param name="dataType"></param>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public static BllResult <string> TransferBufferToString(HslSiemensDataEntity data)
        {
            try
            {
                switch (data.DataType)
                {
                case PLCDataType.BYTE:
                    //字节转成int处理
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransByte(data.Buffer, 0).ToString(), null));

                case PLCDataType.BOOL:
                    //对于bool类型,我们需要判断此字节中的指定位是否为0
                    return(BllResultFactory <string> .Sucess(ConverHelper.GetBit(data.Buffer[0], data.BitOffset) == 1?true.ToString() : false.ToString(), null));

                case PLCDataType.DWORD:
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransUInt32(data.Buffer, 0).ToString(), null));

                case PLCDataType.WORD:
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransUInt16(data.Buffer, 0).ToString(), null));

                case PLCDataType.INT:
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransInt16(data.Buffer, 0).ToString(), null));

                case PLCDataType.DINT:
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransInt32(data.Buffer, 0).ToString(), null));

                case PLCDataType.CHAR:
                    return(BllResultFactory <string> .Sucess(reverseBytesTransform.TransString(data.Buffer, 0, data.Buffer.Length, Encoding.ASCII).Replace("\u0003", "").Trim(), null));

                default:
                    return(BllResultFactory <string> .Error("未识别"));
                }
            }
            catch (Exception ex)
            {
                return(BllResultFactory <string> .Error($"转换出错:{ex.Message}"));
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 数据转换,string到byte[]
        /// </summary>
        /// <param name="dataType"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static BllResult <byte[]> TransferStringToBuffer(PLCDataType dataType, string value)
        {
            try
            {
                switch (dataType)
                {
                case PLCDataType.BYTE:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new int[] { Convert.ToInt32(value) })));

                case PLCDataType.BOOL:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(Convert.ToBoolean(value))));

                case PLCDataType.DWORD:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new UInt32[] { Convert.ToUInt32(value) })));

                case PLCDataType.WORD:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new UInt16[] { Convert.ToUInt16(value) })));

                case PLCDataType.INT:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new Int16[] { Convert.ToInt16(value) })));

                case PLCDataType.DINT:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(new int[] { Convert.ToInt32(value) })));

                case PLCDataType.CHAR:
                    return(BllResultFactory <byte[]> .Sucess(reverseBytesTransform.TransByte(value, Encoding.ASCII)));

                default:
                    return(BllResultFactory <byte[]> .Error("未识别的数据类型"));
                }
            }
            catch (Exception ex)
            {
                return(BllResultFactory <byte[]> .Error("转换出现问题:" + ex.Message));
            }
        }