/// <summary> /// 设置PLC中ModbusTCP HoldReg DB块 第index个数的大小,可以是任意类型 /// </summary> public bool SetVal(int index, float val, ModbusTCPMaster MBmaster) { byte[] bytes; switch (TypeList[index]) { case "System.Byte": var data1 = (byte)val; bytes = new byte[] { data1 }; break; case "System.Int16": var data2 = (Int16)val; bytes = BitConverterHelper.Int16ToBytes(data2); break; case "System.Int32": var data3 = (Int32)val; bytes = BitConverterHelper.Int32ToBytes(data3); break; case "System.Single": var data4 = (Single)val; bytes = BitConverterHelper.SingleToBytes(data4); break; default: throw new Exception("Type is not correct!"); } ushort address = (ushort)(getDataOffset(index) / 2); MBmaster?.WriteMultipleRegister(ModbusTCPMaster.WriteMultipleRegisterFucID, SlaveID, address, bytes); Thread.Sleep(20); return(true); }
float GetDesTemData(int dataAddress) { byte slaveID = Convert.ToByte(serialPortConfig.BiaoAddressValue); ushort startAddress = (ushort)dataAddress; ushort numofPoints = 2; //数据帧中 word 的数量 ushort[] holdingregister = master.ReadHoldingRegisters(slaveID, startAddress, numofPoints); byte[] bytes = { }; for (int i = 0; i < numofPoints * 2; i++) { byte[] byteTemp; byteTemp = BitConverter.GetBytes(holdingregister[i]); bytes = BitConverterHelper.BytesConnect(bytes, byteTemp); } float val = BitConverterHelper.ToSingle(bytes, 0); val = (float)(Math.Round(val, 3)); return(val); }
public bool SetVals(int startindex, float[] vals, ModbusTCPMaster MBmaster) { byte[] bytes; byte[] returnbytes = { }; int count = vals.Length; for (int i = 0; i < count; ++i) { switch (TypeList[startindex + i]) { case "System.Byte": var data1 = (byte)vals[i]; bytes = new byte[] { data1 }; break; case "System.Int16": var data2 = (Int16)vals[i]; bytes = BitConverterHelper.Int16ToBytes(data2); break; case "System.Int32": var data3 = (Int32)vals[i]; bytes = BitConverterHelper.Int32ToBytes(data3); break; case "System.Single": var data4 = (Single)vals[i]; bytes = BitConverterHelper.SingleToBytes(data4); break; default: throw new Exception("Type is not correct!"); } returnbytes = BitConverterHelper.BytesConnect(returnbytes, bytes); } ushort address = (ushort)(getDataOffset(startindex) / 2); MBmaster?.WriteMultipleRegister(ModbusTCPMaster.WriteMultipleRegisterFucID, SlaveID, address, returnbytes); Thread.Sleep(20); return(true); }
void GetDesTemDrgData(out float des, out float tem, out float drg) { byte slaveID = SlaveAddress; ushort startAddress = (ushort)(AddressConfig.Density - 1); ushort numofPoints = 20; //数据帧中 word 的数量 ushort[] holdingregister = master.ReadInputRegisters(slaveID, startAddress, numofPoints); var dataDriveGain = master.ReadInputRegisters(SlaveAddress, (ushort)(AddressConfig.DriveGain - 1), 2); byte[] bytes = { }; for (int i = 0; i < numofPoints; i++) { byte[] byteTemp; byteTemp = BitConverter.GetBytes(holdingregister[i]); bytes = BitConverterHelper.BytesConnect(bytes, byteTemp); } des = ModbusFloatHelper.UshortToFloat(holdingregister, 0, 3); tem = ModbusFloatHelper.UshortToFloat(holdingregister, 2, 3); drg = ModbusFloatHelper.UshortToFloat(dataDriveGain, 0, 3); }
private void ModbusSetK012() { if (serialPort.IsOpen == true) { ushort[] sendUShort = { }; ushort[] ushorts = BitConverterHelper.SingleToUShort(K0_XiShu.Value); sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts); ushorts = BitConverterHelper.SingleToUShort(K1_XiShu.Value); sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts); ushorts = BitConverterHelper.SingleToUShort(K2_XiShu.Value); sendUShort = BitConverterHelper.UShortConnect(sendUShort, ushorts); try { master?.WriteMultipleRegisters(SlaveAddress, (ushort)(AddressConfig.K0 - 1), sendUShort); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }