private void Create_XML1() { //Create DELTA XML for (int i = 0; i < DELTA_Count; i++) { Configs[i] = ic.read_ini("DELTA setting", "name" + Convert.ToInt32(i + 1), "CNC1"); //判斷DELTA台數 bool exportConfig = true; //將exportConfig設定為true即表示會創建xml string strConfigName = Configs[i]; //根據ini內容決定xml名稱 eventLog1.WriteEntry("Create XML name" + strConfigName); string strApplicationDir = ""; MemInterface interface_instance = new MemInterface(); GetConfigInfo(ref strConfigName, ref strApplicationDir, args, ref exportConfig); interface_instance.Start(args, strConfigName, strApplicationDir, exportConfig, "DELTA", i); } //Create Fanuc XML //get Fanuc count //get Fanuc name for (int i = 0; i < Fanuc_Count; i++) { Configs_Fanuc[i] = ic.read_ini("Fanuc Setting", "name" + Convert.ToInt32(i + 1), "null"); //判斷Fanuc台數 bool exportConfig_Fanuc = true; //將exportConfig設定為true即表示會創建xml string strConfigName_Fanuc = Configs_Fanuc[i]; //根據ini內容決定xml名稱 string strApplicationDir_Fanic = ""; MemInterface interface_fanuc = new MemInterface(); GetConfigInfo(ref strConfigName_Fanuc, ref strApplicationDir_Fanic, args, ref exportConfig_Fanuc); interface_fanuc.Start(args, strConfigName_Fanuc, strApplicationDir_Fanic, exportConfig_Fanuc, "Fanuc", i); } }
public void Run_Fanuc() { for (int i = 0; i < Fanuc_Count; i++)//判斷台數 { Configs_Fanuc[i] = ic.read_ini("Fanuc Setting", "name" + Convert.ToInt32(i + 1), "null"); try { bool exportConfig = false; //false表示為不再建立xml string strConfigName = Configs_Fanuc[i]; //抓ini裡面所設定的xml名稱 string strApplicationDir = ""; GetConfigInfo(ref strConfigName, ref strApplicationDir, args, ref exportConfig); //此類別的List會用於之後各函式的更新執行緒 Lst_FP.Add(new Fanuc_FP(strConfigName, F_Control)); //Start the interface to shared memory MemInterface.loop_switch_Fanuc = true; //建立實體 MemInterface interface_instance = new MemInterface(); interface_instance.main = this; interface_instance.Start(args, strConfigName, strApplicationDir, exportConfig, "Fanuc", i); } catch (Exception ex) { eventLog1.WriteEntry("Run Fanuc Error,Result" + ex.ToString()); } } }
private void Run_DELTA() { for (int i = 0; i < DELTA_Count; i++)//判斷台數 { Configs[i] = ic.read_ini("DELTA setting", "name" + Convert.ToInt32(i + 1), "CNC1"); bool exportConfig = false; //false表示為不再建立xml string strConfigName = Configs[i]; //抓ini裡面所設定的xml名稱 string strApplicationDir = ""; GetConfigInfo(ref strConfigName, ref strApplicationDir, args, ref exportConfig); //設定連線訊息,此處未來應改為可以建立不同IP,甚至是更改IP info.SetConnectInfo(DELTA_localIP1, DELTA_remoteIP1, Convert.ToInt32(DELTA_timeout1)); eventLog1.WriteEntry("CNC" + i.ToString() + " Connection state is localIP" + DELTA_localIP1 + ",remote IP" + DELTA_remoteIP1 + ",timeout" + DELTA_timeout1); int isFailed = info.Connect(); if (isFailed.Equals(0)) { //此類別的List會用於之後各函式的更新執行緒 Lst_BP.Add(new Basic_BP(strConfigName, info)); //Start the interface to shared memory MemInterface.loop_switch = true; //建立實體 MemInterface interface_instance = new MemInterface(); interface_instance.main = this; interface_instance.Start(args, strConfigName, strApplicationDir, exportConfig, "DELTA", 0); } else { eventLog1.WriteEntry("LocalIP:" + DELTA_localIP1 + " remote IP:" + DELTA_remoteIP1 + "\n連線失敗,請重新嘗試\n"); } } }
//************************************************************** public DWORD AddTag(Tag.TAGENTRY tTagEntry, DWORD relativeOffset, MemInterface i_face) { DWORD readOffset = 0; DWORD writeOffset = 0; DWORD nextAvailableDataOffset = 0; // offset for next data block DWORD nextAvailableTagOffset = 0; // offset for next tag Tag refTag; //= NULL; Device refDevice = this; // Create new Tag refTag = new Tag(ref refDevice, tTagEntry, relativeOffset, GetSharedMemoryOffset()); if (refTag.Equals(null)) { Trace.Assert(false); return (relativeOffset); // re-use this offset for the next tag } // Determine register's read offset if (refTag.IsReadable()) { readOffset = Register.DATA_MIN_OFFSET; nextAvailableDataOffset = readOffset + Register.DATA_SIZE_MIN + refTag.GetReadValueExtSize(); // Determine register's write offset if (refTag.IsWriteable()) { // read/write writeOffset = nextAvailableDataOffset; nextAvailableDataOffset = writeOffset + Register.DATA_SIZE_MIN + refTag.GetWriteValueExtSize(); } else { // read-only writeOffset = 0; } } else { readOffset = 0; // Determine register's write offset if (refTag.IsWriteable()) { // write-only writeOffset = Register.DATA_MIN_OFFSET; nextAvailableDataOffset = writeOffset + Register.DATA_SIZE_MIN + refTag.GetWriteValueExtSize(); } else { // neither read or write Debug.Assert(false); writeOffset = 0; } } // Prepare the register offset for the next tag (if applicable) nextAvailableTagOffset = relativeOffset + nextAvailableDataOffset; string msg = ""; // Check for Shared Memory file overrun if ((GetSharedMemoryOffset() + nextAvailableTagOffset) > SharedMemServer.MAPSIZE) { // Reached the limits of our Shared Memory file // Don't add tag msg = string.Format("Tag {0,0:T} could not be added.", refTag.GetName()) + string.Format("Register {0,0:D} with size ", refTag.GetSharedMemoryOffset()) + string.Format("{0,0:D} bytes would exceed Shared Memory file size of ", (DWORD)(writeOffset + Register.DATA_SIZE_MIN + refTag.GetExtendedSize())) + string.Format("{0,0:D}", SharedMemServer.MAPSIZE); Trace.WriteLine(msg); return (relativeOffset); } int nRC = TagData.SMRC_NO_ERROR; // Initialize register if we have access to shared memory if (i_face.memStream != null) { Register.SetReadOffset(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), readOffset); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}" + ": SetReadOffset nRC = " + "{2,0:D}" + ", dwReadOffset = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, readOffset); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS Register.SetWriteOffset(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), writeOffset); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetWriteOffset nRC = " + "{2,0:D}" + ", dwWriteOffset = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, writeOffset); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS Register.SetReadValueType(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), refTag.GetReadValueType()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetReadValueType nRC = " + "{2,0:D}" + ", ReadValueType = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetReadValueType()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS if (writeOffset != 0) { Register.SetWriteValueType(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), refTag.GetWriteValueType()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetWriteValueType nRC = " + "{2,0:D}" + ", WriteValueType = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetWriteValueType()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS } Register.SetReadValueExtSize(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), refTag.GetReadValueExtSize()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetReadValueExtSize nRC = " + "{2,0:D}" + ", ReadValueExtSize = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetReadValueExtSize()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS if (writeOffset != 0) { Register.SetWriteValueExtSize(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), refTag.GetWriteValueExtSize()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetWriteValueExtSize nRC = " + "{2,0:D}" + ", WriteValueExtSize = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetWriteValueExtSize()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS } if (refTag.GetDataType() == (ushort)(Value.T_ARRAY | Value.T_STRING)) { nRC = Register.SetReadValueArrayStringSize(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), refTag.GetReadValueArrayStringSize()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetReadValueArrayStringSize nRC = " + "{2,0:D}" + ", ReadValueArrayStringSize = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetReadValueArrayStringSize()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS if (writeOffset != 0) { nRC = Register.SetWriteValueArrayStringSize(i_face.memStream, (long)refTag.GetSharedMemoryOffset(), (WORD)refTag.GetWriteValueArrayStringSize()); #if TRACE_SM_ACCESS msg = string.Format("{0,8:0D}: Tag " + "{1,0:T}: SetWriteValueArrayStringSize nRC = " + "{2,0:D}" + ", WriteValueArrayStringSize = {3,0:D}", GetTickCount(), refTag.GetName(), nRC, refTag.GetWriteValueArrayStringSize()); Trace.WriteLine(msg); #endif//TRACE_SM_ACCESS } } } // if (pSharedMemoryBaseMem != null) // Add tag to our tag set tagSet.Add(refTag); msg = string.Format("Tag {0,0:T}: assigned to Register " + "{1,0:D} with size " + "{2,0:D} bytes. Relative offset = " + "{3,0:D}", refTag.GetName(), refTag.GetSharedMemoryOffset(), nextAvailableDataOffset, refTag.GetRelativeOffset()); Trace.WriteLine(msg); return (nextAvailableTagOffset); } // AddTag ()
// ************************************************************************************* public TagData(VALTYPE vType, WORD stringSize, int rows, int cols) { value = new Value(vType, stringSize, rows, cols); MemInterface.GetFtNow(ref timeStamp); }