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)); }
/// <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)); } }
/// <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}")); } }
/// <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)); } }