238 lines
8.8 KiB
C#
238 lines
8.8 KiB
C#
using Global;
|
|
using MesServerFunctions;
|
|
using ModelBasic;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
|
|
namespace DTTest
|
|
{
|
|
public partial class E { }
|
|
public class DeviceSignalSimGanttBase : ModelManagement
|
|
{
|
|
static string MqttTargetTopicPLC = System.Configuration.ConfigurationManager.AppSettings["MqttTargetTopicPLC"];
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public static int playIndex;
|
|
/// <summary>
|
|
/// 循环播放
|
|
/// 2021.3.31
|
|
/// </summary>
|
|
public static bool LoopPlay = false;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
private Thread t_PlayCurrDeviceSignalSimTask = null;
|
|
/// <summary>
|
|
/// 播放当前的信号仿真的任务
|
|
/// 2020.12.10
|
|
/// </summary>
|
|
public void PlayCurrDeviceSignalSimTask(string deviceSignalSimCode)
|
|
{
|
|
if (t_PlayCurrDeviceSignalSimTask == null)
|
|
{
|
|
t_PlayCurrDeviceSignalSimTask = new Thread(new ParameterizedThreadStart(PlayDeviceSignalSim));
|
|
t_PlayCurrDeviceSignalSimTask.IsBackground = true;
|
|
t_PlayCurrDeviceSignalSimTask.Name = deviceSignalSimCode.ToString();
|
|
t_PlayCurrDeviceSignalSimTask.Start(deviceSignalSimCode);
|
|
}
|
|
else
|
|
{
|
|
// // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("当前存在播放的信号仿真!");
|
|
}
|
|
|
|
}
|
|
|
|
static public bool IsCanPlay(string deviceSignalSimCode)
|
|
{
|
|
var dt_DeviceSignalSim = SqlOperation.SqlDeviceSignalSim.Select_DeviceSignalSim(deviceSignalSimCode);
|
|
if (dt_DeviceSignalSim.Rows.Count < 1)
|
|
{
|
|
// // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("当前不存在播放的信号仿真!");
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
private void PlayDeviceSignalSim(object obj)
|
|
{
|
|
var deviceSignalSimCode = (string)obj;
|
|
var dt_DeviceSignalSim = SqlOperation.SqlDeviceSignalSim.Select_DeviceSignalSim(deviceSignalSimCode);
|
|
if (dt_DeviceSignalSim.Rows.Count < 1)
|
|
{
|
|
// // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("当前不存在播放的信号仿真!");
|
|
return;
|
|
}
|
|
var dt_DeviceSignalSim_Count = dt_DeviceSignalSim.Rows.Count;
|
|
var list_TagStartTime_TagID_TagValue = new List<OperationResultMesDtSim<Int32, String, String,Int32,string,string>>();
|
|
var timeList = new List<int>();
|
|
|
|
for (int i = 0; i < dt_DeviceSignalSim_Count; i++)
|
|
{
|
|
var startTime = Convert.ToInt32(dt_DeviceSignalSim.Rows[i]["StartTime"]);
|
|
var tagStartTime = startTime / 100;
|
|
var keepTime = Convert.ToInt32(dt_DeviceSignalSim.Rows[i]["KeepTime"]);
|
|
var tagID = dt_DeviceSignalSim.Rows[i]["TagID"].ToString();
|
|
var tagValue = dt_DeviceSignalSim.Rows[i]["TagValue"].ToString();
|
|
var opName = dt_DeviceSignalSim.Rows[i]["OpName"].ToString();
|
|
var tagIDCopyFrom = dt_DeviceSignalSim.Rows[i]["TagIDCopyFrom"].ToString();
|
|
|
|
int tagFrom = 1;
|
|
if(dt_DeviceSignalSim.Rows[i]["TagFrom"]!=DBNull.Value)
|
|
{
|
|
tagFrom = Convert.ToInt32(dt_DeviceSignalSim.Rows[i]["TagFrom"]);
|
|
|
|
}
|
|
list_TagStartTime_TagID_TagValue.Add(new OperationResultMesDtSim<Int32, String, String, Int32, String, String>()
|
|
{ PlayIDList = tagStartTime, PlayName = tagID, ModelName = tagValue, TagFrom = tagFrom, OpName = opName, TagIDCopyFrom = tagIDCopyFrom });
|
|
|
|
timeList.Add(startTime + keepTime);
|
|
}
|
|
var maxTime = timeList.Max();
|
|
var maxFrame = maxTime / 100;
|
|
|
|
var dc_TagStartTime_TagIDAndTagValue = list_TagStartTime_TagID_TagValue.GroupBy(m => m.PlayIDList)
|
|
.ToDictionary(k => k.First().PlayIDList, v => v.ToList());
|
|
|
|
do{
|
|
do{
|
|
if (dc_TagStartTime_TagIDAndTagValue.ContainsKey(playIndex))
|
|
foreach (var item in dc_TagStartTime_TagIDAndTagValue[playIndex])
|
|
{
|
|
var tagID = item.PlayName;
|
|
var tagValue = item.ModelName;
|
|
var opName = item.OpName;
|
|
var tagIDCopyFrom = item.TagIDCopyFrom;
|
|
switch (item.TagFrom)
|
|
{
|
|
case 1:
|
|
DtWebApiDT.PLC.WritePLC(tagID, tagValue);
|
|
break;
|
|
case 2:
|
|
DtWebApi.ReadWritePLC.WritePLC(tagID, tagValue);
|
|
break;
|
|
case 3://扫描条码
|
|
string Message;
|
|
|
|
|
|
Message = "BarCode|Bar|" + opName + "|" + tagValue;
|
|
|
|
SendMessage.SendMessageBARToMES(opName,Message);
|
|
//asyncSendMessage(Message);
|
|
//DtWebApi.ReadWritePLC.WritePLC(tagID, tagValue);
|
|
break;
|
|
case 4://拷贝变量值
|
|
tagValue = DtWebApi.ReadWritePLC.ReadPLC(tagIDCopyFrom).ToString();
|
|
DtWebApi.ReadWritePLC.WritePLC(tagID, tagValue);
|
|
break;
|
|
case 5://MQTT
|
|
|
|
Message = "MesToWeb|Web|" + opName + "|" + tagValue;
|
|
SendMessage.SendMessageMESToWEB(opName, Message);
|
|
//asyncSendMessage(Message);
|
|
|
|
break;
|
|
}
|
|
|
|
//if (GlobalVar.signalWriteTask != null)
|
|
//{
|
|
// GlobalVar.signalWriteTask.BeginInvoke(Cmd_Frame.SignalWrite, tagID, tagValue, "-1", new AsyncCallback(SignalWriteTask_0), GlobalVar.signalWriteTask);
|
|
//}
|
|
}
|
|
|
|
ModelControl_CurrRunInfoEventPs(playIndex);
|
|
playIndex++;
|
|
Thread.Sleep(100);
|
|
} while (playIndex <= maxFrame) ;
|
|
|
|
playIndex = 0;
|
|
|
|
} while(LoopPlay);
|
|
|
|
t_PlayCurrDeviceSignalSimTask = null;
|
|
PlayDeviceSignalSimTaskEnd(deviceSignalSimCode);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void End_DeviceSignalSim_ExecTask(string deviceSignalSimCode)
|
|
{
|
|
if (t_PlayCurrDeviceSignalSimTask != null)
|
|
{
|
|
var ts = Get_DeviceSignalSim_ExecTask_State();
|
|
if (ts == (ThreadState.Background | ThreadState.Suspended))
|
|
{
|
|
t_PlayCurrDeviceSignalSimTask.Resume();
|
|
}
|
|
t_PlayCurrDeviceSignalSimTask.Abort();
|
|
}
|
|
|
|
playIndex = 0;
|
|
t_PlayCurrDeviceSignalSimTask = null ;
|
|
PlayDeviceSignalSimTaskEnd(deviceSignalSimCode);
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="craftCode"></param>
|
|
public void Suspend_DeviceSignalSim_ExecTask()
|
|
{
|
|
t_PlayCurrDeviceSignalSimTask.Suspend();
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="craftCode"></param>
|
|
public void Resume_DeviceSignalSim_ExecTask()
|
|
{
|
|
t_PlayCurrDeviceSignalSimTask.Resume();
|
|
}
|
|
|
|
public ThreadState Get_DeviceSignalSim_ExecTask_State()
|
|
{
|
|
ThreadState threadState = ThreadState.Stopped;
|
|
if (t_PlayCurrDeviceSignalSimTask != null)
|
|
{
|
|
threadState = t_PlayCurrDeviceSignalSimTask.ThreadState;
|
|
}
|
|
return threadState;
|
|
}
|
|
|
|
public MesWorkMqtt.Mqtt2 mqtt2;
|
|
public void InitMqtt2(string url, string topic)
|
|
{
|
|
mqtt2 = new MesWorkMqtt.Mqtt2();
|
|
mqtt2.MqttUrl = url;
|
|
mqtt2.topic = topic;
|
|
StartAsync();
|
|
|
|
}
|
|
private async void StartAsync()
|
|
{
|
|
await mqtt2.StartAsync();
|
|
}
|
|
|
|
|
|
public async void asyncSendMessage(string Message)
|
|
{
|
|
|
|
|
|
await mqtt2.Publish(MqttTargetTopicPLC, Message);
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
}
|