C00225155-02/C00225155/MegaRobo.C00225155/MegaRobo.C00225155.ControlD.../TemperatureControl/HighTemperatureShakeService.cs

111 lines
3.7 KiB
C#
Raw Normal View History

2026-04-13 09:12:49 +00:00
using MegaRobo.Connections;
using MegaRobo.Connections.Sockets.Tcp;
using MegaRobo.Contract;
using MegaRobo.ControlDevices.Abstractions;
using MegaRobo.Logger;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace MegaRobo.C00225155.ControlDevices
{
public class HighTemperatureShakeService : ConnectorBase<MegaTcpClient>
{
public override async Task<string> Initialize(ICoreService coreService, params object[] args)
{
this.CoreService = coreService;
try
{
base.CoreService = coreService;
if (args is [IPEndPoint remoteHost, ..])
{
base.ConnectorAdapter = new MegaTcpClient
{
Logger = coreService.Logger,
Name = base.Name
};
if (base.ConnectorAdapter != null)
{
base.ConnectorAdapter.DataReceived += ConnectorOnDataReceived;
}
ConnectionState = await base.ConnectorAdapter.ConnectAsync(remoteHost);
}
}
catch (Exception ex)
{
Logger.LogException(ex);
return await Task.FromResult(ex.Message);
}
return string.Empty;
}
private void ConnectorOnDataReceived(object sender, TcpMessage tcpMsg)
{
if (tcpMsg is null)
return;
var msg = tcpMsg.ParseStirng();
if (string.IsNullOrEmpty(msg)) return;
}
public override Task<ConnectionState> ReconnectAsync()
{
return base.ReconnectAsync();
}
/// <summary>
/// 检测连接状态
/// </summary>
/// <returns></returns>
public override async Task<ConnectionState> CheckConnected()
{
var state = ConnectionState.None;
if (ConnectorAdapter is not null)
{
state = await ConnectorAdapter.CheckConnectedAsync();
}
ConnectionState = state;
return state;
}
/// <summary>
/// 设置加热温度
/// </summary>
/// <param name="temperature"></param>
/// <param name="deviceId"></param>
/// <param name="offTemp">关闭温度</param>
/// <returns></returns>
public async Task<bool> SetTemperature(int temperature, byte deviceId, bool offTemp)
{
var tcpMessage = await ConnectorAdapter.WriteAndGetReplyAsync(HighTemperatureUartHCM.SendSetHotTemp(temperature, deviceId, offTemp), TimeSpan.FromSeconds(3));
if (tcpMessage is null)
return false;
ParseResult result = HighTemperatureUartHCM.ParseReceivedFrame(tcpMessage.Data);
return result.IsSuccess;
}
/// <summary>
/// 获取当前温度
/// </summary>
/// <param name="deviceId"></param>
/// <returns></returns>
public async Task<int> GetActualTemperature(byte deviceId)
{
int temperature = 0;
var tcpMessage = await ConnectorAdapter.WriteAndGetReplyAsync(HighTemperatureUartHCM.SendReadTempRequest(deviceId), TimeSpan.FromSeconds(3));
if (tcpMessage is null)
return 0;
ParseResult result = HighTemperatureUartHCM.ParseReceivedFrame(tcpMessage.Data);
if (result.IsSuccess)
{
temperature = (int)result.Data["实际温度(℃)"];
}
return temperature;
}
}
}