using HH.WCS.Mobox3.NFLZ.device;
using HH.WCS.Mobox3.NFLZ.dispatch;
using HH.WCS.Mobox3.NFLZ.util;
using HH.WCS.Mobox3.NFLZ.wms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace HH.WCS.Mobox3.NFLZ.process
{
///
/// 设备信号处理,主要是tcp信号,我们做server被动接收信号来处理,根据项目定制的
///
internal class DeviceProcess
{
private static Dictionary LineState = new Dictionary();
public class statemodel
{
public string status { get; set; }
public DateTime modify { get; set; }
}
internal static void Analysis(string data, string ip) {
if (data.Length >= 6) {
//去掉消息头3F 00
data = data.Substring(4);
//Console.WriteLine($"{ip}-{data}");
var plc = Settings.deviceInfos.Where(a => a.address == ip && a.enable == 1).FirstOrDefault();
if (plc != null) {
LinZhiAnalysisDeviceChange(data, plc);
}
else {
Console.WriteLine($"TCP信号处理:未查询到IP为{ip}的数据,请检查deviceInfo配置中心是否存在该IP的数据!");
}
}
}
///
/// 农夫林芝不同项目设备特殊处理
///
///
///
///
private static void LinZhiAnalysisDeviceChange(string data, Settings.deviceInfo plc)
{
if (plc.deviceType == 1) AnalysisDoor(data, plc);//自动门处理
if (plc.deviceType == 2) LinZhiAnalysisProductLine(data, plc);//输送线处理 -- 成品下线
if (plc.deviceType == 3) LinZhiAnalysisProductLine(data, plc);//输送线处理 -- 空托上线
if (plc.deviceType == 4) LinZhiAnalysisPreform(data, plc);//瓶坯机
if (plc.deviceType == 5) LinZhiAnalysisPGDump(data, plc);//瓶盖翻斗机
if (plc.deviceType == 6) LinZhiAnalysisPPDump(data, plc);//瓶坯翻斗机
}
private static void LinZhiAnalysisProductLine(string data, Settings.deviceInfo plc)
{
LogHelper.Info($"{plc.deviceName}-{plc.address}-{data}", "输送线");
if (LineState.Keys.Contains(plc.TN_Location[0]))
{
LineState[plc.TN_Location[0]].status = data;
LineState[plc.TN_Location[0]].modify = DateTime.Now;
}
else
{
LineState.Add(plc.TN_Location[0], new statemodel { status = data, modify = DateTime.Now });
}
//状态1 满托下线或空托上线,具体任务类型需要根据TCP消息位数判断 11-满托下线 21-空托上线
//满托下线:需要根据物料,品相,批次入库 空托上线:空托是否单独存在空托库区,待确定
//不同产线下线库区不同,部分产线下线库区相同,但有先后顺序
//下线库区先后顺序:入库区域顺序:3-6-2-5-4-1
//B1~B6 双托下线--可能存在尾托为单托的情况--尾托(单托)人工PDA下发(入零头库)----满托下线
//B1~B5 单托上线 B6 双托上线------------------------------------------------空托上线
if (data.Length == 4)
{
if (data.Substring(0, 4) == "1220")
{
//满托下线
ConveryInfoFull(plc, plc.TN_Location[0]);
}
if (data.Substring(0, 4) == "1021")
{
//空托上线
ConveryInfoEmpty(plc, plc.TN_Location[0]);
}
}
}
///
/// 输送线空托上线
///
///
///
private static void ConveryInfoEmpty(Settings.deviceInfo plc, string location)
{
//try
//{
// if (location != "")
// {
// if (LocationHelper.CheckLocFree(location))
// {
// var db = new SqlHelper