2025-12-23 09:18:03 +08:00

96 lines
4.7 KiB
C#

using Infrastructure.Helper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace ZR.Service.Utils.MyAlarmLigth
{
/// <summary>
/// 三色灯帮助类
/// </summary>
public class LightUp
{
/// <summary>
/// 读警灯设备站号
/// </summary>
/// <returns>0 没有解析出来</returns>
/// <returns>其他 解析出来设备站号</returns>
public static ushort ReadAlarmlightNumber(ModbusTcpClientHelper _modbusClient)
{
// 2. 定义要读取的寄存器信息(根据您的表格)
const byte UNIT_ID = 0x00; // 从站地址,根据您的指令示例是 01
ushort startAddress = 0x0fa1; // 起始地址,对应
ushort numberOfRegisters = 1; // 要读取的寄存器数量 (40001 到 40012)
// 3. PLC 下发读指令并获取原始寄存器值列表
Console.WriteLine($"正在读取从站{UNIT_ID}广播的寄存器 {startAddress} 开始的 {numberOfRegisters} 个寄存器...");
List<ushort> registerValues = _modbusClient.ReadHoldingRegisters(UNIT_ID, startAddress, numberOfRegisters);
if (registerValues.Count == numberOfRegisters)
{
Console.WriteLine("读取成功,解析数据:");
return registerValues[0];
}
return 0;
}
/// <summary>
/// 向指定的警灯设备写入指令,控制警灯的状态为红色闪烁 且蜂鸣器响
/// </summary>
/// <param name="_modbusClient"></param>
/// <param name="unitId">警灯站号</param>
/// <param name="startAddress"></param>
/// <param name="commandValues"></param>
public static void WriteAlarmLightCommand_Red(ModbusTcpClientHelper _modbusClient, byte unitId )
{
ushort startAddress = 0x0000; // 起始地址,对应
ushort numberOfRegisters = 0x000B; // 要读取的寄存器数量 (40001 到 40012)
List<ushort> commandValues= new List<ushort> { 0x00001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,0x0000, 0x0000,0x000A }; // 红色闪烁 且蜂鸣器响
// 发送写指令到警灯设备
_modbusClient.WriteMultipleRegisters(unitId, startAddress, commandValues);
Console.WriteLine($"已向从站 {unitId} 的寄存器 {startAddress} 写入指令: {string.Join(", ", commandValues)}");
}
/// <summary>
/// 向指定的警灯设备写入指令,控制警灯的状态为黄色常亮 且蜂鸣器响
/// </summary>
/// <param name="_modbusClient"></param>
/// <param name="unitId">警灯站号</param>
/// <param name="startAddress"></param>
/// <param name="commandValues"></param>
public static void WriteAlarmLightCommand_Yellow(ModbusTcpClientHelper _modbusClient, byte unitId)
{
ushort startAddress = 0x0000; // 起始地址,对应
ushort numberOfRegisters = 0x000B; // 要读取的寄存器数量 (40001 到 40012)
List<ushort> commandValues = new List<ushort> { 0x0000, 0x0000, 0x0063, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000A }; // 红色闪烁 且蜂鸣器响
// 发送写指令到警灯设备
_modbusClient.WriteMultipleRegisters(unitId, startAddress, commandValues);
Console.WriteLine($"已向从站 {unitId} 的寄存器 {startAddress} 写入指令: {string.Join(", ", commandValues)}");
}
/// <summary>
/// 向指定的警灯设备写入指令,控制警灯的状态为绿灯常亮 且蜂鸣器关闭
/// </summary>
/// <param name="_modbusClient"></param>
/// <param name="unitId">警灯站号</param>
/// <param name="startAddress"></param>
/// <param name="commandValues"></param>
public static void WriteAlarmLightCommand_Normal(ModbusTcpClientHelper _modbusClient, byte unitId)
{
ushort startAddress = 0x0000; // 起始地址,对应
ushort numberOfRegisters = 0x000B; // 要读取的寄存器数量 (40001 到 40012)
List<ushort> commandValues = new List<ushort> { 0x0000, 0x0063, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; // 红色闪烁 且蜂鸣器响
// 发送写指令到警灯设备
_modbusClient.WriteMultipleRegisters(unitId, startAddress, commandValues);
Console.WriteLine($"已向从站 {unitId} 的寄存器 {startAddress} 写入指令: {string.Join(", ", commandValues)}");
}
}
}