using CCDCount.DLL.Tools; using CCDCount.MODEL.PlcModel; using System; using System.Linq; using System.Security.Cryptography; namespace CCDCount.DLL { public class PLCManagementClass { private bool isConnect = false; public bool IsConnect { get { return isConnect; } } public ModbusTcpClient modbusTcpClient = new ModbusTcpClient(); public PLCManagementClass(string ipAddress) { //ConnectModbus("127.0.0.1"); ConnectModbus(ipAddress); //ConnectModbus("192.168.1.88"); } public void ConnectModbus(string ipAddress) { if (!modbusTcpClient.Connect(ipAddress)) { FaultLog.RecordErrorMessage($"Modbus通讯连接失败,目标IP:{ipAddress}"); isConnect = false; return; } isConnect = true; } /// /// 归零置为True /// public void ReturnToZeroToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 0, values: true); } /// /// 归零置为False /// public void ReturnToZeroToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 0, values: false); } /// /// 复位置为True /// public void RepositionToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 1, values: true); } /// /// 复位置为False /// public void RepositionToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 1, values: false); } /// /// 轴停止置为True /// public void ShaftStopsToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 2, values: true); } /// /// 轴停止置为False /// public void ShaftStopsToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 2, values: false); } /// /// 正转点动置为True /// public void ForwardRotatingJogToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 3, values: true); } /// /// 正转点动置为False /// public void ForwardRotatingJogToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 3, values: false); } /// /// 反转点动置为True /// public void ReversalReverseJogToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 4, values: true); } /// /// 反转点动置为False /// public void ReversalReverseJogToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 4, values: false); } /// /// 速度运行设置为True /// public void SpeedRunToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 5, values: true); } /// /// 速度运行设置为False /// public void SpeedRunToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 5, values: false); } /// /// 启动设置为True /// public void InitiateToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 6, values: true); } /// /// 启动设置为False /// public void InitiateToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 6, values: false); } /// /// 停止设置为True /// public void StopToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 7, values: true); } /// /// 停止设置为False /// public void StopToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 7, values: false); } /// /// 设备运行设置为True /// public void EquipmentOperationToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 8, values: true); } /// /// 设备运行设置为False /// public void EquipmentOperationToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 8, values: false); } /// /// 写入完成设置为True /// public void WriteDoneToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 11, values: true); } /// /// 写入一级震台启动为True /// public void SwitchLevelOneVibrationTable() { bool Enable = ReadLevelOneVibrationTable(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 25, values: !Enable); } /// /// 二级震台启动 /// public void SwitchLevelTwoVibrationTable() { bool Enable = ReadLevelTwoVibrationTable(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 26, values: !Enable); } /// /// 三级震台启动 /// public void SwitchLevelThreeVibrationTable() { bool Enable = ReadLevelThreeVibrationTable(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 27, values: !Enable); } /// /// 设备上升 /// public void WriteDeviceUpToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 28, values: true); } public void WriteDeviceUpToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 28, values: false); } /// /// 设备下降 /// public void WriteDeviceDownToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 29, values: true); } public void WriteDeviceDownToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 29, values: false); } /// /// 传送带启动 /// public void SwitchTransferStart() { bool Enable = ReadTransferStart(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 30, values: !Enable); } /// /// 气锁关 /// public void SwitchAirValveClose() { bool Enable = ReadAirValveClose(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 31, values: !Enable); } /// /// 送瓶轮复位 /// public void WriteBottleFeedingWheelResetToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 32, values: true); } public void WriteBottleFeedingWheelResetToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 32, values: false); } /// /// 送瓶轮回零 /// public void WriteBottleFeedingWheelReturnToZeroToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 33, values: true); } public void WriteBottleFeedingWheelReturnToZeroToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 33, values: false); } /// /// 送瓶轮轴停止 /// public void WriteBottleFeedingWheelShaftStopsToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 34, values: true); } public void WriteBottleFeedingWheelShaftStopsToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 34, values: false); } /// /// 送瓶轮正转点动 /// public void WriteBottleFeedingWheelPositiveRotationJogToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 36, values: true); } public void WriteBottleFeedingWheelPositiveRotationJogToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 36, values: false); } /// /// 送瓶轮反转点动 /// public void WriteBottleFeedingWheelReverseRotationJogToTrue() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 37, values: true); } public void WriteBottleFeedingWheelReverseRotationJogToFalse() { modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 37, values: false); } /// /// 送瓶轮使能 /// public void SwitchBottleFeedingWheelEnable() { bool Enable = ReadBottleFeedingWheelEnable(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 38, values: !Enable); } /// /// 读取写入完成 /// /// public bool ReadAllowWrite() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress:12, numRegisters: 1)[0]; } /// /// 读取使能完成 /// /// public bool ReadEnableCompletion() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 14, numRegisters: 1)[0]; } /// /// 读取归零完成 /// /// public bool ReadReturnToZeroCompletion() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 15, numRegisters: 1)[0]; } /// /// 读取停止完成 /// /// public bool ReadStopCompletion() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 16, numRegisters: 1)[0]; } /// /// 读取速度运行中 /// public bool ReadSpeedRunning() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 17, numRegisters: 1)[0]; } /// /// 读取归零中 /// /// public bool ReadReturnToZero() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 18, numRegisters: 1)[0]; } /// /// 读取中转阀开定位完成 /// /// public bool ReadTransferValveOpenCompletion() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 19, numRegisters: 1)[0]; } /// /// 读取中转阀关定位完成 /// public bool ReadTransferValveCloseCompletion() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 20, numRegisters: 1)[0]; } /// /// 读取允许数据交换 /// public bool ReadAllowsDataExchange() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 21, numRegisters: 1)[0]; } /// /// 读取暂停数据交换 /// public bool ReadPauseDataExchange() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 22, numRegisters: 1)[0]; } /// /// 缓存计数延时完成 /// /// public bool ReadCacheCountDelayed() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 23, numRegisters: 1)[0]; } /// /// 读取使能 /// /// public bool ReadEnable() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 24, numRegisters: 1)[0]; } /// /// 读取一级震台启动 /// public bool ReadLevelOneVibrationTable() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 25, numRegisters: 1)[0]; } /// /// 读取二级震台启动 /// public bool ReadLevelTwoVibrationTable() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 26, numRegisters: 1)[0]; } /// /// 读取三级震台启动 /// public bool ReadLevelThreeVibrationTable() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 27, numRegisters: 1)[0]; } /// /// 读取传送带启动 /// public bool ReadTransferStart() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 30, numRegisters: 1)[0]; } /// /// 读取气锁关 /// public bool ReadAirValveClose() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 31, numRegisters: 1)[0]; } /// /// 读取送瓶轮使能 /// public bool ReadBottleFeedingWheelEnable() { return modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 38, numRegisters: 1)[0]; } /// /// 读取所有状态 /// public PlcStaticModelClass ReadAllState() { PlcStaticModelClass result = null; bool[] Readresult = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 14, numRegisters: 11); if (Readresult == null) return null; result = new PlcStaticModelClass() { EnableCompletion = Readresult[0], ReturnToZeroCompletion = Readresult[1], StopCompletion = Readresult[2], SpeedRunning = Readresult[3], ReturnToZero = Readresult[4], TransferValveOpenCompletion = Readresult[5], TransferValveCloseCompletion = Readresult[6], AllowsDataExchange = Readresult[7], PauseDataExchange = Readresult[8], CacheCountDelayed = Readresult[9], Enable = Readresult[10] }; Readresult = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 35, numRegisters: 5); result.BottleFeedingWheelEnableCompletion = Readresult[0]; result.BottleFeedingWheelStopCompletion = Readresult[4]; return result; } /// /// 写入速度模式运行速度 /// /// public void WriteSpeedModeRunningSpeed(float Value) { modbusTcpClient.WriteMultipleReals(1, 1110, new float[] { Value }, "BADC"); } /// /// 写入点动速度 /// /// public void WriteJogSpeed(float Value) { modbusTcpClient.WriteMultipleReals(1, 1114, new float[] { Value }, "BADC"); } /// /// 写入罐装设定值 /// /// public void WriteBottValueSet(UInt16 Value) { modbusTcpClient.WriteSingleRegister(1, 1118, Value); } /// /// 写入中转阀打开速度 /// /// public void WriteTransferValveOpeningSpeed(float Value) { modbusTcpClient.WriteMultipleReals(1, 1122, new float[] { Value }, "BADC"); } /// /// 写入中转阀打开时间 /// public void WriteTransferValveOpeningTime(UInt32 Value) { modbusTcpClient.WriteSingleInt32(1, 1126, Value); } /// /// 写入罐装减速值 /// /// public void WriteBottingDecelerationValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1130, Value); } /// /// 写入缓存减速值 /// /// public void WriteCacheDecelerationValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1134, Value); } /// /// 写入缓存计时延时时间 /// /// public void WriteCacheCountDelayTiming(UInt32 Value) { modbusTcpClient.WriteSingleInt32(1, 1138, Value); } /// /// 写入缓存停机值 /// /// public void WriteCacheShutdownValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1142, Value); } /// /// 写入罐装料筒震台高速值 /// /// public void WriteBottingMaterialCylinderVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1146, Value); } /// /// 写入罐装过滤震台高速值 /// /// public void WriteBottingFilterVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1150, Value); } /// /// 写入罐装计数震台高速值 /// /// public void WriteBottingCountVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1154, Value); } /// /// 写入罐装料筒震台减速值 /// /// public void WriteBottingMaterialCylinderVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1158, Value); } /// /// 写入罐装过滤震台减速值 /// /// public void WriteBottingFilterVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1162, Value); } /// /// 写入罐装计数震台减速值 /// /// public void WriteBottingCountVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1166, Value); } /// /// 写入缓存料筒震台高速值 /// /// public void WriteCacheMaterialCylinderVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1170, Value); } /// /// 写入缓存过滤震台高速值 /// /// public void WriteCacheFilterVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1174, Value); } /// /// 写入缓存计数震台高速值 /// /// public void WriteCacheCountVibrationTableHighSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1178, Value); } /// /// 写入缓存料筒震台减速值 /// /// public void WriteCacheMaterialCylinderVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1182, Value); } /// /// 写入缓存过滤震台减速值 /// /// public void WriteCacheFilterVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1186, Value); } /// /// 写入缓存计数震台减速值 /// /// public void WriteCacheCountVibrationTableDecelerationSpeedValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1190, Value); } /// /// 写入闸门打开延时 /// /// public void WriteGateOpeningDelay(UInt32 Value) { modbusTcpClient.WriteSingleInt32(1, 1194, Value); } /// /// 写入回零偏移值 /// /// public void WriteReturnToZeroOffsetValue(float Value) { modbusTcpClient.WriteSingleReal(1, 1198, Value); } /// /// 写入回零偏移速度 /// /// public void WriteReturnToZeroOffsetSpeed(float Value) { modbusTcpClient.WriteSingleReal(1, 1202, Value); } /// /// 写入中转阀关闭速度 /// /// public void WriteTransferValveClosingSpeed(float Value) { modbusTcpClient.WriteSingleReal(1, 1206, Value); } /// /// 写入中转阀开位置 /// /// public void WriteTransferValveOpenPosition(float Value) { modbusTcpClient.WriteSingleReal(1, 1210, Value); } /// /// 写入中转阀关位置 /// /// public void WriteTransferValveClosePosition(float Value) { modbusTcpClient.WriteSingleReal(1, 1214, Value); } /// /// 写入空气阀开启延时 /// public void WriteAirValveOpeningDelay(UInt32 Value) { modbusTcpClient.WriteSingleInt32(1, 1218, Value); } /// /// 写入罐装停机值 /// /// public void WriteBottlingShutdownValue(ushort Value) { modbusTcpClient.WriteSingleRegister(1, 1230, Value); } /// /// 写入罐装停机时间 /// /// public void WriteBottlingShutdownTime(UInt32 Value) { modbusTcpClient.WriteSingleInt32(1, 1234, Value); } /// /// 读取所有参数(参数数据表) /// public PlcParaModelClass ReadAllPara() { PlcParaModelClass result = null; var results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1110, numRegisters: 124); if (results == null) return null; result = new PlcParaModelClass() { SpeedModeRunningSpeed = GetFloatFromRegisters(results.Take(2).ToArray()), JogSpeed = GetFloatFromRegisters(results.Skip(4).Take(2).ToArray()), BottValueSet = results[8], TransferValveOpeningSpeed = GetFloatFromRegisters(results.Skip(12).Take(2).ToArray()), TransferValveOpeningTime = GetInt32FromRegisters(results.Skip(16).Take(2).ToArray()), BottingDecelerationValue = results[20], CacheDecelerationValue = results[24], CacheCountDelayTiming = GetInt32FromRegisters(results.Skip(28).Take(2).ToArray()), CacheShutdownValue = results[32], BottingMaterialCylinderVibrationTableHighSpeedValue = results[36], BottingFilterVibrationTableHighSpeedValue = results[40], BottingCountVibrationTableHighSpeedValue = results[44], BottingMaterialCylinderVibrationTableDecelerationSpeedValue = results[48], BottingFilterVibrationTableDecelerationSpeedValue = results[52], BottingCountVibrationTableDecelerationSpeedValue = results[56], CacheMaterialCylinderVibrationTableHighSpeedValue = results[60], CacheFilterVibrationTableHighSpeedValue = results[64], CacheCountVibrationTableHighSpeedValue = results[68], CacheMaterialCylinderVibrationTableDecelerationSpeedValue = results[72], CacheFilterVibrationTableDecelerationSpeedValue = results[76], CacheCountVibrationTableDecelerationSpeedValue = results[80], GateOpeningDelay = GetInt32FromRegisters(results.Skip(84).Take(2).ToArray()), ReturnToZeroOffsetValue = GetFloatFromRegisters(results.Skip(88).Take(2).ToArray()), ReturnToZeroOffsetSpeed = GetFloatFromRegisters(results.Skip(92).Take(2).ToArray()), TransferValveClosingSpeed = GetFloatFromRegisters(results.Skip(96).Take(2).ToArray()), TransferValveOpenPosition = GetFloatFromRegisters(results.Skip(100).Take(2).ToArray()), TransferValveClosePosition = GetFloatFromRegisters(results.Skip(104).Take(2).ToArray()), AirValveOpeningDelay = GetInt32FromRegisters(results.Skip(108).Take(2).ToArray()), BottlingShutdownValue = results[120], }; results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1234, numRegisters: 36); result.BottlingShutdownTime = GetInt32FromRegisters(results.Take(2).ToArray()); result.BottleFeedingWheelRunningSpeed = GetFloatFromRegisters(results.Skip(8).Take(2).ToArray()); result.BottleFeedingWheelJogRunningSpeed = GetFloatFromRegisters(results.Skip(12).Take(2).ToArray()); result.BottleFeedingWheelReturnToZeroOffsetValue = GetFloatFromRegisters(results.Skip(16).Take(2).ToArray()); result.BottleFeedingWheelReturnToZeroSpeed = GetFloatFromRegisters(results.Skip(20).Take(2).ToArray()); result.BottleFeedingWheelPositionLength = GetFloatFromRegisters(results.Skip(24).Take(2).ToArray()); result.BottleFeedingWheelPauseTime = GetInt32FromRegisters(results.Skip(28).Take(2).ToArray()); result.DelayBlanking = GetInt32FromRegisters(results.Skip(32).Take(2).ToArray()); return result; } /// /// 获取16位寄存器中的32Uint位值 /// private UInt32 GetInt32FromRegisters(ushort[] registers,string byteOrder = "BADC") { ushort highRegister = registers[0]; ushort lowRegister = registers[1]; byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder); // 转换为float return (UInt32)BitConverter.ToInt32(bytes, 0); } /// /// 获取16位寄存器中的32Float位值 /// private float GetFloatFromRegisters(ushort[] registers) { string byteOrder = "BADC"; ushort highRegister = registers[0]; ushort lowRegister = registers[1]; byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder); return BitConverter.ToSingle(bytes, 0); ; } /// /// 将寄存器数组换为字节数组转(根据指定字节序) /// /// 低位寄存器 /// 高位寄存器 /// 字节序 /// 字节数组 private byte[] ConvertToByteArray(ushort lowRegister, ushort highRegister, string byteOrder) { byte[] bytes = new byte[4]; switch (byteOrder.ToUpper()) { case "ABCD": // 大端序 bytes[0] = (byte)(highRegister >> 8); bytes[1] = (byte)(highRegister & 0xFF); bytes[2] = (byte)(lowRegister >> 8); bytes[3] = (byte)(lowRegister & 0xFF); break; case "CDAB": // 小端序 bytes[0] = (byte)(lowRegister >> 8); bytes[1] = (byte)(lowRegister & 0xFF); bytes[2] = (byte)(highRegister >> 8); bytes[3] = (byte)(highRegister & 0xFF); break; case "BADC": bytes[0] = (byte)(highRegister & 0xFF); bytes[1] = (byte)(highRegister >> 8); bytes[2] = (byte)(lowRegister & 0xFF); bytes[3] = (byte)(lowRegister >> 8); break; case "DCBA": bytes[0] = (byte)(lowRegister & 0xFF); bytes[1] = (byte)(lowRegister >> 8); bytes[2] = (byte)(highRegister & 0xFF); bytes[3] = (byte)(highRegister >> 8); break; default: // 默认使用ABCD顺序 bytes[0] = (byte)(highRegister >> 8); bytes[1] = (byte)(highRegister & 0xFF); bytes[2] = (byte)(lowRegister >> 8); bytes[3] = (byte)(lowRegister & 0xFF); break; } return bytes; } /// /// 切换使能 /// public void SwitchEnable() { bool Enable = ReadEnable(); modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 24, values: !Enable); } /// /// 切换闸门点动 /// /// 闸门编号 public void SwitchValveJog(int value) { if (value >= 0 && value <= 7) { ushort valveJog = ReadValveJog(); ushort mask = (ushort)(1 << value); modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 238, value: (ushort)(valveJog^mask)); } } /// /// 写入送瓶轮运行速度 /// /// public void WriteBottleFeedingWheelRunningSpeed(float result) { modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1242, value: result); } /// /// 送瓶轮点动速度 /// /// public void WriteBottleFeedingWheelJogRunningSpeed(float result) { modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1246, value: result); } /// /// 送瓶轮回零偏移值 /// /// public void WriteBottleFeedingWheelReturnToZeroOffsetValue(float result) { modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1250, value: result); } /// /// 送瓶轮回零速度 /// /// public void WriteBottleFeedingWheelReturnToZeroSpeed(float result) { modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1254, value: result); } /// /// 送瓶轮定位长度 /// /// public void WriteBottleFeedingWheelPositionLength(float result) { modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1258, value: result); } /// /// 送瓶轮暂停时间 /// /// public void WriteBottleFeedingWheelPauseTime(UInt32 result) { modbusTcpClient.WriteSingleInt32(slaveId: 1, startAddress: 1262, value: result); } /// /// 下料延时 /// /// public void WriteDelayBlanking(UInt32 result) { modbusTcpClient.WriteSingleInt32(slaveId: 1, startAddress: 1266, value: result); } /// /// 读取闸门点动 /// public ushort ReadValveJog() { return modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 238, numRegisters: 1)[0]; } } }