using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IDCL.FFU
{
public interface IFFU
{
/// <summary>
/// 串口是否打开
/// </summary>
bool IsOpen { get; }
/// <summary>
/// 连接
/// </summary>
/// <param name="args">连接转速</param>
/// <returns></returns>
bool Connect(params object[] args);
/// <summary>
/// 断开
/// </summary>
void Disconnect();
/// <summary>
/// 读取转速
/// </summary>
/// <returns>如果为空表示读取失败</returns>
int ReadFFUSpeed();
/// <summary>
/// 设置转速
/// </summary>
/// <param name="speed"></param>
/// <returns></returns>
bool SetFFUSpeed(ushort[] speed);
/// <summary>
/// 获取风机实时状态
/// </summary>
/// <returns>0-离线;1-停止;2-运行;3-故障;</returns>
int GetStatus();
}
}
using Aitex.Core.RT.Log;
using IDCL.FFU;
using Modbus.Device;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DCL.FFU
{
public class FFU : IFFU
{
private IModbusMaster master;
SerialPort port = null;
/// <summary>
/// 打开串口
/// </summary>
/// <param name="portName"></param>
/// <returns></returns>
private bool OpenPort(string portName)
{
//try
//{
if (port != null)
{
Disconnect();
}
port = new SerialPort(portName);
port.BaudRate = 9600;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.DataBits = 8;
port.Open();
//}
//catch(Exception ex)
//{
// LOG.Write(new Exception("FFU Error:" + ex.Message));
//}
return port.IsOpen;
}
public bool IsOpen
{
get
{
return this.port.IsOpen;
}
}
public bool Connect(params object[] args)
{
string portName = args[0].ToString();
if (!OpenPort(portName)) return false;
master = ModbusSerialMaster.CreateRtu(port);
return master != null;
}
public void Disconnect()
{
port?.Close();
}
public int ReadFFUSpeed()
{
var datas = master?.ReadHoldingRegisters(1, 49, 1);
if (datas == null || datas.Length == 0) return -1;
int speed = Convert.ToInt16(datas[0]);
return speed;
}
public bool SetFFUSpeed(ushort [] speed)
{
//ushort[] datas = new ushort[1] { Convert.ToUInt16(speed) };
//master?.WriteMultipleRegisters(1, 10, speed);
master.WriteSingleRegister(1, 10, speed[0]);
return true;
}
public int GetStatus()
{
//0-离线;1-停止;2-运行;3故障;
var datas = master?.ReadHoldingRegisters(1, 80, 1);
if (datas == null || datas.Length == 0) return -1; //读取异常
int status = Convert.ToInt16(datas[0]);
return status;
}
}
}