|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
|
|
|
using Mesnac.Compressor.Entity;
|
|
|
|
|
|
namespace PLCManager
|
|
|
{
|
|
|
public class PlcHandler
|
|
|
{
|
|
|
PlcOperation plc;
|
|
|
public EventHandler Savedata;
|
|
|
public PlcHandler()
|
|
|
{
|
|
|
plc = new PlcOperation();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
///// 保存历史数据
|
|
|
///// </summary>
|
|
|
///// <param name="sender"></param>
|
|
|
///// <param name="e"></param>
|
|
|
//private void SavePlcData(object sender, ReadEventArgs e)
|
|
|
//{
|
|
|
// //保存数据
|
|
|
// //获取要取的数据
|
|
|
// if (e.Data.ContainsKey(WorkStation.Instance.DataName))
|
|
|
// {
|
|
|
// var objectarray = (object[])e.Data[WorkStation.Instance.DataName];
|
|
|
// if (Savedata != null)
|
|
|
// Savedata(objectarray,null);
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
//返回数据
|
|
|
public float[] ReadPLCPara(string block, int len)
|
|
|
{
|
|
|
return plc.ReadBlockToFloat(block,len);
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 开始工作
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void startWork(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.startwork,1,false);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 重投放行工作
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void RestartGO(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key, (int)PlcWriteByte.ReStartGo, 1, false);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// NG放行
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void NGRelease(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.NGGO,1,false);
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 工作完成放行信号
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void OKRelease(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.HaveWorked,1,false);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 条码扫描完成
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void HaveScan(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.BarcodeScan,1,false);
|
|
|
}
|
|
|
|
|
|
public void BarcodeToPlc(int key,int num)
|
|
|
{
|
|
|
object[] buff = new object[1];
|
|
|
buff[0] = num;
|
|
|
plc.WriteByWord(key, buff);
|
|
|
}
|
|
|
|
|
|
public void BarcodeToPlc(string key, int num)
|
|
|
{
|
|
|
object[] buff = new object[1];
|
|
|
buff[0] = num;
|
|
|
plc.WriteByWord(key, buff);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 更换机种
|
|
|
/// 机种字段一共占两个字,num代表第几位是1
|
|
|
/// plc中每位1代表一个机种
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
/// <param name="num"></param>
|
|
|
public void ChangeMachine(string key, int num)
|
|
|
{
|
|
|
//object[] buff = new object[2];
|
|
|
//int shift = num - 1;
|
|
|
//if (shift > 15)
|
|
|
//{
|
|
|
// shift = shift - 15;
|
|
|
// buff[0] = 0;
|
|
|
// buff[1] = 1 >> shift;
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// buff[0] = 1 >> shift;
|
|
|
// buff[1] = 0;
|
|
|
//}
|
|
|
object[] buff = new object[1];
|
|
|
buff[0] = num;
|
|
|
plc.WriteByWord(key, buff);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 无上一工位信息报警
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void Alarm(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.NullProduct,1,false);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 字符串发送完成
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void BarcordSend(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.BarcodeSend,1,false);
|
|
|
}
|
|
|
|
|
|
public int GetBarcode(string key)
|
|
|
{
|
|
|
int [] value;
|
|
|
PlcData.Instance.PlcRead(key,out value);
|
|
|
if (value.Length > 0)
|
|
|
{
|
|
|
return value[0];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// NG拿取提示
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void NGTakeAway(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key,(int)PlcWriteByte.NGTakeAway,1,false);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
///换线NG品报警
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void ChangeError(string key)
|
|
|
{
|
|
|
plc.writePLCbybit(key, (int)PlcWriteByte.ChangeLine, 1, false);
|
|
|
}
|
|
|
|
|
|
public void Reset(string key)
|
|
|
{
|
|
|
object[] buff=new object[1];
|
|
|
buff[0]=0;
|
|
|
plc.WriteByWord(key, buff);
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 告诉PLCOKNG
|
|
|
/// </summary>
|
|
|
/// <param name="key"></param>
|
|
|
public void writeOKNG(string key,int value)
|
|
|
{
|
|
|
object[] buff = new object[1];
|
|
|
buff[0] = value;
|
|
|
plc.WriteByWord(key, buff);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public enum PlcWriteByte
|
|
|
{
|
|
|
//允许作业
|
|
|
startwork=0,
|
|
|
//Ng放行地址
|
|
|
NGGO=1,
|
|
|
//作业完成放行信号
|
|
|
HaveWorked=2,
|
|
|
//扫码完成信号
|
|
|
BarcodeScan=3,
|
|
|
//无工位信息报警地址
|
|
|
NullProduct=4,
|
|
|
//字符串发送完成信号
|
|
|
BarcodeSend=5,
|
|
|
//重投完成放行信号
|
|
|
ReStartGo=6,
|
|
|
//Ng拿取提示
|
|
|
NGTakeAway=7,
|
|
|
//换线NG品报警
|
|
|
ChangeLine=8
|
|
|
}
|
|
|
}
|