sc 1 month ago
parent
commit
0c24c679ce
  1. 80
      ViewModel/MainWindowViewModel.cs

80
ViewModel/MainWindowViewModel.cs

@ -9,7 +9,9 @@ using Microsoft.Win32;
using Newtonsoft.Json.Linq;
using NModbus;
using NModbus.Serial;
using OpenHardwareMonitor.Hardware;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
@ -35,7 +37,6 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using TouchSocket.Sockets;
using OpenHardwareMonitor.Hardware;
namespace DyeingComputer.ViewModel
{
@ -3392,35 +3393,50 @@ namespace DyeingComputer.ViewModel
{
await Task.Run(() =>
{
try
while (true)
{
if (protocols_ == "MODBUS_RTU")
try
{
DO = master.ReadCoils(slaveId, 0, DO_L); //读取线圈
RW = master.ReadHoldingRegisters(slaveId, 0, RW_L); //读取寄存器
master.WriteMultipleCoils(slaveId, 0, DQ); //写入线圈
master.WriteMultipleRegisters(slaveId, 0, DW); //写入寄存器
}//MODBUSRTU
else
if (protocols_ == "MODBUS_RTU")
{
while (_logQueue.Count>0)
{
QueueS d=_logQueue.Dequeue();
master.WriteSingleCoil(slaveId,Convert.ToUInt16(d.ID),d.D_DAT);
}
DO = master.ReadCoils(slaveId, 0, DO_L); //读取线圈
RW = master.ReadHoldingRegisters(slaveId, 0, RW_L); //读取寄存器
DQ = master.ReadCoils(slaveId, 0, DQ_L);
//master.WriteMultipleCoils(slaveId, 0, DQ); //写入线圈
master.WriteMultipleRegisters(slaveId, 0, DW); //写入寄存器
}//MODBUSRTU
else
{
while (_logQueue.Count > 0)
{
QueueS d = _logQueue.Dequeue();
master.WriteSingleCoil(slaveId, Convert.ToUInt16(d.ID+02000), d.D_DAT);
}
DO = master.ReadCoils(slaveId, 02255, DO_L); //读取线圈
RW = master.ReadHoldingRegisters(slaveId, 06000, RW_L); //读取寄存器
DQ = master.ReadCoils(slaveId, 02000, DQ_L);
// master.WriteMultipleCoils(slaveId, 02000, DQ); //写入线圈
master.WriteMultipleRegisters(slaveId, 07000, DW); //写入寄存器
}//SCMODBUSRTU
LINK_OK = true;
ERRinf.ERRinf_d(errTabler, "ERR001");
LINK_RUN++;
}
catch (Exception ex)
{
DO = master.ReadCoils(slaveId, 02255, DO_L); //读取线圈
RW = master.ReadHoldingRegisters(slaveId, 06000, RW_L); //读取寄存器
master.WriteMultipleCoils(slaveId, 02000, DQ); //写入线圈
master.WriteMultipleRegisters(slaveId, 07000, DW); //写入寄存器
}//SCMODBUSRTU
LINK_OK = true;
ERRinf.ERRinf_d(errTabler, "ERR001");
LINK_RUN++;
}
catch (Exception ex)
{
LINK_OK = false;
LINK_ERR++;
ERRinf.ERRinf_w(errTabler, "PLC" + Properties.Resources.Connectionlost + "(" + ex.Message + ")", "ERR001");
}
finally
{
Port_link();
LINK_OK = false;
LINK_ERR++;
ERRinf.ERRinf_w(errTabler, "PLC" + Properties.Resources.Connectionlost + "(" + ex.Message + ")", "ERR001");
}
finally
{
// Port_link();
}
}
});
}
@ -3702,6 +3718,10 @@ namespace DyeingComputer.ViewModel
, e.Row.Field<string>("ID")
, e.Row.Field<string>("PLC"));
}
if (MD < 4000 && MD > 3000)
{
_logQueue.Enqueue(new QueueS {ID = MD - 3001 ,D_DAT= e.Row.Field<bool>("DIO") });
}
}
catch (Exception) { }
}
@ -3981,6 +4001,11 @@ namespace DyeingComputer.ViewModel
public string PLC { get; set; }
public string type { get; set; }
}
public class QueueS
{
public int ID { get; set; }
public bool D_DAT { get; set; }
}
public class TechnologicalProcess
{
public int RUN { get; set; }
@ -4009,6 +4034,7 @@ namespace DyeingComputer.ViewModel
public string DYELOT { get; set; }
public string Remark { get; set; }
}
public static Queue<QueueS> _logQueue = new Queue<QueueS>();
public ObservableCollection<T> ToObservableCollection<T>(DataTable dt) where T : class, new()
{
Type t = typeof(T);

Loading…
Cancel
Save