chore: initial commit

This commit is contained in:
XingCheng3
2026-05-29 09:34:04 +08:00
commit 78ae9dcd2e
683 changed files with 68110 additions and 0 deletions

View File

@@ -0,0 +1,328 @@
using MesServerWork;
using MisDataFunDll;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Xml.Linq;
namespace MesServerFunctions
{
public partial class FunctionMES
{
object lockFunWork;
//public void FunWork(DeviceDriver_BasicData.CustomeEvetnArgs e)
public void FunWork(string recData)
{
lockFunWork = new object();
lock (lockFunWork)
{
List<string> dataArray = MisDataFun.GetCmdStringList(recData);
//string[] dataArray = recData.Split('|');
//if (dataArray.Count != 4)
//return;
//消息来源
string m_Source = dataArray[0].ToString();
//消息类型 Barcode
string m_Command = dataArray[1].ToString();
//工位号
string m_OpName = dataArray[2].ToString();
//消息参数
string m_Value = dataArray[3].ToString();
DeviceDriver_BasicData.CustomeEvetnArgs e = new DeviceDriver_BasicData.CustomeEvetnArgs();// = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceDriver_BasicData.CustomeEvetnArgs>(m_Value);
string tagValue;
string OpName = m_OpName;
switch (m_Source)
{
case "PLC":
e = Newtonsoft.Json.JsonConvert.DeserializeObject<DeviceDriver_BasicData.CustomeEvetnArgs>(m_Value);
switch (e.TagValue.ToString().ToLower())
{
case "false":
tagValue = "0";
break;
case "true":
tagValue = "1";
break;
default:
tagValue = e.TagValue.ToString();
break;
}
e.TagValue = tagValue;
switch (e.TagTypeCodeID.ToString())
{
// AGV相关变量类型代码处理说明
// 301AGV请求进入
// 302AGV器具放置完毕
// 303AGV退出光栅
// 304送料信息验证完成
// 305送料信息验证结果
// 305任务发送状态 0 没有 1 发送 2 失败
// 311请求叫料
// 312请求退空
// 313请求退料
// 314允许AGV进入
// 315允许AGV离开
// 316器具码扫描完毕
// 317退回并重新配送
// 318器具号
// 319请求上料机型
// 320收到状态反馈点
// 321转序
// 322下空托盘
// 323上空托盘
// 324点对点
// 500AGV请求下降
// 501AGV请求举升
// 550允许AGV下降
// 551允许AGV举升
// 请求叫料
case "311":
fun_CallMaterials(e);
break;
// 请求退空
case "312":
fun_RequestReturns(e);
break;
// 请求退料
case "313":
fun_RequestReturnMaterial(e);
break;
// 允许AGV进入
case "314":
fun_AllowAGVEnter(e);
break;
// 允许AGV离开
case "315":
fun_AllowAGVLeave(e);
break;
// 器具码扫描完毕
case "316":
fun_ToolCodeScanOver(e);
break;
// 退回并重新配送
case "317":
fun_ReturnAndRedispatch(e);
break;
// 收到任务状态握手
case "320":
//MIS_BASE.WritePLC(306, m_OpName, 0);
break;
// 转序
case "321":
fun_TransferSequence(e);
break;
// 下空托盘
case "322":
fun_UnloadEmptyTray(e);
break;
// 上空托盘
case "323":
fun_LoadEmptyTray(e);
break;
// 允许AGV下降
case "550":
fun_AllowAGVLower(e);
break;
// 允许AGV举升
case "551":
fun_AllowAGVRaise(e);
break;
// AGV插头完成
case "400":
break;
// AGV拔插头完成
case "401":
break;
// MES允许开始磨合
case "402":
break;
// MES反馈磨合结束
case "403":
break;
// 托盘压紧气缸压紧
case "404":
if (tagValue == "1") MIS_BASE.WritePLC(405, OpName, false);
break;
// 托盘压紧气缸松开
case "405":
if (tagValue == "1") MIS_BASE.WritePLC(404, OpName, false);
break;
// 插头推靠气缸推靠
case "406":
if (tagValue == "1") MIS_BASE.WritePLC(407, OpName, false);
break;
// 插头推靠气缸退回
case "407":
if (tagValue == "1") MIS_BASE.WritePLC(406, OpName, false);
break;
// 自动模式
case "408":
if (tagValue == "1") MIS_BASE.WritePLC(409, OpName, false); // 自动掉手动模式
break;
// 手动模式
case "409":
if (tagValue == "1") MIS_BASE.WritePLC(408, OpName, false); // 自动掉自动模式
break;
// 请求上线
case "450":
MisDataFun.Rrunning_UpdateOpCallStatus(OpName, Convert.ToInt32(tagValue)); // 更新至数据库库位状态
break;
// 请求下线
case "451":
break;
// 请求插插头
case "452":
// 需要调用AGV插插头接口 去插
break;
// 请求拔插头
case "453":
break;
// 开始磨合
case "454":
break;
// 磨合完成
case "455":
break;
// 推靠气缸原位
case "456":
break;
// 推靠气缸到位
case "457":
break;
// 压紧气缸原位
case "458":
break;
// 压紧气缸到位
case "459":
break;
}
break;
}
}
}
// 叫料流程
// 1.请求叫料 收到请求叫料后 调用叫料接口 后续收到AGV的
// 2.收到工厂 请求进入接口(工厂未开发 跳过) 发给PLC AGV请求进入
// 3.收到允许AGV进入 调用接口(未开发 跳过) 允许进入
// 4.收到 器具码扫码完成 根据318器具号 调用器具号查询接口 得出校验结果
// 5.若器具码校验通过 调用 确认物料配送接口 调用成功后 给PLC发送 送料信息验证结果1 合格 2 不合格) 和 送料信息验证完成
// 6.收到AGV请求离开接口后未开发 跳过) 发送给PLC请求离开点位
// 7.收到PLC允许离开信号后 调用AGV允许离开接口未开发 跳过)
// 退空托流程
// 1.收到请求退空 调用退空托接口
// 2.如叫料AGV请求进入 请求离开。。。。 只不过不需要扫描器具码部分
// AGV相关方法声明PLC触发的信号
/// <summary>
/// 请求叫料
/// </summary>
public void fun_CallMaterials(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(CallMaterials, e);
}
/// <summary>
/// 请求退空
/// </summary>
public void fun_RequestReturns(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(RequestReturns, e);
}
/// <summary>
/// 请求退料
/// </summary>
public void fun_RequestReturnMaterial(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(RequestReturnMaterial, e);
}
/// <summary>
/// 允许AGV进入
/// </summary>
public void fun_AllowAGVEnter(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(AllowAGVEnter, e);
}
/// <summary>
/// 允许AGV离开
/// </summary>
public void fun_AllowAGVLeave(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(AllowAGVLeave, e);
}
/// <summary>
/// 允许AGV下降
/// </summary>
public void fun_AllowAGVLower(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(AllowAGVLower, e);
}
/// <summary>
/// 允许AGV举升
/// </summary>
public void fun_AllowAGVRaise(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(AllowAGVRaise, e);
}
/// <summary>
/// 器具码扫描完毕
/// </summary>
public void fun_ToolCodeScanOver(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(ToolCodeScanOver, e);
}
/// <summary>
/// 退回并重新配送
/// </summary>
public void fun_ReturnAndRedispatch(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(ReturnAndRedispatch, e);
}
/// <summary>
/// 转序
/// </summary>
public void fun_TransferSequence(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(TransferSequence, e);
}
/// <summary>
/// 下空托盘
/// </summary>
public void fun_UnloadEmptyTray(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(UnloadEmptyTray, e);
}
/// <summary>
/// 上空托盘
/// </summary>
public void fun_LoadEmptyTray(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(LoadEmptyTray, e);
}
/// <summary>
/// 点对点
/// </summary>
public void fun_PointToPoint(DeviceDriver_BasicData.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(PointToPoint, e);
}
}
}