You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
5.3 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Mesnac.Compressor.Entity;
using Mesnac.Equips;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mesnac.Compressor.Station
{
public class BasePLC
{
public BaseEquip _equip;
public void FindPLC(StationInfo staion)
{
foreach (BaseEquip equip in Factory.Instance.AllEquips.Values)
{
if (equip.Name==staion.PLCName)
{
_equip = equip;
break;
}
}
}
#region PLC操作
public bool WritePLCByByte(StationInfo sta,int start, object[] data)
{
bool result1 = false;
try
{
if (_equip == null)
{
FindPLC(sta);
}
object[] Writedata = new object[data.Length];
result1 = _equip.Write(sta.PLCBlock, start, data);
ICSharpCode.Core.LoggingService.Debug(sta.StationCode + sta.StationName + ":" + sta.PLCBlock + " 偏移量 " + start + "写入结果:" + result1);
return result1;
}
catch (Exception ex)
{
return result1;
}
}
/// <summary>
/// 到位请求结果反馈
/// </summary>
/// <param name="sta"></param>
public void DaoWeiQingQiuHandle(StationInfo sta,int reslut)
{
string message = "";
try
{
if (_equip == null)
{
FindPLC(sta);
}
object[] data = new object[1];
data[0] = reslut;//对照与PLC定义的点位信息
switch (reslut)
{
// OK = 1,//可以工作
// NG = 2,//直接放行
// PreNoWork = 3,//上一工位未工作
// NoMatch = 4,//物料不匹配
// TakeNG = 5//NG物料拿取
case 1:
message = "下发可以工作指令";
break;
case 2:
message = "扫码超时";
break;
case 3:
message = "下发上一工位未工作指令";
break;
case 4:
message = "下发NG物料拿取指令";
break;
case 5:
message = "下发直接放行指令";
break;
case 6:
message = "扫码超时";
break;
default:
break;
}
int address = (int)PLCAddressList.AskWorkResult;
bool result1 = _equip.Write(sta.PLCBlock, address, data);
ICSharpCode.Core.LoggingService.Debug(sta.StationCode + sta.StationName + ":" + message +","+ sta.PLCBlock+" 偏移量 "+ address+"写入结果:"+ result1);
if (reslut == 5)
{
_equip.Write(sta.PLCBlock, (int)2, new object[] { 0 });
ICSharpCode.Core.LoggingService.Debug(sta.StationCode + sta.StationName + "块号" + sta.PLCBlock + "偏移" + (int)2 + ",置位放行请求信号");
}
}
catch (Exception ex)
{
}
}
/// <summary>
/// 换线错误提示
/// </summary>
/// <param name="sta"></param>
public void ChangeError(StationInfo sta)
{
//plc.ChangeError(sta.plcAdress.Writeaddress);
//ICSharpCode.Core.LoggingService.Debug(sta.StationName + "已下发换线扫码成功信号");
}
/// <summary>
/// 数据保存完成,放行
/// </summary>
/// <param name="key"></param>
public void FinishSavePLCWork(StationInfo sta)
{
try
{
if (_equip == null)
{
FindPLC(sta);
}
object[] data = new object[1];
data[0] = 1;//对照与PLC定义的点位信息
_equip.Write(sta.PLCBlock, (int)PLCAddressList.SavaDataResult, data);
ICSharpCode.Core.LoggingService.Debug(sta.StationCode + sta.StationName + "块号"+ sta.PLCBlock+ "偏移"+(int)PLCAddressList.SavaDataResult + ":下发保存数据成功放行信号");
_equip.Write(sta.PLCBlock, (int)2, new object[] { 0 });
ICSharpCode.Core.LoggingService.Debug(sta.StationCode + sta.StationName + "块号" + sta.PLCBlock + "偏移" + (int)2 + ",置位放行请求信号");
//ICSharpCode.Core.LoggingService.Debug(sta.StationName + ":下发保存数据成功放行信号");
}
catch (Exception ex)
{
}
}
#endregion
}
/// <summary>
/// PLC地址块要写入的数据对应地址块的第几位
/// </summary>
enum PLCAddressList
{
AskWorkResult=3,//工作请求地址从0开始
SavaDataResult=4//工作完成地址
}
}