using System; using System.Windows.Forms; using SystemX.Net.Platform.Common.Util; using ActUtlTypeLib; //using MITSUBISHI.Component; namespace SystemX.PLC.Interface.MxComponent { class PLCMxComponent { //DotUtlType _DotUtlType; ActUtlTypeLib.ActUtlType _ActUtlType; public bool m_IsPlcConnected; bool m_bLockFin = false; // Set the read/write timeouts int m_nReadTimeOut = 500; int m_nWriteTimeOut = 500; public PLCMxComponent() { } public void SetTimeOut(int nWriteTimeOut, int nReadTimeOut) { m_nReadTimeOut = nReadTimeOut; m_nWriteTimeOut = nWriteTimeOut; } public void Initialize() { try { _ActUtlType = new ActUtlTypeLib.ActUtlType(); //_DotUtlType = new DotUtlType(); } catch (Exception ex) { Console.WriteLine("Error in Initialization for plc: " + ex.Message); } } public bool Open(string localStationNum) { int lRet; try { _ActUtlType.ActLogicalStationNumber = Convert.ToInt32(localStationNum); //_DotUtlType.ActLogicalStationNumber = Convert.ToInt32(localStationNum); lRet = _ActUtlType.Open(); //lRet = _DotUtlType.Open(); if (lRet == 0) { m_IsPlcConnected = true; return true; } else { LogMessage.MessageOutput.ConsoleWrite("Error Open PLC Connection.", ConsoleColor.Red, LogMessage.LogMessageLevel.FATAL); m_IsPlcConnected = false; return false; } } catch (Exception ex) { LogMessage.MessageOutput.ConsoleWrite("Error during logical station opening: " + ex.Message, ConsoleColor.Red, LogMessage.LogMessageLevel.FATAL); return false; } } public bool Close() { try { if (m_IsPlcConnected) { //_DotUtlType.Close(); _ActUtlType.Close(); } m_IsPlcConnected = false; return true; } catch (Exception ex) { LogMessage.MessageOutput.ConsoleWrite("Error during plc close: " + ex.Message, ConsoleColor.Red, LogMessage.LogMessageLevel.FATAL); return false; } } public bool ReadData(string deviceName, int size, ref short[] data) { bool ret = false; int iRet = 0; try { iRet = _ActUtlType.ReadDeviceRandom2(deviceName, size, out data[0]); //iRet = _DotUtlType.ReadDeviceRandom2(ref deviceName, size, ref data); if (iRet == 0) ret = true; else ret = false; } catch (System.Exception ex) { #if DEBUG MessageBox.Show(ex.ToString()); #endif ret = false; } return ret; } public bool BlockReadData(string deviceName, int size, ref short[] data) { bool ret = false; int iRet = 0; try { iRet = _ActUtlType.ReadDeviceBlock2(deviceName, size, out data[0]); //iRet = _DotUtlType.ReadDeviceBlock2(ref deviceName, size, ref data); if (iRet == 0) ret = true; else ret = false; } catch (System.Exception ex) { #if DEBUG MessageBox.Show(ex.ToString()); #endif ret = false; } return ret; } public bool WriteData(string deviceName, int size, short[] data) { bool ret = false; int iRet = 0; try { iRet = _ActUtlType.WriteDeviceRandom2(deviceName, size, data[0]); //iRet = _DotUtlType.WriteDeviceRandom2(ref deviceName, size, ref data); if (iRet == 0) ret = true; else ret = false; } catch (System.Exception ex) { #if DEBUG MessageBox.Show(ex.ToString()); #endif ret = false; } return ret; } public bool BlockWriteData(string deviceName, int size, short[] data) { bool ret = false; int iRet = 0; try { short[] blockValue = new short[size]; Array.Copy(data, blockValue, data.Length); //Buffer.BlockCopy(data, 0, blockValue, 0, size); iRet = _ActUtlType.WriteDeviceBlock2(deviceName, size, blockValue[0]); //iRet = _DotUtlType.WriteDeviceBlock2(ref deviceName, size, blockValue); if (iRet == 0) ret = true; else ret = false; } catch (System.Exception ex) { #if DEBUG MessageBox.Show(ex.ToString()); #endif ret = false; } return ret; } public void ReleaseLock() { m_bLockFin = false; } public bool GetLockState() { return m_bLockFin; } } }