using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Communicator; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ISystemServices; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks { /// /// 任务获取 后底板1 的任务 /// /// [DisallowConcurrentExecution] public class TaskAcquisition_Back1_Job : JobBase, IJob { private readonly ITaskRepository _taskRepository; private readonly ITaskService _taskService; private readonly ISys_ConfigService _sys_ConfigService; private readonly IDt_StationManagerRepository _stationManagerRepository; public TaskAcquisition_Back1_Job(ITaskRepository taskRepository, ITaskService taskService, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository) { _taskRepository = taskRepository; _taskService = taskService; _sys_ConfigService = configService; _stationManagerRepository = stationManagerRepository; } public Task Execute(IJobExecutionContext context) { string ip = "127.0.0.1"; int port = 502; string name = "后底板1"; ModbusTcp modbusTcp = new ModbusTcp(ip, port, name); modbusTcp.Connect(); //var a = modbusTcp.Read("40002", 20); //string barcode = Encoding.UTF8.GetString(a).Replace("\0", "").Replace("\\0", ""); // 读取指定的地址读到10进制的ascii码转成16进制 byte[] rawBytes = modbusTcp.Read("10", 20); string originalDecimalStr = Encoding.ASCII.GetString(rawBytes).TrimEnd('\0'); Console.WriteLine($"读取到的原始十进制字符串:{originalDecimalStr}"); // 下面这一段就是你要的:转 16 进制 ulong number = ulong.Parse(originalDecimalStr); // 转成数字 string hexStr = number.ToString("X"); // 转大写16进制 Console.WriteLine("转换成16进制:" + hexStr); // 16进制转成10进制 // 2. 16进制 → 转回十进制(你要的功能) ulong decimalResult = Convert.ToUInt64(hexStr, 16); Console.WriteLine("16进制转回十进制:" + decimalResult); bool flag = modbusTcp.Write("30", decimalResult.ToString()); modbusTcp.Disconnect(); Console.WriteLine("进入了TaskAcquisition_Back1_Job"); return Task.CompletedTask; } } }