using System;
|
using System.Collections.Generic;
|
using System.DirectoryServices;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using AutoMapper;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
using SqlSugar;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_ITelescopicService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
|
|
namespace WIDESEAWCS_TelescopicService
|
{
|
public class ParametersService : ServiceBase<Dt_Parameters, IRepository<Dt_Parameters>>, IParametersService
|
{
|
public IRepository<Dt_Parameters> Repository => BaseDal;
|
private readonly IRepository<Sys_User> _user;
|
|
public ParametersService(IRepository<Dt_Parameters> BaseDal, IRepository<Sys_User> user) : base(BaseDal)
|
{
|
_user = user;
|
}
|
|
|
/// <summary>
|
/// 自动控制伸缩杆的伸出和缩回速度(一次性控制所有的)
|
/// </summary>
|
/// <param name="ExtendedState">伸/出状态</param>
|
/// <returns></returns>
|
public WebResponseContent automation(string extendedState)
|
{
|
var messages = new List<string>();
|
//string message = "";
|
try
|
{
|
for (int deptId = 1; deptId <= 5; deptId++)
|
{
|
try
|
{
|
var devices = GetDevicesByDeptId(deptId);
|
if (devices == null)
|
{
|
messages.Add($"DeptId={deptId} 未找到设备,跳过");
|
continue;
|
}
|
|
var para = BaseDal.QueryData()
|
.Where(x => x.Deptid == deptId)
|
.OrderByDescending(x => x.CreateDate)
|
.FirstOrDefault();
|
|
if (para == null)
|
{
|
messages.Add($"DeptId={deptId} 未找到参数配置,跳过");
|
continue;
|
}
|
|
int ext = (int)para.ExtendSpeed;
|
int ret = (int)para.RetractionSpeed;
|
int liftPos = (int)para.LeftPosition;
|
int rightPos = (int)para.RightPosition;
|
|
try
|
{
|
if (devices.Value.left.Communicator.Read<bool>("M117"))
|
{
|
|
return new WebResponseContent { Status = true, Message = "现在正在进行中,等待操作完成" };
|
}
|
|
}
|
catch (Exception)
|
{
|
}
|
try
|
{
|
if (devices.Value.right.Communicator.Read<bool>("M117"))
|
{
|
return new WebResponseContent { Status = true, Message = "现在正在进行中,等待操作完成" };
|
}
|
|
}
|
catch (Exception)
|
{
|
}
|
|
if (extendedState == "伸出")
|
{
|
|
try
|
{
|
if (devices.Value.left.Communicator.Read<float>("D80")>= liftPos-5)//到达最大位置)
|
{
|
messages.Add($"轨道站{deptId}左伸缩杆已到最大位置");
|
|
}
|
else
|
{
|
devices.Value.left.Communicator.Write<int>("D1004", liftPos);//伸出位置
|
devices.Value.left.Communicator.Write<int>("D1002", ext);//左PLC自动动伸出缩回速度
|
devices.Value.left.Communicator.Write<bool>("M102", true);//伸出按钮
|
|
}
|
}
|
catch { }
|
|
try
|
{
|
if (devices.Value.left.Communicator.Read<float>("D80") >=rightPos-5)
|
{
|
messages.Add($"轨道站{deptId}右伸缩杆已到最大位置");
|
|
}
|
else
|
{
|
devices.Value.right.Communicator.Write<int>("D1004", rightPos);
|
devices.Value.right.Communicator.Write<int>("D1002", ret);
|
devices.Value.right.Communicator.Write<bool>("M102", true);
|
|
} }
|
catch { }
|
|
}
|
else if (extendedState == "缩回")
|
{
|
|
try
|
{
|
if (devices.Value.left.Communicator.Read<bool>("M115")) //到达原点位
|
{
|
messages.Add($"轨道站{deptId}左伸缩杆已到原点");
|
|
}
|
else
|
{
|
// devices.Value.left.Communicator.Write<int>("D1004", liftPos);//伸出位置
|
devices.Value.left.Communicator.Write<int>("D1002", ext);//左PLC自动伸=缩回出缩回速度
|
devices.Value.left.Communicator.Write<bool>("M103", true);//左plc缩回按钮
|
|
}
|
}
|
catch { }
|
|
|
|
try
|
{
|
if (devices.Value.right.Communicator.Read<bool>("M115"))
|
{
|
messages.Add($"轨道站{deptId}右伸缩杆已到原点");
|
|
}
|
else
|
{
|
// devices.Value.right.Communicator.Write<int>("D1004", rightPos);
|
devices.Value.right.Communicator.Write<int>("D1002", ret);
|
devices.Value.right.Communicator.Write<bool>("M103", true);
|
|
}
|
|
|
}
|
catch { }
|
|
}
|
else
|
{
|
return new WebResponseContent { Status = false, Message = "未知操作命令" };
|
}
|
|
|
}
|
catch (Exception exDept)
|
{
|
messages.Add($"DeptId={deptId} 异常:{exDept.Message}");
|
}
|
}
|
|
return new WebResponseContent
|
{
|
Status = true,
|
Message = messages.Count == 0 ? "执行成功" : "部分执行失败:" + string.Join(";", messages),
|
Data = messages
|
};
|
}
|
catch (Exception ex)
|
{
|
return new WebResponseContent
|
{
|
Status = false,
|
Message = $"自动控制异常:{ex.Message}"
|
};
|
}
|
}
|
|
|
|
|
|
|
/// <summary>
|
/// 手动控制,伸缩杆的缩回和伸出速度
|
/// </summary>
|
/// <param name="position">伸缩杆的位置(左右)</param>
|
/// <param name="ExtendedState">伸/缩状态</param>
|
/// <param name="DeptId">股道号</param>
|
/// <returns></returns>
|
public WebResponseContent ManualOperation(string position, string ExtendedState,int DeptId)
|
{
|
try
|
{
|
|
var devices = GetDevicesByDeptId(DeptId);
|
|
//俩个plc左右各一个
|
//OtherDevice liftotherDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == "SSG001");
|
//OtherDevice rightotherDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == "SSG002");
|
|
//找到Dt_Parameters中的最新一条数据根据当前的deid
|
var para = BaseDal.QueryData().Where(x => x.Deptid == DeptId).OrderByDescending(x => x.CreateDate).FirstOrDefault();
|
int ext = (int)para.ManualExtend;//左PLC手动伸出缩回速度
|
int ret = (int)para.ManualRetraction;//右PLC手动伸出缩回速度
|
int liftPosition = (int)para.LeftPosition;//左伸出位置
|
int rigtpostition = (int)para.RightPosition;//右伸出位置
|
//bool canLeft = true,
|
// canRight = true;
|
string message = "";
|
|
try
|
{
|
if (devices.Value.left.Communicator.Read<bool>("M117")) //默认是flase
|
{
|
|
return new WebResponseContent { Status = true, Message = "现在正在进行中,等待操作完成" };
|
}
|
|
}
|
catch (Exception)
|
{
|
}
|
try
|
{
|
if (devices.Value.right.Communicator.Read<bool>("M117"))
|
{
|
return new WebResponseContent { Status = true, Message = "现在正在进行中,等待操作完成" };
|
}
|
|
}
|
catch (Exception)
|
{
|
}
|
if (position == "左" && ExtendedState == "伸出")
|
{
|
if (devices.Value.left.Communicator.Read<float>("D80") >= liftPosition - 5) //到达目标位置
|
{
|
message += "左伸缩杆到达目标位置;";
|
}
|
else
|
{
|
devices.Value.left.Communicator.Write<int>("D1004", liftPosition);//左伸出位置
|
devices.Value.left.Communicator.Write<int>("D1000", ext);//左PLC手动伸出缩回速度
|
devices.Value.left.Communicator.Write<bool>("M100", true);//伸出按钮
|
Thread.Sleep(100); // 等待100ms(模拟按钮按下)
|
devices.Value.left.Communicator.Write<bool>("M100", false); // 释放按钮
|
|
|
Console.WriteLine($"{position}伸缩杆手动伸出{ext}");
|
}
|
|
}
|
else if (position == "左" && ExtendedState == "缩回")
|
{
|
if (devices.Value.left.Communicator.Read<bool>("M115"))//缩回的时候判断)
|
{
|
message += "左PLC已到原点;";
|
}
|
else
|
{
|
// devices.Value.left.Communicator.Write<int>("D1004", liftPosition);//伸出位置
|
devices.Value.left.Communicator.Write<int>("D1000", ext);//左PLC手动伸出缩回速度
|
devices.Value.left.Communicator.Write<bool>("M101", true);
|
Thread.Sleep(100); // 等待100ms(模拟按钮按下)
|
devices.Value.left.Communicator.Write<bool>("M101", false); // 释放按钮
|
Console.WriteLine($"{position}伸缩杆手动缩回{ext}");
|
}
|
|
}
|
|
if (position == "右" && ExtendedState == "伸出")
|
{
|
if (devices.Value.right.Communicator.Read<float>("D80") >= rigtpostition - 5)
|
{
|
message += "右伸缩杆到达目标位置;";
|
}
|
else
|
{
|
devices.Value.right.Communicator.Write<int>("D1004", rigtpostition);//右伸出位置
|
devices.Value.right.Communicator.Write<int>("D1000", ret);//右PLC手动伸出缩回速度
|
devices.Value.right.Communicator.Write<bool>("M100", true);
|
Thread.Sleep(100); // 等待100ms(模拟按钮按下)
|
devices.Value.right.Communicator.Write<bool>("M100", false); // 释放按钮
|
Console.WriteLine($"{position}伸缩杆手动伸出{ret}");
|
}
|
|
|
}
|
else if (position == "右" && ExtendedState == "缩回")
|
{
|
if (devices.Value.right.Communicator.Read<bool>("M115"))
|
{
|
message += "右伸缩杆已到原点;";
|
}
|
else
|
{
|
// devices.Value.right.Communicator.Write<int>("D1004", rigtpostition);//伸出位置
|
devices.Value.right.Communicator.Write<int>("D1000", ret);//右PLC手动伸出缩回速度
|
devices.Value.right.Communicator.Write<bool>("M101", true);
|
Thread.Sleep(100); // 等待100ms(模拟按钮按下)
|
devices.Value.right.Communicator.Write<bool>("M101", false); // 释放按钮
|
Console.WriteLine($"{position}伸缩杆手动缩回{ret}");
|
}
|
|
}
|
|
|
|
return new WebResponseContent
|
{
|
Status = true,
|
Message = string.IsNullOrEmpty(message) ? "执行成功" : $"{message}",
|
Data = new
|
{
|
ManualExtend = ext,
|
ManualRetraction = ret,
|
message
|
}
|
};
|
}
|
|
|
catch (Exception ex)
|
{
|
return new WebResponseContent { Status = false, Message = ex.Message };
|
|
}
|
|
}
|
|
|
/// <summary>
|
///当自动伸出需要暂停时,暂停按钮
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent PauseButton(int deptid)
|
{
|
try
|
{
|
//根据int.TryParse(AppSettings.Get("DepartmentID")读取到当前是轨道几,所有人都只能操作当前
|
var devices = GetDevicesByDeptId(deptid);
|
try
|
{
|
devices.Value.left.Communicator.Write<bool>("M104", true);
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
|
try
|
{
|
devices.Value.right.Communicator.Write<bool>("M104", true);
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
return new WebResponseContent { Status = true, Message = "暂停成功", Data = devices };
|
}
|
catch (Exception ex)
|
{
|
|
return new WebResponseContent { Status = false, Message = ex.Message };
|
}
|
}
|
|
|
/// <summary>
|
/// 伸缩杆当前位置(这个没有用)
|
/// <param name="deptid">轨道站号</param>
|
public WebResponseContent CurrentLocation(int deptid)
|
{
|
try
|
{
|
var devices = GetDevicesByDeptId(deptid);
|
if (devices == null)
|
return new WebResponseContent { Status = false, Message = "设备未找到" };
|
var deviceslift = devices.Value.left.Communicator.Read<float>("D80");
|
var devicesright = devices.Value.right.Communicator.Read<float>("D80");
|
Console.WriteLine($"当前左右伸缩杆返回速度分别为为{deviceslift}");
|
return new WebResponseContent
|
{
|
Status = true,
|
Data = new { lift = deviceslift, Right = devicesright }
|
};
|
}
|
catch (Exception ex)
|
{
|
|
return new WebResponseContent { Status=false,Message=ex.Message};
|
}
|
}
|
|
|
/// <summary>
|
/// 获取设备号
|
/// </summary>
|
/// <param name="deptId"></param>
|
/// <returns></returns>
|
public (OtherDevice left, OtherDevice right)? GetDevicesByDeptId(int deptId)
|
{
|
// 左设备号:1 -> 001,2 -> 003,3 -> 005...
|
int baseCode = 1 + (deptId - 1) * 2;
|
string leftCode = $"SSG{baseCode.ToString("D3")}";
|
//右设备:1->002 ,2->004
|
string rightCode = $"SSG{(baseCode + 1).ToString("D3")}";
|
var left = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == leftCode);
|
var right = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightCode);
|
|
if (left == null || right == null)
|
return null;
|
|
return (left, right);
|
}
|
|
|
}
|
|
}
|