You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
8.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using GummingCommon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace GummingControl
{
public class ControlCheck
{
public static int WaitTimes = 20000;//等待次数 20000/5 约一千次, 20S
public static int HomeWaitTimes = 15000;//等待次数 15000/5 约3千次 15S
public static int DIWaitTimes = 10000;//等待次数 5000/10 约500次 5S
public static bool PMCInvoke(bool IgnoreError, string FuncInfo, object Input, Func<bool> DoAction)
{
bool st = false;
int retryCount = 0;
while (!st)
{
retryCount++;
st = DoAction();
if (retryCount % 101 == 0)
{
string error = string.Format("{0}{1}次重试,", FuncInfo, retryCount);
Global.WriteErrorLog(error);
}
if (retryCount > 3)
{
Thread.Sleep(5);
}
if (retryCount > Global.MaxRetryTimers)
{
object target = DoAction.Target;
string parameters = string.Empty;
if (target != null)
{
foreach (var field in target?.GetType()?.GetFields())
{
parameters = string.Format("{0},FieldName:{1},FieldValue:{2}\r\n", parameters, field.Name, field.GetValue(target));
}
}
string error = string.Format("{0}硬件接口第{1}次重试后仍然不能连接硬件设备,错误详情:{2},请尝试重启系统进行连接", FuncInfo, retryCount, parameters);
Global.WriteErrorLog(error);
if (!IgnoreError)
{
//暂时不予处理
break;
//throw new Exception(error);
}
}
}
return st;
}
public static bool WaitMainHomeDone(ushort nodeId, ushort slotId, int delay)
{
bool isDone = false;
int waitTime = 0;
if (delay <= 0)
{
delay = HomeWaitTimes;
}
DateTime dtStart = DateTime.Now;
while (!isDone && waitTime < delay)
{
Thread.Sleep(5); //等待执行时间后自动关闭
ushort postion = DeviceControl.HomeStatus(nodeId, slotId);
isDone = postion == 0;
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < delay;
}
public static bool WaitHomeDone(ushort nodeId, ushort slotId, int delay)
{
bool isDone = false;
int waitTime = 0;
if (delay <= 0)
{
delay = HomeWaitTimes;
}
DateTime dtStart = DateTime.Now;
while (!isDone && waitTime < delay)
{
Thread.Sleep(5); //等待执行时间后自动关闭
isDone = DeviceControl.IsRealHomeStatus(nodeId, slotId);
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < delay;
/*
bool isDone = false;
int waitTime = 0;
while (!isDone && waitTime < HomeWaitTimes)
{
Thread.Sleep(5); //等待执行时间后自动关闭
ushort postion = DeviceControl.HomeStatus(nodeId, slotId);
isDone = postion == 0;
if (isDone)
{
return true;
}
waitTime = waitTime + 5;
}
return waitTime < HomeWaitTimes;*/
}
public static bool WaitHPHomeDone(ushort nodeId, ushort slotId, int delay)
{
bool isDone = false;
int waitTime = 0;
if (delay <= 0)
{
delay = HomeWaitTimes;
}
DateTime dtStart = DateTime.Now;
while (!isDone && waitTime < delay)
{
Thread.Sleep(5); //等待执行时间后自动关闭
isDone = DeviceControl.IsHPRealHomeStatus(nodeId, slotId);
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < delay;
}
public static bool IsHomeDone(ushort nodeId, ushort slotId)
{
/*ushort postion = DeviceControl.HomeStatus(nodeId, slotId);
int postion2 = 0;
DeviceControl.GetPosition(nodeId, slotId, ref postion2);
return postion == 0 && Math.Abs(postion2) < 100;*/
return DeviceControl.IsRealHomeStatus(nodeId, slotId);
}
public static bool IsHPHomeDone(ushort nodeId, ushort slotId)
{
/*ushort postion = DeviceControl.HomeStatus(nodeId, slotId);
int postion2 = 0;
DeviceControl.GetPosition(nodeId, slotId, ref postion2);
return postion == 0 && Math.Abs(postion2) < 100;*/
return DeviceControl.IsHPRealHomeStatus(nodeId, slotId);
}
public static bool IsMainHomeDone(ushort nodeId, ushort slotId)
{
ushort postion = DeviceControl.HomeStatus(nodeId, slotId);
int postion2 = 0;
DeviceControl.GetPosition(nodeId, slotId, ref postion2);
return postion == 0 && Math.Abs(postion2) < 100;
}
public static bool WaitAxisDone(ushort nodeId)
{
bool isDone = false;
int waitTime = 0;
Helpering.Sleep(300);//等待电机运动
DateTime dtStart = DateTime.Now;
while (!isDone && waitTime < WaitTimes)
{
Thread.Sleep(5); //等待执行时间后自动关闭
isDone = DeviceControl.CheckMotionDone(nodeId);
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < WaitTimes;
}
public static bool WaitDIDone(string refRecId, bool compareValue)
{
bool isDone = false;
int waitTime = 0;
var inputIO = Global.InputIOs.FirstOrDefault(q => q.RecId == refRecId);
DateTime dtStart = DateTime.Now;
while (!isDone && waitTime < DIWaitTimes)
{
Thread.Sleep(10); //等待执行时间后自动关闭
isDone = DeviceControl.GetPortStatus(inputIO.NodeId, inputIO.SlotId, inputIO.PortIndex, compareValue);
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < DIWaitTimes;
}
public static bool WaitDIDone(string refRecId, bool compareValue, int delay)
{
bool isDone = false;
int waitTime = 0;
var inputIO = Global.InputIOs.FirstOrDefault(q => q.RecId == refRecId);
DateTime dtStart = DateTime.Now;
if (delay <= 0)
{
delay = DIWaitTimes;
}
while (!isDone && waitTime < delay)
{
Thread.Sleep(10); //等待执行时间后自动关闭
isDone = DeviceControl.GetPortStatus(inputIO.NodeId, inputIO.SlotId, inputIO.PortIndex, compareValue);
if (isDone)
{
return true;
}
waitTime = (int)(DateTime.Now - dtStart).TotalMilliseconds;
}
return waitTime < delay;
}
}
}