標籤:
OPCAutomation.OPCServer clsOPCServer = new OPCAutomation.OPCServer();OPCGroup clsOPCGroup;OPCGroups clsOPCGroups;OPCItem clsOPCItem;OPCItem[] AllOPCItem;Boolean bolConnect() { //return true; try { if (clsOPCGroup == null) { clsOPCServer = new OPCServer(); t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到達時間的時候執行事件; t.AutoReset = false; //設定是執行一次(false)還是一直執行(true); t.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件; t.Start(); clsOPCServer.Connect(strOPCServer, strOPCServerIP); if (clsOPCServer.ServerState == (int)OPCServerState.OPCRunning) { t.Stop(); t.Dispose(); clsLoad.WriteLog("OPC服務串連成功"); } clsOPCGroups = clsOPCServer.OPCGroups; clsOPCGroup = clsOPCGroups.Add(strOPCGroup); } return true; } catch (Exception ex) { clsLoad.WriteLog("OPC服務串連錯誤" + "主機IP" + strOPCServerIP + "服務名:" + strOPCServer + "訪問組名:" + strOPCGroup + "明細" + ex.ToString()); return false; } } Boolean bolAddItem() { string sql; try { List<string> items = new List<string>(); foreach (string st in station) { sql = "select * from Land where ST=‘" + st + "‘"; List<string> columns = clsSql.GetColumnStrings(sql, "off"); for (int m = 3; m < columns.Count; m++) { items.Add(columns[m]); } } AllOPCItem = new OPCItem[items.Count]; for (int m = 0; m < items.Count; m++) { AllOPCItem[m]=clsOPCGroup.OPCItems.AddItem(items[m], m); hw.Add(items[m],m); } return true; } catch (Exception ex) { clsLoad.WriteLog("OPC服務添加錯誤" + ex.ToString()); return false; } } object ReadOPC(string O_Adrs) //位元組型變數 { object objValue = ""; object objQuality; object objTimeStamp; int ct; try { ct = (int)hw[O_Adrs]; AllOPCItem[ct].Read(Convert.ToInt16(OPCAutomation.OPCDataSource.OPCDevice), out objValue, out objQuality, out objTimeStamp); return objValue; } catch (Exception ex) { //MessageBox.Show("讀取OPC 地址 " + O_Adrs + "錯誤"); clsLoad.err = "讀取OPC 地址 " + O_Adrs + "錯誤"; clsLoad.WriteLog("OPC讀取狀態" + O_Adrs + "錯誤" + ex.ToString()); return 0; } } bool WriteOPC(object intStatus, string O_Adrs) // { int ct; try { ct = (int)hw[O_Adrs]; AllOPCItem[ct].Write(intStatus); return true; } catch (Exception ex) { clsLoad.err = "寫OPC 地址 " + O_Adrs + "錯誤"; clsLoad.WriteLog("寫OPC 地址狀態" + O_Adrs + "錯誤" + ex.ToString()); return false; } }
C# OPC操作