using System;
using OpcRcw.Da;
using WCS;
namespace Common
{
///
/// 异步订阅plc
///
public class ReadDBPlcCheck1: PlcRead, IOPCDataCallback
{
//异步事件,
public ReadDBPlcCheck1()
{
ConnectRemoteServer();
PLCGroupAdd(this);
GetItemAdd();
DataChange();
}
/////
///// 读取 item的值
/////
//public DataSet itemTable = new DataSet();
// MainForm frm = new MainForm();
private void GetItemAdd()
{
OPCITEMDEF[] ItemArray = new OPCITEMDEF[16];//定义读写的item,共个变量
for (int i = 0; i < 5; i++)
{
ItemArray[i].szAccessPath = "";
ItemArray[i].bActive = 1;//是否激活
ItemArray[i].hClient = i + 1;//表示ID
ItemArray[i].dwBlobSize = 0;
ItemArray[i].pBlob = IntPtr.Zero;
}
ItemArray[0].szItemID = "S7:[S7 Connection]DB41,INT8"; //110输送机状态 设备状态 0/1 空闲 2 有货无指令 5 有指令
ItemArray[1].szItemID = "S7:[S7 Connection]DB41,INT28"; //111输送机状态 设备状态 0/1 空闲 2 有货无指令 5 有指令
ItemArray[2].szItemID = "S7:[S7 Connection]DB41,INT48"; //112
ItemArray[3].szItemID = "S7:[S7 Connection]DB41,INT68"; //113
ItemArray[4].szItemID = "S7:[S7 Connection]DB41,INT208"; //120
ItemArray[5].szItemID = "S7:[S7 Connection]DB41,INT228"; //121
ItemArray[6].szItemID = "S7:[S7 Connection]DB41,INT248"; //122
ItemArray[7].szItemID = "S7:[S7 Connection]DB41,INT268"; //123
ItemArray[8].szItemID = "S7:[S7 Connection]DB41,INT408"; //210
ItemArray[9].szItemID = "S7:[S7 Connection]DB42,INT428"; //211
ItemArray[10].szItemID = "S7:[S7 Connection]DB42,INT448"; //212
ItemArray[11].szItemID = "S7:[S7 Connection]DB42,INT468"; //213
ItemArray[12].szItemID = "S7:[S7 Connection]DB42,INT608"; //220
ItemArray[13].szItemID = "S7:[S7 Connection]DB42,INT628"; //221
ItemArray[14].szItemID = "S7:[S7 Connection]DB42,INT648"; //222
ItemArray[15].szItemID = "S7:[S7 Connection]DB42,INT668"; //223
PlcItemAdd(ItemArray);
}
#region IOPCDataCallback 成员
public void OnCancelComplete(int dwTransid, int hGroup)
{
throw new NotImplementedException();
}
private string getFlatCode(string num)
{
string flatnum = string.Empty;
switch (num)
{
case "1":
flatnum = "110";
break;
case "2":
flatnum = "111";
break;
case "3":
flatnum = "112";
break;
case "4":
flatnum = "113";
break;
case "5":
flatnum = "120";
break;
case "6":
flatnum = "121";
break;
case "7":
flatnum = "122";
break;
case "8":
flatnum = "123";
break;
case "9":
flatnum = "210";
break;
case "10":
flatnum = "211";
break;
case "11":
flatnum = "212";
break;
case "12":
flatnum = "213";
break;
case "13":
flatnum = "220";
break;
case "14":
flatnum = "221";
break;
case "15":
flatnum = "222";
break;
case "16":
flatnum = "223";
break;
}
return flatnum;
}
object loc = new object();
public void OnDataChange(int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, int dwCount, int[] phClientItems, object[] pvValues, short[] pwQualities, FILETIME[] pftTimeStamps, int[] pErrors)
{
try
{
lock ("a")
{
string flatstsStr = string.Empty;
for (int i = 0; i < pvValues.Length; i++)
{
string flatNum = phClientItems[i].ToString();
string flatcode = getFlatCode(flatNum);
string plcid = PLCCommon.PlcFactory.Instance().ReadPlcDbValue(flatcode + "任务号", ref errText);
flatstsStr += DataClass.Instance().updateDevsts(flatcode, pvValues[i].ToString(), plcid);
}
DataClass.Instance().excutSqlstr(flatstsStr, ref errText);
}
}
catch (System.Exception exp)
{
string Errtext = exp.ToString();
}
}
public void OnReadComplete(int dwTransid, int hGroup, int hrMasterquality, int hrMastererror, int dwCount, int[] phClientItems, object[] pvValues, short[] pwQualities, FILETIME[] pftTimeStamps, int[] pErrors)
{
throw new NotImplementedException();
}
public void OnWriteComplete(int dwTransid, int hGroup, int hrMastererr, int dwCount, int[] pClienthandles, int[] pErrors)
{
throw new NotImplementedException();
}
#endregion
}
}