You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
505 lines
20 KiB
C#
505 lines
20 KiB
C#
using Admin.Core.Common.Helper;
|
|
using Admin.Core.IService;
|
|
using Aucma.Core.HwPLc;
|
|
using Aucma.Core.OldBoxFoam.Models;
|
|
using Aucma.Core.Tasks.Models;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using NetTaste;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Aucma.Core.Tasks.Business
|
|
{
|
|
public class Collection
|
|
{
|
|
public static HwPLc.PlcModel plc1 = null;
|
|
public static HwPLc.PlcModel plc2 = null;
|
|
public static HwPLc.PlcModel plc3 = null;
|
|
public static HwPLc.PlcModel plc4 = null;
|
|
public static List<FixtureStatus> listFixtureStatus = new List<FixtureStatus>();
|
|
public static List<SpaceDetailModel> spaceDetailModel = new List<SpaceDetailModel>();
|
|
|
|
public static List<int> BoxTypeList = new List<int>();
|
|
public static List<int> HolderStatusList = new List<int>();
|
|
public static List<int> HolderOutPutList = new List<int>();
|
|
public static List<int> SolidifyTimeList = new List<int>();
|
|
public static List<string> StoreTypeList = new List<string>();
|
|
public static List<string> StoreAmountList = new List<string>();
|
|
|
|
|
|
public Collection() {
|
|
}
|
|
public static void startCollect()
|
|
{
|
|
}
|
|
|
|
private static void ExecTaskMethod()
|
|
{
|
|
while (true)
|
|
{
|
|
Thread.Sleep(3000);
|
|
plc1 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc1"));
|
|
plc2 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc2"));
|
|
plc3 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc3"));
|
|
plc4 = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("OldMelsecPlc4"));
|
|
|
|
BoxTypeList.Clear();
|
|
HolderStatusList.Clear();
|
|
HolderOutPutList.Clear();
|
|
SolidifyTimeList.Clear();
|
|
listFixtureStatus.Clear();//夹具集合
|
|
spaceDetailModel.Clear();//货道集合
|
|
//夹具箱型
|
|
|
|
ReadBoxType(plc1, BoxTypeList);
|
|
ReadBoxType(plc2, BoxTypeList);
|
|
ReadBoxType(plc3, BoxTypeList);
|
|
ReadBoxType(plc4, BoxTypeList);
|
|
|
|
ReadHolderStatus(plc1, HolderStatusList);
|
|
ReadHolderStatus(plc2, HolderStatusList);
|
|
ReadHolderStatus(plc3, HolderStatusList);
|
|
|
|
ReadHolderOutPut(plc1, HolderOutPutList);
|
|
ReadHolderOutPut(plc2, HolderOutPutList);
|
|
ReadHolderOutPut(plc3, HolderOutPutList);
|
|
ReadHolderOutPut(plc4, HolderOutPutList);
|
|
|
|
ReadSolidifyTime(plc1, SolidifyTimeList);
|
|
ReadSolidifyTime(plc2, SolidifyTimeList);
|
|
ReadSolidifyTime(plc3, SolidifyTimeList);
|
|
ReadSolidifyTime(plc4, SolidifyTimeList);
|
|
|
|
ReadStoreType(plc1, StoreTypeList);
|
|
ReadStoreType(plc2, StoreTypeList);
|
|
ReadStoreType(plc3, StoreTypeList);
|
|
ReadStoreType(plc4, StoreTypeList);
|
|
|
|
ReadStoreAmount(plc1, StoreAmountList);
|
|
ReadStoreAmount(plc2, StoreAmountList);
|
|
ReadStoreAmount(plc3, StoreAmountList);
|
|
ReadStoreAmount(plc4, StoreAmountList);
|
|
for (int i = 0; i < 24; i++)
|
|
{
|
|
FixtureStatus model = new FixtureStatus();
|
|
model.ObjId = i + 1;
|
|
if (BoxTypeList.Count > 0 && BoxTypeList != null)
|
|
{
|
|
model.FixtureBoxType = BoxTypeList[i].ToString();
|
|
}
|
|
else
|
|
{
|
|
model.FixtureBoxType = "";
|
|
}
|
|
if (HolderStatusList.Count > 0 && HolderStatusList != null)
|
|
{
|
|
model.Status = HolderStatusList[i];
|
|
}
|
|
else
|
|
{
|
|
model.Status = 0;
|
|
}
|
|
if (HolderOutPutList.Count > 0 && HolderOutPutList != null)
|
|
{
|
|
model.Yield = HolderOutPutList[i];
|
|
}
|
|
else
|
|
{
|
|
model.Yield = 0;
|
|
}
|
|
if (SolidifyTimeList.Count > 0 && HolderOutPutList != null)
|
|
{
|
|
model.PlanCuringTime = SolidifyTimeList[i];
|
|
}
|
|
else
|
|
{
|
|
model.PlanCuringTime = 0;
|
|
}
|
|
listFixtureStatus.Add(model);
|
|
}
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
SpaceDetailModel model = new SpaceDetailModel();
|
|
model.ObjId = i + 1;
|
|
if (StoreTypeList.Count > 0) model.StoreType = StoreTypeList[i].ToString();
|
|
if (StoreAmountList.Count > 0) model.StoreAmount = Convert.ToInt32(StoreAmountList[i]);
|
|
spaceDetailModel.Add(model);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取夹具箱型
|
|
/// </summary>
|
|
static void ReadBoxType(HwPLc.PlcModel obj, List<int> HolderStatusList)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
|
|
if (obj.plc.IsConnected)
|
|
{
|
|
byte[] result = obj.plc.Read("D3140", 48);
|
|
if (result == null) return;
|
|
byte[] info = result;
|
|
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(4).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp3 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(8).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp4 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(12).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp5 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(16).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp6 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(18).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
BoxTypeList.Add(temp1);
|
|
BoxTypeList.Add(temp2);
|
|
BoxTypeList.Add(temp3);
|
|
BoxTypeList.Add(temp4);
|
|
BoxTypeList.Add(temp5);
|
|
BoxTypeList.Add(temp6);
|
|
Console.WriteLine($"读取夹具箱型,1#:{temp1};2#{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}");
|
|
}
|
|
else
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取夹具状态
|
|
/// </summary>
|
|
static void ReadHolderStatus(PlcModel obj1, List<int> HolderStatusList)
|
|
{
|
|
if (obj1 == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] result = obj1.plc.Read("YF0", 1);
|
|
if (result == null) return;
|
|
//输出二进制字符串,1#-3#手动、自动数据
|
|
string str1 = ByteArrayToBinary(array(result));
|
|
byte[] result2 = obj1.plc.Read("Y110", 1);
|
|
string str2 = ByteArrayToBinary(array(result2));
|
|
//1#
|
|
int item1 = 0;
|
|
if (str1.Substring(0, 1) == "1")
|
|
{
|
|
item1 = 1;
|
|
}
|
|
else if (str1.Substring(1, 1) == "1")
|
|
{
|
|
item1 = 2;
|
|
}
|
|
else if (str2.Substring(0, 1) == "1")
|
|
{
|
|
item1 = 3;
|
|
}
|
|
|
|
//2#
|
|
int item2 = 0;
|
|
if (str1.Substring(5, 1) == "1")
|
|
{
|
|
item2 = 1;
|
|
}
|
|
else if (str1.Substring(6, 1) == "1")
|
|
{
|
|
item2 = 2;
|
|
}
|
|
else if (str2.Substring(1, 1) == "1")
|
|
{
|
|
item2 = 3;
|
|
}
|
|
|
|
//3#
|
|
int item3 = 0;
|
|
if (str1.Substring(10, 1) == "1")
|
|
{
|
|
item3 = 1;
|
|
}
|
|
else if (str1.Substring(11, 1) == "1")
|
|
{
|
|
item3 = 2;
|
|
}
|
|
else if (str2.Substring(2, 1) == "1")
|
|
{
|
|
item3 = 3;
|
|
}
|
|
|
|
byte[] result3 = obj1.plc.Read("Y100", 1);
|
|
string str3 = ByteArrayToBinary(array(result3));
|
|
|
|
int item4 = 0;
|
|
if (str3.Substring(0, 1) == "1")
|
|
{
|
|
item4 = 1;
|
|
}
|
|
else if (str3.Substring(1, 1) == "1")
|
|
{
|
|
item4 = 2;
|
|
}
|
|
else if (str2.Substring(3, 1) == "1")
|
|
{
|
|
item4 = 3;
|
|
}
|
|
int item5 = 0;
|
|
if (str3.Substring(5, 1) == "1")
|
|
{
|
|
item5 = 1;
|
|
}
|
|
else if (str3.Substring(6, 1) == "1")
|
|
{
|
|
item5 = 2;
|
|
}
|
|
else if (str2.Substring(4, 1) == "1")
|
|
{
|
|
item5 = 3;
|
|
}
|
|
int item6 = 0;
|
|
if (str3.Substring(10, 1) == "1")
|
|
{
|
|
item6 = 1;
|
|
}
|
|
else if (str3.Substring(11, 1) == "1")
|
|
{
|
|
item6 = 2;
|
|
}
|
|
else if (str2.Substring(5, 1) == "1")
|
|
{
|
|
item6 = 3;
|
|
}
|
|
HolderStatusList.Add(item1);
|
|
HolderStatusList.Add(item2);
|
|
HolderStatusList.Add(item3);
|
|
HolderStatusList.Add(item4);
|
|
HolderStatusList.Add(item5);
|
|
HolderStatusList.Add(item6);
|
|
Console.WriteLine($"读取夹具状态,1#:{item1};2#:{item2};3#:{item3};4#:{item4};5#:{item5};6#:{item6}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取夹具产量
|
|
/// </summary>
|
|
static void ReadHolderOutPut(PlcModel obj,List<int> HolderOutPutList)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] result = obj.plc.Read("D182", 24);
|
|
if (result == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] info = result;
|
|
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(2).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp3 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(4).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp4 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(6).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp5 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(8).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp6 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(10).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
HolderOutPutList.Add(temp1);
|
|
HolderOutPutList.Add(temp2);
|
|
HolderOutPutList.Add(temp3);
|
|
HolderOutPutList.Add(temp4);
|
|
HolderOutPutList.Add(temp5);
|
|
HolderOutPutList.Add(temp6);
|
|
|
|
Console.WriteLine($"读取夹具产量,1#:{temp1};2#{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取固化时间
|
|
/// </summary>
|
|
static void ReadSolidifyTime(PlcModel obj,List<int> SolidifyTimeList)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] result = obj.plc.Read("D910", 24);
|
|
if (result == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] info = result;
|
|
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(2).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp3 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(4).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp4 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(6).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp5 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(8).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp6 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(10).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
SolidifyTimeList.Add(temp1);
|
|
SolidifyTimeList.Add(temp2);
|
|
SolidifyTimeList.Add(temp3);
|
|
SolidifyTimeList.Add(temp4);
|
|
SolidifyTimeList.Add(temp5);
|
|
SolidifyTimeList.Add(temp6);
|
|
Console.WriteLine($"读取固化时间,1#:{temp1};2#{temp2};3#:{temp3};4#:{temp4};5#:{temp5};6#:{temp6}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 读取泡前库箱型
|
|
/// </summary>
|
|
static void ReadStoreType(PlcModel obj, List<string> storeType)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
//夹具箱型
|
|
byte[] result = obj.plc.Read("D2010", 40);
|
|
if (result == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] info = result;
|
|
int temp1 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(0).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp2 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(20).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp3 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(40).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
int temp4 = short.Parse(StringChange.bytesToHexStr(array(info.Skip(60).Take(2).ToArray()), 2), System.Globalization.NumberStyles.HexNumber);
|
|
|
|
storeType.Add(temp1.ToString());
|
|
storeType.Add(temp2.ToString());
|
|
storeType.Add(temp2.ToString());
|
|
storeType.Add(temp2.ToString());
|
|
Console.WriteLine($"读取泡前库箱型,1#:{temp1};2#{temp2};3#:{temp3};4#:{temp4}");
|
|
}
|
|
/// <summary>
|
|
/// 读取泡前库库存
|
|
/// </summary>
|
|
static void ReadStoreAmount(PlcModel obj, List<string> storeAmount)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
byte[] result = obj.plc.Read("L101", 1);
|
|
if (result == null)
|
|
{
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
BoxTypeList.Add(0);
|
|
return;
|
|
}
|
|
string str1 = ByteArrayToBinary(array(result)).Substring(0, 3);
|
|
int item1 = Regex.Matches(str1, "1").Count;
|
|
|
|
byte[] result2 = obj.plc.Read("L201", 1);
|
|
string str2 = ByteArrayToBinary(array(result2)).Substring(0, 3);
|
|
int item2 = Regex.Matches(str2, "1").Count;
|
|
|
|
byte[] result3 = obj.plc.Read("L301", 1);
|
|
string str3 = ByteArrayToBinary(array(result3)).Substring(0, 3);
|
|
int item3 = Regex.Matches(str3, "1").Count;
|
|
|
|
byte[] result4 = obj.plc.Read("L401", 1);
|
|
string str4 = ByteArrayToBinary(array(result4)).Substring(0, 3);
|
|
int item4 = Regex.Matches(str4, "1").Count;
|
|
|
|
Console.WriteLine($"读取泡前库库存,1#:{item1};2#{item2};3#:{item3};4#:{item4}");
|
|
}
|
|
|
|
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
static byte[] array(byte[] data)
|
|
{
|
|
for (int i = 0; i < data.Length; i += 2)
|
|
{
|
|
byte temp = data[i];
|
|
data[i] = data[i + 1];
|
|
data[i + 1] = temp;
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
/// <summary>
|
|
/// byte[]转二进制
|
|
/// </summary>
|
|
/// <param name="bytes"></param>
|
|
static string ByteArrayToBinary(byte[] bytes)
|
|
{
|
|
StringBuilder binaryString = new StringBuilder();
|
|
|
|
foreach (byte b in bytes)
|
|
{
|
|
binaryString.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
|
|
}
|
|
|
|
// Console.WriteLine(binaryString);
|
|
|
|
string reversedStr = new string(binaryString.ToString().Reverse().ToArray());
|
|
// Console.WriteLine(reversedStr);
|
|
|
|
return reversedStr;
|
|
}
|
|
}
|
|
}
|