using HslCommunication;
|
using HslCommunication.Profinet.Siemens;
|
using IWareCommon.Help;
|
using SiemenDevice.CacheInfo;
|
using SiemenDevice.Model;
|
using SiemenDevice.Properties;
|
using SiemenDevice.WCF;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Diagnostics;
|
using System.Linq;
|
using System.ServiceModel;
|
using System.ServiceProcess;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace SiemenDevice
|
{
|
partial class Service : ServiceBase
|
{
|
|
Thread tskGetConveyorInfo1;//获取立库输送线的任务完成等信息的线程
|
Thread tskGetSrmInfo1;//获取立库Srm1的任务完成等信息的线程
|
Thread tskGetSrmInfo2;//获取立库Srm2的任务完成等信息的线程
|
Thread tskGetRgvInfo1;//获取立库Srm1的任务完成等信息的线程
|
Thread tskGetRgvInfo2;//获取立库Srm2的任务完成等信息的线程
|
Thread tskGetCDInfo;//获取立库Srm2的任务完成等信息的线程
|
public ServiceHost ControlCenterWcfHost = null;
|
//创建连接对象
|
List<string> lst1Db = new List<string>();
|
List<string> lst2Db = new List<string>();
|
public Service()
|
{
|
InitializeComponent();
|
}
|
|
protected override void OnStart(string[] args)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "西门子设备信息获取服务开始启动!");
|
|
lst1Db.Add("Line1030");
|
lst1Db.Add("Line1031");
|
lst1Db.Add("Line1032");
|
lst1Db.Add("Line1033");
|
|
lst1Db.Add("Line1013");
|
lst1Db.Add("Line1014");
|
lst1Db.Add("Line1015");
|
lst1Db.Add("Line1016");
|
|
lst1Db.Add("Line1021");
|
lst1Db.Add("Line1022");
|
lst1Db.Add("Line1023");
|
lst1Db.Add("Line1024");
|
|
lst1Db.Add("Line1026");
|
lst1Db.Add("Line1027");
|
lst1Db.Add("Line1028");
|
lst1Db.Add("Line1029");
|
|
lst1Db.Add("Line1001");
|
|
lst1Db.Add("Line1002");
|
lst1Db.Add("Line1003");
|
lst1Db.Add("Line1006");
|
|
lst1Db.Add("Line1007");
|
lst1Db.Add("Line1008");
|
lst1Db.Add("Line1012");
|
|
lst2Db.Add("ChaiDei3");
|
lst2Db.Add("ChaiDei4");
|
lst2Db.Add("ChaiDei2");
|
lst2Db.Add("ChaiDei1");
|
|
ControlCenterWcfHost = new ServiceHost(typeof(DevInfoService));
|
ControlCenterWcfHost.Open();
|
|
tskGetConveyorInfo1 = new Thread(GetConveyorInfo1);
|
tskGetConveyorInfo1.Name = "获取输送线信息线程";
|
StartThread(tskGetConveyorInfo1);
|
|
tskGetSrmInfo1 = new Thread(GetSrmInfo1);
|
tskGetSrmInfo1.Name = "获取堆垛机1信息线程";
|
StartThread(tskGetSrmInfo1);
|
|
tskGetSrmInfo2 = new Thread(GetSrmInfo2);
|
tskGetSrmInfo2.Name = "获取堆垛机2信息线程";
|
StartThread(tskGetSrmInfo2);
|
|
tskGetRgvInfo1 = new Thread(GetRgvInfo1);
|
tskGetRgvInfo1.Name = "获取RGV1信息线程";
|
StartThread(tskGetRgvInfo1);
|
|
tskGetRgvInfo2 = new Thread(GetRgvInfo2);
|
tskGetRgvInfo2.Name = "获取RGV2信息线程";
|
StartThread(tskGetRgvInfo2);
|
|
tskGetCDInfo = new Thread(GetCDInfo);
|
tskGetCDInfo.Name = "获取拆叠机信息线程";
|
StartThread(tskGetCDInfo);
|
|
}
|
|
|
|
protected override void OnStop()
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "西门子设备信息获取服务开始关闭!");
|
|
CloseWcf(ControlCenterWcfHost);
|
|
CloseThread(tskGetConveyorInfo1);
|
CloseThread(tskGetSrmInfo1);
|
CloseThread(tskGetSrmInfo2);
|
CloseThread(tskGetRgvInfo1);
|
CloseThread(tskGetRgvInfo2);
|
CloseThread(tskGetCDInfo);
|
}
|
|
private void GetConveyorInfo1(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
|
//创建连接对象
|
|
SiemensS7Net S7 = new SiemensS7Net(SiemensPLCS.S1500);
|
|
S7.IpAddress = "192.168.0.20";
|
OperateResult operateResult = S7.ConnectServer();
|
// Plc S7 = new Plc(t, "192.168.0.20", 0, 1);
|
int cHandShake = 0;
|
int cerrocontain = 0;
|
List<COpcReadItem> opclst = new List<COpcReadItem>();
|
lst1Db.ForEach(x =>
|
{
|
opclst.Add(new COpcReadItem(x));
|
});
|
while (true)
|
{
|
try
|
{
|
if (!operateResult.IsSuccess || cerrocontain > 10)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "1数据读取通道重启");
|
S7.ConnectClose();
|
Thread.Sleep(500);
|
operateResult=S7.ConnectServer();
|
cerrocontain = 0;
|
}
|
|
int RHandShake = S7.ReadInt16("DB600.0").Content;
|
if (cHandShake != RHandShake)
|
{
|
cHandShake = RHandShake;
|
cerrocontain = 0;
|
}
|
else
|
{
|
cerrocontain = +1;
|
}
|
opclst.ForEach(x =>
|
{
|
int Mode = S7.ReadInt16(x.Mode).Content;
|
int TaskNo = S7.ReadInt32(x.TaskNo).Content;
|
int State = S7.ReadInt16(x.State).Content;
|
int Ph1 = S7.ReadInt16(x.Ph1).Content;
|
int Ph2 = S7.ReadInt16(x.Ph2).Content;
|
int Shape = 0;
|
if (!string.IsNullOrEmpty(x.Shape))
|
{
|
Shape = S7.ReadInt16(x.Shape).Content;
|
}
|
int Taskid = S7.ReadInt32(x.TaskNo).Content;
|
bool Ack = S7.ReadBool(x.Ack).Content;
|
bool Stb = S7.ReadBool(x.STP).Content;
|
int AlarmCode = S7.ReadInt16(x.AlarmCode).Content;
|
bool Alarm = S7.ReadBool(x.Alarm).Content;
|
int Ph3 = 2;
|
if (!string.IsNullOrEmpty(x.Ph3))
|
{
|
Ph3 = S7.ReadInt16(x.Ph3).Content;
|
}
|
int Height = 0;
|
if (!string.IsNullOrEmpty(x.Height))
|
{
|
Height = S7.ReadInt16(x.Height).Content;
|
}
|
var s = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == x.ConveyorName);
|
if (true)
|
{
|
|
s.RMode = Mode;
|
s.RAlarm = Alarm;
|
s.RTaskNo = TaskNo;
|
s.RState = State;
|
s.RAlarmCode = AlarmCode;
|
s.RAck = Ack;
|
s.RPh1 = Ph1;
|
s.RPh2 = Ph2;
|
s.RPh3 = Ph3;
|
s.RShape = Shape;
|
s.WTaskNo = TaskNo;
|
s.WSTP = Stb;
|
s.Height = Height;
|
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "输送线数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(250);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "输送线数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
private void GetSrmInfo1(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
SiemensS7Net SSrm1 = new SiemensS7Net(SiemensPLCS.S1500);
|
|
SSrm1.IpAddress = "192.168.0.200";
|
OperateResult sm1Result = SSrm1.ConnectServer();
|
int s1HandShake = 0;
|
int s1errocontain = 0;
|
//创建连接对象
|
// Plc SSrm1 = new Plc(t, "192.168.0.200", 0, 1);
|
SOpcReadItem s = new SOpcReadItem();
|
|
while (true)
|
{
|
try
|
{
|
if (!sm1Result.IsSuccess || s1errocontain > 10)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取通道重启");
|
SSrm1.ConnectClose();
|
Thread.Sleep(500);
|
sm1Result=SSrm1.ConnectServer();
|
s1errocontain = 0;
|
}
|
int RSrmNo = SSrm1.ReadInt16(s.SrmNo).Content;
|
int RMode = SSrm1.ReadInt16(s.Mode).Content;
|
int RAlarm = SSrm1.ReadInt16(s.Alarm).Content;
|
int RLiftFull = SSrm1.ReadInt16(s.LiftFull).Content;
|
int RPosX = SSrm1.ReadInt16(s.PosX).Content;
|
int RPosY = SSrm1.ReadInt16(s.PosY).Content;
|
int RPosZ = SSrm1.ReadInt16(s.PosZ).Content;
|
int RPosXmm = SSrm1.ReadInt32(s.PosXmm).Content;
|
int RPosYmm = SSrm1.ReadInt32(s.PosYmm).Content;
|
int RPosZmm = SSrm1.ReadInt32(s.PosZmm).Content;
|
int RPickFinish = SSrm1.ReadInt16(s.PickFinish).Content;
|
int RDeliveryFinish = SSrm1.ReadInt16(s.DeliveryFinish).Content;
|
int RTaskFinish = SSrm1.ReadInt16(s.TaskFinish).Content;
|
int RTaskNo = SSrm1.ReadInt16(s.TaskNo).Content;
|
int RState = SSrm1.ReadInt16(s.State).Content;
|
int RActualLane = SSrm1.ReadInt16(s.ActualLane).Content;
|
int RAlarmCode = SSrm1.ReadInt16(s.AlarmCode).Content;
|
int RHandShake = SSrm1.ReadInt16(s.HandShake).Content;
|
int RAck = SSrm1.ReadInt16(s.Ack).Content;
|
int WStb = SSrm1.ReadInt16(s.Stb).Content;
|
int WTaskFinishConfirm = SSrm1.ReadInt16(s.TaskFinishConfirm).Content;
|
if (s1HandShake != RHandShake)
|
{
|
s1HandShake = RHandShake;
|
s1errocontain = 0;
|
}
|
else
|
{
|
s1errocontain = +1;
|
}
|
|
int WSourcePosX = SSrm1.ReadInt16(s.SourcePosX).Content;
|
int WSourcePosY = SSrm1.ReadInt16(s.SourcePosY).Content;
|
int WSourcePosZ = SSrm1.ReadInt16(s.SourcePosZ).Content;
|
int WDestinationPosX = SSrm1.ReadInt16(s.DestinationPosX).Content;
|
int WDestinationPosY = SSrm1.ReadInt16(s.DestinationPosY).Content;
|
int WDestinationPosZ = SSrm1.ReadInt16(s.DestinationPosZ).Content;
|
int WCommand = SSrm1.ReadInt16(s.Command).Content;
|
int WEmergencyStop = SSrm1.ReadInt16(s.EmergencyStop).Content;
|
int WCancleAlarm = SSrm1.ReadInt16(s.CancleAlarm).Content;
|
int WPalletType = SSrm1.ReadInt16(s.PalletType).Content;
|
int WHigh = SSrm1.ReadInt16(s.High).Content;
|
|
var srm = CacheEntity.Srms.FirstOrDefault(y => y.SrmName == "Srm1");
|
if (true)
|
{
|
srm.RSrmNo = RSrmNo;
|
srm.RMode = RMode;
|
srm.RAlarm = Convert.ToBoolean(RAlarm);
|
srm.RLiftFull = Convert.ToBoolean(RLiftFull);
|
srm.RPosX = RPosX;
|
srm.RPosY = RPosY;
|
srm.RPosZ = RPosZ;
|
srm.RPosXmm = RPosXmm;
|
srm.RPosYmm = RPosYmm;
|
srm.RPosZmm = RPosZmm;
|
srm.RPickFinish = Convert.ToBoolean(RPickFinish);
|
srm.RDeliveryFinish = Convert.ToBoolean(RDeliveryFinish);
|
srm.RTaskFinish = Convert.ToBoolean(RTaskFinish);
|
srm.RTaskNo = RTaskNo;
|
srm.RState = RState;
|
srm.RActualLane = RActualLane;
|
srm.RAlarmCode = RAlarmCode;
|
srm.RHandShake = RHandShake;
|
srm.RAck = Convert.ToBoolean(RAck);
|
|
srm.WSourcePosX = WSourcePosX;
|
srm.WSourcePosY = WSourcePosY;
|
srm.WSourcePosZ = WSourcePosZ;
|
srm.WDestinationPosX = WDestinationPosX;
|
srm.WDestinationPosY = WDestinationPosY;
|
srm.WDestinationPosZ = WDestinationPosZ;
|
srm.WCommand = WCommand;
|
srm.WEmergencyStop = WEmergencyStop;
|
srm.WStb = Convert.ToBoolean(WStb);
|
srm.WCancleAlarm = Convert.ToBoolean(WCancleAlarm);
|
srm.WTaskFinishConfirm = Convert.ToBoolean(WTaskFinishConfirm);
|
srm.WPalletType = WPalletType;
|
srm.WHigh = WHigh;
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(250);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm1数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
private void GetSrmInfo2(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
SiemensS7Net SSrm2 = new SiemensS7Net(SiemensPLCS.S1500);
|
|
SSrm2.IpAddress = "192.168.0.210";
|
OperateResult sm2Result = SSrm2.ConnectServer();
|
int s2HandShake = 0;
|
int s2errocontain = 0;
|
//创建连接对象
|
// Plc SSrm2 = new Plc(t, "192.168.0.210", 0, 1);
|
SOpcReadItem s = new SOpcReadItem();
|
while (true)
|
{
|
try
|
{
|
if (!sm2Result.IsSuccess || s2errocontain > 10)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取通道重启");
|
SSrm2.ConnectClose();
|
Thread.Sleep(500);
|
sm2Result=SSrm2.ConnectServer();
|
s2errocontain = 0;
|
}
|
int RSrmNo = SSrm2.ReadInt16(s.SrmNo).Content;
|
int RMode = SSrm2.ReadInt16(s.Mode).Content;
|
int RAlarm = SSrm2.ReadInt16(s.Alarm).Content;
|
int RLiftFull = SSrm2.ReadInt16(s.LiftFull).Content;
|
int RPosX = SSrm2.ReadInt16(s.PosX).Content;
|
int RPosY = SSrm2.ReadInt16(s.PosY).Content;
|
int RPosZ = SSrm2.ReadInt16(s.PosZ).Content;
|
int RPosXmm = SSrm2.ReadInt32(s.PosXmm).Content;
|
int RPosYmm = SSrm2.ReadInt32(s.PosYmm).Content;
|
int RPosZmm = SSrm2.ReadInt32(s.PosZmm).Content;
|
int RPickFinish = SSrm2.ReadInt16(s.PickFinish).Content;
|
int RDeliveryFinish = SSrm2.ReadInt16(s.DeliveryFinish).Content;
|
int RTaskFinish = SSrm2.ReadInt16(s.TaskFinish).Content;
|
int RTaskNo = SSrm2.ReadInt16(s.TaskNo).Content;
|
int RState = SSrm2.ReadInt16(s.State).Content;
|
int RActualLane = SSrm2.ReadInt16(s.ActualLane).Content;
|
int RAlarmCode = SSrm2.ReadInt16(s.AlarmCode).Content;
|
int RHandShake = SSrm2.ReadInt16(s.HandShake).Content;
|
int RAck = SSrm2.ReadInt16(s.Ack).Content;
|
int WStb = SSrm2.ReadInt16(s.Stb).Content;
|
int WTaskFinishConfirm = SSrm2.ReadInt16(s.TaskFinishConfirm).Content;
|
if (s2HandShake != RHandShake)
|
{
|
s2HandShake = RHandShake;
|
s2errocontain = 0;
|
}
|
else
|
{
|
s2errocontain = +1;
|
}
|
|
int WSourcePosX = SSrm2.ReadInt16(s.SourcePosX).Content;
|
int WSourcePosY = SSrm2.ReadInt16(s.SourcePosY).Content;
|
int WSourcePosZ = SSrm2.ReadInt16(s.SourcePosZ).Content;
|
int WDestinationPosX = SSrm2.ReadInt16(s.DestinationPosX).Content;
|
int WDestinationPosY = SSrm2.ReadInt16(s.DestinationPosY).Content;
|
int WDestinationPosZ = SSrm2.ReadInt16(s.DestinationPosZ).Content;
|
int WCommand = SSrm2.ReadInt16(s.Command).Content;
|
int WEmergencyStop = SSrm2.ReadInt16(s.EmergencyStop).Content;
|
int WCancleAlarm = SSrm2.ReadInt16(s.CancleAlarm).Content;
|
int WPalletType = SSrm2.ReadInt16(s.PalletType).Content;
|
int WHigh = SSrm2.ReadInt16(s.High).Content;
|
|
var srm = CacheEntity.Srms.FirstOrDefault(y => y.SrmName == "Srm2");
|
if (true)
|
{
|
srm.RSrmNo = RSrmNo;
|
srm.RMode = RMode;
|
srm.RAlarm = Convert.ToBoolean(RAlarm);
|
srm.RLiftFull = Convert.ToBoolean(RLiftFull);
|
srm.RPosX = RPosX;
|
srm.RPosY = RPosY;
|
srm.RPosZ = RPosZ;
|
srm.RPosXmm = RPosXmm;
|
srm.RPosYmm = RPosYmm;
|
srm.RPosZmm = RPosZmm;
|
srm.RPickFinish = Convert.ToBoolean(RPickFinish);
|
srm.RDeliveryFinish = Convert.ToBoolean(RDeliveryFinish);
|
srm.RTaskFinish = Convert.ToBoolean(RTaskFinish);
|
srm.RTaskNo = RTaskNo;
|
srm.RState = RState;
|
srm.RActualLane = RActualLane;
|
srm.RAlarmCode = RAlarmCode;
|
srm.RHandShake = RHandShake;
|
srm.RAck = Convert.ToBoolean(RAck);
|
|
srm.WSourcePosX = WSourcePosX;
|
srm.WSourcePosY = WSourcePosY;
|
srm.WSourcePosZ = WSourcePosZ;
|
srm.WDestinationPosX = WDestinationPosX;
|
srm.WDestinationPosY = WDestinationPosY;
|
srm.WDestinationPosZ = WDestinationPosZ;
|
srm.WCommand = WCommand;
|
srm.WEmergencyStop = WEmergencyStop;
|
srm.WStb = Convert.ToBoolean(WStb);
|
srm.WCancleAlarm = Convert.ToBoolean(WCancleAlarm);
|
srm.WTaskFinishConfirm = Convert.ToBoolean(WTaskFinishConfirm);
|
srm.WPalletType = WPalletType;
|
srm.WHigh = WHigh;
|
}
|
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(250);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Srm2数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
private void GetRgvInfo1(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
SiemensS7Net SRgv1 = new SiemensS7Net(SiemensPLCS.S1500);
|
|
SRgv1.IpAddress = "192.168.0.1";
|
OperateResult rgv1Result = SRgv1.ConnectServer();
|
int r1HandShake = 0;
|
int r1errocontain = 0;
|
//创建连接对象
|
// Plc SRgv1 = new Plc(t, "192.168.0.1", 0, 1);
|
ROpcReadItem s = new ROpcReadItem();
|
while (true)
|
{
|
try
|
{
|
if (!rgv1Result.IsSuccess || r1errocontain > 10)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取通道重启");
|
SRgv1.ConnectClose();
|
Thread.Sleep(500);
|
rgv1Result=SRgv1.ConnectServer();
|
r1errocontain = 0;
|
}
|
int RMode = SRgv1.ReadInt16(s.Mode).Content;
|
bool RAlarm = SRgv1.ReadBool(s.Alarm).Content;
|
bool RLoaded = SRgv1.ReadBool(s.Loaded).Content;
|
int RRgvPosition = SRgv1.ReadInt32(s.RgvPosition).Content;
|
int RSPos = SRgv1.ReadInt32(s.SPos).Content;
|
int RTPos = SRgv1.ReadInt32(s.TPos).Content;
|
bool RTaskFinish = SRgv1.ReadBool(s.TaskFinish).Content;
|
int RTaskNo = SRgv1.ReadInt32(s.TaskNo).Content;
|
int RState = SRgv1.ReadInt16(s.State).Content;
|
int RAlarmCode = SRgv1.ReadInt16(s.AlarmCode).Content;
|
int RHandShake = SRgv1.ReadInt16(s.HandShake).Content;
|
bool RAck = SRgv1.ReadBool(s.Ack).Content;
|
if (r1HandShake != RHandShake)
|
{
|
r1HandShake = RHandShake;
|
r1errocontain = 0;
|
}
|
else
|
{
|
r1errocontain = +1;
|
}
|
|
bool WEStop = SRgv1.ReadBool(s.EStop).Content;
|
int WStartPos = SRgv1.ReadInt16(s.StartPos).Content;
|
int WEndPos = SRgv1.ReadInt16(s.EndPos).Content;
|
bool WAckTaskFinish = SRgv1.ReadBool(s.AckTaskFinish).Content;
|
bool WReset = SRgv1.ReadBool(s.Reset).Content;
|
bool WStb = SRgv1.ReadBool(s.Stb).Content;
|
int WPallType = SRgv1.ReadInt16(s.PallType).Content;
|
|
var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.RgvName == "Rgv1");
|
if (true)
|
{
|
rgv.RMode = RMode;
|
rgv.RAlarm = RAlarm;
|
rgv.RLoaded = RLoaded;
|
rgv.RRgvPosition = RRgvPosition;
|
rgv.RSPos = RSPos;
|
rgv.RTPos = RTPos;
|
rgv.RTaskFinish = RTaskFinish;
|
rgv.RTaskNo = RTaskNo;
|
rgv.RState = RState;
|
rgv.RAlarmCode = RAlarmCode;
|
rgv.RHandShake = RHandShake;
|
rgv.RAck = RAck;
|
|
|
rgv.WEStop = WEStop;
|
rgv.WAckTaskFinish = WAckTaskFinish;
|
rgv.WReset = WReset;
|
rgv.WStb = WStb;
|
rgv.WPallType = WPallType;
|
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(250);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv1数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
private void GetRgvInfo2(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
SiemensS7Net SRgv2 = new SiemensS7Net(SiemensPLCS.S1500);
|
|
SRgv2.IpAddress = "192.168.0.10";
|
OperateResult rgv2Result = SRgv2.ConnectServer();
|
int r2HandShake = 0;
|
int r2errocontain = 0;
|
//创建连接对象
|
// Plc SRgv2 = new Plc(t, "192.168.0.10", 0, 1);
|
ROpcReadItem s = new ROpcReadItem();
|
while (true)
|
{
|
try
|
{
|
if (!rgv2Result.IsSuccess || r2errocontain > 10)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取通道重启");
|
SRgv2.ConnectClose();
|
Thread.Sleep(500);
|
rgv2Result=SRgv2.ConnectServer();
|
r2errocontain = 0;
|
}
|
int RMode = SRgv2.ReadInt16(s.Mode).Content;
|
bool RAlarm = SRgv2.ReadBool(s.Alarm).Content;
|
bool RLoaded = SRgv2.ReadBool(s.Loaded).Content;
|
int RRgvPosition = SRgv2.ReadInt32(s.RgvPosition).Content;
|
int RSPos = SRgv2.ReadInt32(s.SPos).Content;
|
int RTPos = SRgv2.ReadInt32(s.TPos).Content;
|
bool RTaskFinish = SRgv2.ReadBool(s.TaskFinish).Content;
|
int RTaskNo = SRgv2.ReadInt32(s.TaskNo).Content;
|
int RState = SRgv2.ReadInt16(s.State).Content;
|
int RAlarmCode = SRgv2.ReadInt16(s.AlarmCode).Content;
|
int RHandShake = SRgv2.ReadInt16(s.HandShake).Content;
|
bool RAck = SRgv2.ReadBool(s.Ack).Content;
|
if (r2HandShake != RHandShake)
|
{
|
r2HandShake = RHandShake;
|
r2errocontain = 0;
|
}
|
else
|
{
|
r2errocontain = +1;
|
}
|
|
bool WEStop = SRgv2.ReadBool(s.EStop).Content;
|
int WStartPos = SRgv2.ReadInt16(s.StartPos).Content; ;
|
int WEndPos = SRgv2.ReadInt16(s.EndPos).Content; ;
|
bool WAckTaskFinish = SRgv2.ReadBool(s.AckTaskFinish).Content;;
|
bool WReset = SRgv2.ReadBool(s.Reset).Content;;
|
bool WStb = SRgv2.ReadBool(s.Stb).Content;;
|
int WPallType = SRgv2.ReadInt16(s.PallType).Content;
|
|
var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.RgvName == "Rgv2");
|
if (true)
|
{
|
rgv.RMode = RMode;
|
rgv.RAlarm = RAlarm;
|
rgv.RLoaded = RLoaded;
|
rgv.RRgvPosition = RRgvPosition;
|
rgv.RSPos = RSPos;
|
rgv.RTPos = RTPos;
|
rgv.RTaskFinish = RTaskFinish;
|
rgv.RTaskNo = RTaskNo;
|
rgv.RState = RState;
|
rgv.RAlarmCode = RAlarmCode;
|
rgv.RHandShake = RHandShake;
|
rgv.RAck = RAck;
|
|
|
|
rgv.WEStop = WEStop;
|
rgv.WAckTaskFinish = WAckTaskFinish;
|
rgv.WReset = WReset;
|
rgv.WStb = WStb;
|
rgv.WPallType = WPallType;
|
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(250);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "Rgv2数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
|
private void GetCDInfo(object obj)
|
{
|
try
|
{
|
|
// CpuType t = (CpuType)Enum.Parse(typeof(CpuType), "S71200");
|
SiemensS7Net cd = new SiemensS7Net(SiemensPLCS.S1500);
|
|
cd.IpAddress = "192.168.0.20";
|
OperateResult cdResult = cd.ConnectServer();
|
//创建连接对象
|
//Plc cd = new Plc(t, "192.168.0.20", 0, 1);
|
List<CDOpcReadItem> opclst = new List<CDOpcReadItem>();
|
lst2Db.ForEach(x =>
|
{
|
opclst.Add(new CDOpcReadItem(x));
|
});
|
while (true)
|
{
|
try
|
{
|
if (!cdResult.IsSuccess)
|
{
|
LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取通道重启");
|
cd.ConnectClose();
|
Thread.Sleep(500);
|
cdResult=cd.ConnectServer();
|
|
}
|
opclst.ForEach(x =>
|
{
|
int status = cd.ReadInt16(x.EmptyStatus).Content;
|
var s = CacheEntity.ChaiDies.FirstOrDefault(y => y.ChaiDieName == x.ChaiDieName);
|
if (true)
|
{
|
|
s.EmptyStatus = status;
|
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取错误:{0}", ex.Message);
|
}
|
Thread.Sleep(1000);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
LogTextHelper.WriteLine(Resources.LogDir, "拆叠机数据读取连接错误:{0}", ex.Message);
|
}
|
}
|
/// <summary>
|
/// 开启线程
|
/// </summary>
|
private void StartThread(Thread thread)
|
{
|
if (thread != null)
|
{
|
thread.IsBackground = true;
|
thread.Start();
|
}
|
LogTextHelper.WriteLine(Resources.LogDir, "线程{0}已开启", thread.Name);
|
}
|
|
///<summary>
|
///关闭WCF
|
///</summary>
|
///<param name="host">需要关闭的WCF</param>
|
private void CloseWcf(ServiceHost host)
|
{
|
if (host != null)
|
{
|
host.Close();
|
}
|
}
|
|
/// <summary>
|
/// 关闭线程
|
/// </summary>
|
/// <param name="thread">需要关闭的线程</param>
|
private void CloseThread(Thread thread)
|
{
|
if (thread != null)
|
{
|
thread.Abort();
|
}
|
LogTextHelper.WriteLine(Resources.LogDir, "线程{0}已关闭", thread.Name);
|
}
|
}
|
}
|