|
|
|
@ -44,80 +44,84 @@ namespace Aucma.Core.DoorFoam.Business
|
|
|
|
|
|
|
|
|
|
public void startCollect()
|
|
|
|
|
{
|
|
|
|
|
while (true)
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
//semaphore.WaitOne();
|
|
|
|
|
try
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
|
|
|
|
|
var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("DoorPlc"));
|
|
|
|
|
|
|
|
|
|
if (obj != null)
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//读取所有模具状态
|
|
|
|
|
List<DoorFoamMachine> moldStatusList = ReadModeStatus(obj);
|
|
|
|
|
//读取所有模具型号
|
|
|
|
|
List<DoorFoamMachine> moldTypeList = ReadModeType(obj);
|
|
|
|
|
//读取所有模具产量
|
|
|
|
|
List<DoorFoamMachine> aDoorMoldOutPutList = ReadADoorModeProduct(obj);
|
|
|
|
|
List<DoorFoamMachine> bDoorMoldOutPutList = ReadBDoorModeProduct(obj);
|
|
|
|
|
Thread.Sleep(2000);
|
|
|
|
|
|
|
|
|
|
#region 读取设备状态(1运行 2停机 3故障)、生产节拍、节拍、设备报警
|
|
|
|
|
byte[] info = obj.plc.Read("DB490.646", 10);
|
|
|
|
|
int deviceStatus = 0;
|
|
|
|
|
float productTakt = 0;
|
|
|
|
|
float taktNum = 0;
|
|
|
|
|
if (info != null)
|
|
|
|
|
{
|
|
|
|
|
//设备状态1运行 2停机 3故障
|
|
|
|
|
deviceStatus = judgeStatus(ByteArrayToBinary(info.Skip(0).Take(1).ToArray()));
|
|
|
|
|
// 台车节拍
|
|
|
|
|
productTakt = int.Parse(StringChange.bytesToHexStr(info.Skip(2).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
|
//整圈节拍
|
|
|
|
|
taktNum = int.Parse(StringChange.bytesToHexStr(info.Skip(6).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
|
}
|
|
|
|
|
var obj = PlcHelper.siemensList.FirstOrDefault(d => d.EquipName.Equals("DoorPlc"));
|
|
|
|
|
|
|
|
|
|
int deviceAlarm = obj.plc.ReadInt32("DB490.2136");
|
|
|
|
|
#endregion
|
|
|
|
|
if (obj != null)
|
|
|
|
|
{
|
|
|
|
|
//读取所有模具状态
|
|
|
|
|
List<DoorFoamMachine> moldStatusList = ReadModeStatus(obj);
|
|
|
|
|
//读取所有模具型号
|
|
|
|
|
List<DoorFoamMachine> moldTypeList = ReadModeType(obj);
|
|
|
|
|
//读取所有模具产量
|
|
|
|
|
List<DoorFoamMachine> aDoorMoldOutPutList = ReadADoorModeProduct(obj);
|
|
|
|
|
List<DoorFoamMachine> bDoorMoldOutPutList = ReadBDoorModeProduct(obj);
|
|
|
|
|
|
|
|
|
|
List<DoorFoamMachine> result = new List<DoorFoamMachine>();
|
|
|
|
|
|
|
|
|
|
var mergedCollection = from moldStatus in moldStatusList
|
|
|
|
|
join moldType in moldTypeList on new { moldStatus.StationTrolleyNumber } equals new { moldType.StationTrolleyNumber }
|
|
|
|
|
join moldOutPut_A in aDoorMoldOutPutList on new { moldStatus.StationTrolleyNumber } equals new { moldOutPut_A.StationTrolleyNumber }
|
|
|
|
|
join moldOutPut_B in bDoorMoldOutPutList on new { moldStatus.StationTrolleyNumber } equals new { moldOutPut_B.StationTrolleyNumber }
|
|
|
|
|
select new DoorFoamMachine
|
|
|
|
|
{
|
|
|
|
|
StationTrolleyNumber = moldStatus.StationTrolleyNumber,
|
|
|
|
|
GunNumber = moldStatus.GunNumber,
|
|
|
|
|
MoldStatus = moldStatus.MoldStatus,
|
|
|
|
|
MainId = moldStatus.MainId,
|
|
|
|
|
MoldType = moldType.MoldType.Replace("\b","").Replace("\u0001", "").Replace("\0", "").Trim(),
|
|
|
|
|
MoldProdutionA = moldOutPut_A.MoldProdutionA,
|
|
|
|
|
MoldProdutionB = moldOutPut_B.MoldProdutionB,
|
|
|
|
|
DeviceStatus = deviceStatus,
|
|
|
|
|
DeviceAlarm = deviceAlarm,
|
|
|
|
|
ProductTakt = productTakt,
|
|
|
|
|
Takt = taktNum,
|
|
|
|
|
CreateTime = DateTime.Now
|
|
|
|
|
};
|
|
|
|
|
result = mergedCollection.ToList();
|
|
|
|
|
if(result != null)
|
|
|
|
|
{
|
|
|
|
|
RefreshDoorFoamMachineEvent?.Invoke(result);
|
|
|
|
|
#region 读取设备状态(1运行 2停机 3故障)、生产节拍、节拍、设备报警
|
|
|
|
|
byte[] info = obj.plc.Read("DB490.646", 10);
|
|
|
|
|
int deviceStatus = 0;
|
|
|
|
|
float productTakt = 0;
|
|
|
|
|
float taktNum = 0;
|
|
|
|
|
if (info != null)
|
|
|
|
|
{
|
|
|
|
|
//设备状态1运行 2停机 3故障
|
|
|
|
|
deviceStatus = judgeStatus(ByteArrayToBinary(info.Skip(0).Take(1).ToArray()));
|
|
|
|
|
// 台车节拍
|
|
|
|
|
productTakt = int.Parse(StringChange.bytesToHexStr(info.Skip(2).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
|
//整圈节拍
|
|
|
|
|
taktNum = int.Parse(StringChange.bytesToHexStr(info.Skip(6).Take(4).ToArray(), 4), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int deviceAlarm = obj.plc.ReadInt32("DB490.2136");
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
List<DoorFoamMachine> result = new List<DoorFoamMachine>();
|
|
|
|
|
|
|
|
|
|
var mergedCollection = from moldStatus in moldStatusList
|
|
|
|
|
join moldType in moldTypeList on new { moldStatus.StationTrolleyNumber } equals new { moldType.StationTrolleyNumber }
|
|
|
|
|
join moldOutPut_A in aDoorMoldOutPutList on new { moldStatus.StationTrolleyNumber } equals new { moldOutPut_A.StationTrolleyNumber }
|
|
|
|
|
join moldOutPut_B in bDoorMoldOutPutList on new { moldStatus.StationTrolleyNumber } equals new { moldOutPut_B.StationTrolleyNumber }
|
|
|
|
|
select new DoorFoamMachine
|
|
|
|
|
{
|
|
|
|
|
StationTrolleyNumber = moldStatus.StationTrolleyNumber,
|
|
|
|
|
GunNumber = moldStatus.GunNumber,
|
|
|
|
|
MoldStatus = moldStatus.MoldStatus,
|
|
|
|
|
MainId = moldStatus.MainId,
|
|
|
|
|
MoldType = moldType.MoldType.Replace("\b", "").Replace("\u0001", "").Replace("\0", "").Trim(),
|
|
|
|
|
MoldProdutionA = moldOutPut_A.MoldProdutionA,
|
|
|
|
|
MoldProdutionB = moldOutPut_B.MoldProdutionB,
|
|
|
|
|
DeviceStatus = deviceStatus,
|
|
|
|
|
DeviceAlarm = deviceAlarm,
|
|
|
|
|
ProductTakt = productTakt,
|
|
|
|
|
Takt = taktNum,
|
|
|
|
|
CreateTime = DateTime.Now
|
|
|
|
|
};
|
|
|
|
|
result = mergedCollection.ToList();
|
|
|
|
|
if (result != null)
|
|
|
|
|
{
|
|
|
|
|
RefreshDoorFoamMachineEvent?.Invoke(result);
|
|
|
|
|
|
|
|
|
|
var addFlag = _doorFoamMachineServices.AddAsync(result).Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var addFlag = _doorFoamMachineServices.AddAsync(result).Result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Console.WriteLine($"门体发泡数据采集异常:{ex.Message}");
|
|
|
|
|
Console.WriteLine($"门体发泡数据采集异常:{ex.Message}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 读取模位状态
|
|
|
|
|