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 } }