public PLCTest() { plcUtils = PLCSerialPortUtils.GetInstance(this); plcUtils.Open(); }
public void Start() { IsStart = true; Task.Run(() => { while (IsStart) { lock (hasReadHelper) { if (HasRead == false) { continue; } } if (priority2Queue.IsEmpty == false) { if (currentQueue == CurrentQueue.None || currentQueue == CurrentQueue.CCD2Queue) { CCDSendData prevCommand; // 尝试取出一个 if (priority2Queue.TryPeek(out prevCommand)) { currentQueue = CurrentQueue.CCD2Queue; // 判断是否已经发送 if (prevCommand.IsSending == true) { if (prevCommand.HasSend == false) { // 出队 while (priority2Queue.TryDequeue(out prevCommand) == false) { } TimeWatcher.SendedCCD2Time = DateTime.Now; myEventLog.LogInfo($"收到CCD2返回信号"); myEventLog.LogInfo($"开始发送指令信号到收到返回信号时间间隔:" + (TimeWatcher.SendedCCD2Time - TimeWatcher.SendCCD2Time).TotalMilliseconds); // 已经发送:调用回调函数 prevCommand.OnSend(); prevCommand.HasSend = true; currentQueue = CurrentQueue.None; continue; } } else { lock (hasReadHelper) { HasRead = false; } prevCommand.IsSending = true; TimeWatcher.SendCCD2Time = DateTime.Now; myEventLog.LogInfo($"发送CCD2指令"); myEventLog.LogInfo($"收到信号到开始发送指令信号时间间隔:" + (TimeWatcher.SendCCD2Time - TimeWatcher.Receive84Time).TotalMilliseconds); myEventLog.LogInfo($"识别出有效信号到开始发送指令信号时间间隔:" + (TimeWatcher.SendCCD2Time - TimeWatcher.ReceiveEffect84Time).TotalMilliseconds); myEventLog.LogInfo($"正在发送CCD2成功或失败:{prevCommand.Command}"); PLCSerialPortUtils.GetInstance(serialPortInterface).SendData(prevCommand.Command); continue; } } } } if (priority1Queue.IsEmpty == false) { if (currentQueue == CurrentQueue.None || currentQueue == CurrentQueue.CCD1Queue) { CCDSendData prevCommand; // 尝试取出一个 if (priority1Queue.TryPeek(out prevCommand)) { currentQueue = CurrentQueue.CCD1Queue; // 判断是否已经发送 if (prevCommand.IsSending == true) { if (prevCommand.HasSend == false) { // 出队 while (priority1Queue.TryDequeue(out prevCommand) == false) { } // 已经发送:调用回调函数 prevCommand.OnSend(); prevCommand.HasSend = true; currentQueue = CurrentQueue.None; continue; } } else { lock (hasReadHelper) { HasRead = false; } prevCommand.IsSending = true; myEventLog.LogInfo($"正在发送CCD1成功或失败:{prevCommand.Command}"); PLCSerialPortUtils.GetInstance(serialPortInterface).SendData(prevCommand.Command); continue; } } } } if (queue.IsEmpty) { continue; } string command = ""; if (currentQueue == CurrentQueue.None || currentQueue == CurrentQueue.OtherQueue) { if (queue.TryDequeue(out command)) { lock (hasReadHelper) { HasRead = false; } if (command.Contains("WDD0090100901")) { myEventLog.LogInfo($"正在发送CCD1成功或失败:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:CCD结果:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } else if (command.Contains("WDD0090000900")) { myEventLog.LogInfo($"正在发送CCD2成功或失败:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:CCD结果:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } else if (command.Contains("00201")) { myEventLog.LogInfo($"正在发送开始打印命令:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:发送:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } else if (command.Contains("00291")) { myEventLog.LogInfo($"正在发送停止打印命令:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:停止:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } else if (command.Contains("R00050")) { myEventLog.LogInfo($"发送启动传送带命令:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:停止:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } if (command.Contains("R00051")) { myEventLog.LogInfo($"发送停止传送带命令:{command}"); //myEventLog.LogInfo($"发送信号时间间隔:停止:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } else { //myEventLog.LogInfo($"发送信号时间间隔:读取:{(DateTime.Now - prevSendTime).TotalMilliseconds}"); } //prevSendTime = DateTime.Now; PLCSerialPortUtils.GetInstance(serialPortInterface).SendData(command); //Thread.Sleep(30); } } } }); }
/// <summary> /// /// </summary> /// <param name="serialPortInterface">PLC</param> /// <param name="frequent">发送监听时间间隔(单位毫秒)</param> /// <param name="data">发送内容</param> public PLCReader(PLCSerialPortInterface serialPortInterface, int frequent, string data) { plcUtils = PLCSerialPortUtils.GetInstance(serialPortInterface); Frequent = frequent; this.data = data; }