Переглянути джерело

revise wago simulator bug

chenzk 1 місяць тому
батько
коміт
0b8857e95f

+ 28 - 0
CyberX8_RT/Config/Devices/WagoControllerCfg-Simulator.xml

@@ -116,4 +116,32 @@
 			</AOGroup>
 		</Ano_Out>
 	</WagoDeviceConfig>
+	<WagoDeviceConfig Module="Wago1" IpAddress="127.0.0.1" Port="550" SendTimeout="2000" RecvTimeout="2000" Channel="1">
+		<Dig_In>
+			<DIGroup Name="N5">
+				<DI Name="DI1" Address="0" Invert="false"/>
+				<DI Name="DI2" Address="0" Invert="false"/>
+			</DIGroup>
+	
+		</Dig_In>
+		<Dig_Out>
+			<DOGroup Name="N7">
+				<DO Name="DO1"  Address="512" Invert="false"/>
+				<DO Name="DO2"  Address="513" Invert="false"/>
+			</DOGroup>
+		</Dig_Out>
+		<Ano_In>
+			<AIGroup Name="N1">
+				<AI Name="AI1"  Address="0" Scaling="0=3276.7,-757=16383.5" DataType="short"/>
+				<AI Name="AI2"  Address="1" DataType="short"/>
+			</AIGroup>
+
+		</Ano_In>
+		<Ano_Out>
+			<AOGroup Name="N3">
+				<AO Name="AO1"  Address="512" Scaling="0=3276.7,-757=16383.5" DataType="short"/>
+				<AO Name="AO2"  Address="513" DataType="short"/>
+			</AOGroup>
+		</Ano_Out>
+	</WagoDeviceConfig>
 </WagoControllerConfig>

+ 133 - 103
CyberX8_Simulator/Devices/WagoSocketSimulator.cs

@@ -18,13 +18,13 @@ namespace CyberX8_Simulator.Devices
         private const short WRITE_AO_STARTADDRESS = 0x0200;
 
         //键是名字,值是对应数据所在的位置  注意:要和WagoControlCfg里面的地址顺序对上
-        private Dictionary<string, int> DONameIndexDic;
+        public Dictionary<string, int> DONameIndexDic;
 
-        private Dictionary<string, int> DINameIndexDic;
+        public Dictionary<string, int> DINameIndexDic;
         
-        private Dictionary<string, int> AINameIndexDic;
+        public Dictionary<string, int> AINameIndexDic;
         
-        private Dictionary<string, int> AONameIndexDic;
+        public Dictionary<string, int> AONameIndexDic;
 
         private IByteTransform byteTransform = new BigEndianByteTransformBase();
 
@@ -55,116 +55,145 @@ namespace CyberX8_Simulator.Devices
         {
             if (AINameIndexDic.ContainsKey(name))
             {
-                if (value)
+                switch (name)
                 {
-                    AIShorts[AINameIndexDic[name]] = 0x2710;
-                }
-                else
-                {
-                    AIShorts[AINameIndexDic[name]] = 0x00;
+                    case "r_LoaderA_LS_Vacuum_anlg":
+                    case "r_LoaderB_LS_Vacuum_anlg":
+                        AIShorts[AINameIndexDic[name]] = value ? (short)0x2AF8 : (short)0x32C8;
+                        break;
+                    case "r_LOADERA_BERNOULLI_PRESSURE":
+                    case "r_LOADERB_BERNOULLI_PRESSURE":
+                        AIShorts[AINameIndexDic[name]] = value ? (short)0x2AF8 : (short)0x00;
+                        break;
+                
+                    default:
+                        break;
+
                 }
+           
             }
         }
         /// <summary>
         /// 初始化字典
         /// </summary>
-        private void InitializeData(int port)
+        private void InitializeData(int port)  //端口用于初始化不同Wago设备的字典
         {
-            DONameIndexDic = new Dictionary<string, int>
-            {{"c_System_Alarm",0 },
-             {"c_Pole_Red",1},
-             {"c_Pole_Amber",2},
-             {"c_Pole_Green",3},
-             {"c_Pole_Blue",4},
-             {"c_System_Alarm2",5},
-             {"c_BACKSIDE_PRESSURE_TEST",6},
-             {"c_VACUUM_TEST",7},
-             {"DO8",8},
-             {"DO9",9},
-             {"DO10",10},
-             {"DO11",11},
-             {"DO12",12},
-             {"DO13",13},
-             {"DO14",14},
-             {"DO15",15},
-             {"DO16",16},
-             {"DO17",17},
-             {"DO18",18},
-             {"DO19",19},
-             {"DO20",20},
-             {"DO21",21}};
+            switch (port)
+            {
+                case 501:
+                    DONameIndexDic = new Dictionary<string, int>
+                    {{"c_System_Alarm",0 },
+                     {"c_Pole_Red",1},
+                     {"c_Pole_Amber",2},
+                     {"c_Pole_Green",3},
+                     {"c_Pole_Blue",4},
+                     {"c_System_Alarm2",5},
+                     {"c_BACKSIDE_PRESSURE_TEST",6},
+                     {"c_VACUUM_TEST",7},
+                     {"DO8",8},
+                     {"DO9",9},
+                     {"DO10",10},
+                     {"DO11",11},
+                     {"DO12",12},
+                     {"DO13",13},
+                     {"DO14",14},
+                     {"DO15",15},
+                     {"DO16",16},
+                     {"DO17",17},
+                     {"DO18",18},
+                     {"DO19",19},
+                     {"DO20",20},
+                     {"DO21",21}};
 
-            DINameIndexDic = new Dictionary<string, int>
-            {{"r_Cassette_1_150",0 },
-             {"r_Cassette_1_100",1},
-             {"r_Cassette_1_200",2},
-             {"r_Cassette_2_150",3},
-             {"r_Cassette_2_100",4},
-             {"r_Cassette_2_200",5},
-             {"r_Cassette_3_150",6},
-             {"r_Cassette_3_100",7},
-             {"r_Cassette_3_200",8 },
-             {"r_Dummy_1_150",9},
-             {"r_Dummy_1_100",10},
-             {"r_Dummy_1_200",11},
-             {"r_Dummy_2_150",12},
-             {"r_Dummy_2_100",13},
-             {"r_Dummy_2_200",14},
-             {"DI15",15},
-             {"r_LoaderA_Wafer_Present",16},
-             {"r_LoaderB_Wafer_Present",17},
-             {"r_Cathode_Present",18},
-             {"DI19",19},
-             {"DI20",20},
-             {"DI21",21},
-             {"DI22",22},
-             {"DI23",23},
-             {"DI24",24},
-             {"DI25",25},
-             {"r_LOADERA_CRS_CURTAIN_1",26},
-             {"r_LOADERA_CRS_CURTAIN_2",27},
-             {"r_LOADERA_CRS_CURTAIN_3",28},
-             {"r_LOADERA_CRS_CURTAIN_4",29},
-             {"r_LOADERA_CRS_CURTAIN_5",30},
-             {"r_LOADERA_CRS_CURTAIN_6",31}};
+                    DINameIndexDic = new Dictionary<string, int>
+                    {{"r_Cassette_1_150",0 },
+                     {"r_Cassette_1_100",1},
+                     {"r_Cassette_1_200",2},
+                     {"r_Cassette_2_150",3},
+                     {"r_Cassette_2_100",4},
+                     {"r_Cassette_2_200",5},
+                     {"r_Cassette_3_150",6},
+                     {"r_Cassette_3_100",7},
+                     {"r_Cassette_3_200",8 },
+                     {"r_Dummy_1_150",9},
+                     {"r_Dummy_1_100",10},
+                     {"r_Dummy_1_200",11},
+                     {"r_Dummy_2_150",12},
+                     {"r_Dummy_2_100",13},
+                     {"r_Dummy_2_200",14},
+                     {"DI15",15},
+                     {"r_LoaderA_Wafer_Present",16},
+                     {"r_LoaderB_Wafer_Present",17},
+                     {"r_Cathode_Present",18},
+                     {"DI19",19},
+                     {"DI20",20},
+                     {"DI21",21},
+                     {"DI22",22},
+                     {"DI23",23},
+                     {"DI24",24},
+                     {"DI25",25},
+                     {"r_LOADERA_CRS_CURTAIN_1",26},
+                     {"r_LOADERA_CRS_CURTAIN_2",27},
+                     {"r_LOADERA_CRS_CURTAIN_3",28},
+                     {"r_LOADERA_CRS_CURTAIN_4",29},
+                     {"r_LOADERA_CRS_CURTAIN_5",30},
+                     {"r_LOADERA_CRS_CURTAIN_6",31}};
 
-            AINameIndexDic = new Dictionary<string, int>
-            {{"AI1",0 },
-             {"AI2",1},
-             {"AI3",2},
-             {"AI4",3},
-             {"r_LoaderA_LS_Vacuum_anlg",4},
-             {"r_LoaderB_LS_Vacuum_anlg",5},
-             {"AI6",6},
-             {"r_LOADER_GasFlowSensor_FLOW",7},
-             {"r_LOADERA_BERNOULLI_PRESSURE",8},
-             {"r_LOADERB_BERNOULLI_PRESSURE",9},
-             {"r_LOADERA_CHUCK_BLADDER",10},
-             {"r_LOADERB_CHUCK_BLADDER",11},
-             {"r_LOADERA_WS_BLADDER_PRESSURE",12},
-             {"r_LOADERB_WS_BLADDER_PRESSURE",13},
-             {"r_SPUF_VAC",14},
-             {"r_LOADER_GasFlowSensor_VACUUM",15},};
-
-            AONameIndexDic = new Dictionary<string, int>
-            {{"AO1",0},
-             {"AO2",1},
-             {"AO3",2},
-             {"AO4",3},
-             {"AO5",4},
-             {"AO6",5},
-             {"AO7",6},
-             {"AO8",7},
-             {"AO9",8},
-             {"AO10",9},
-             {"AO11",10},
-             {"AO12",11},
-             {"AO13",12},
-             {"AO14",13},
-             {"AO15",14},
-             {"AO16",15}};
-            }
+                    AINameIndexDic = new Dictionary<string, int>
+                    {{"AI1",0 },
+                     {"AI2",1},
+                     {"AI3",2},
+                     {"AI4",3},
+                     {"r_LoaderA_LS_Vacuum_anlg",4},
+                     {"r_LoaderB_LS_Vacuum_anlg",5},
+                     {"AI6",6},
+                     {"r_LOADER_GasFlowSensor_FLOW",7},
+                     {"r_LOADERA_BERNOULLI_PRESSURE",8},
+                     {"r_LOADERB_BERNOULLI_PRESSURE",9},
+                     {"r_LOADERA_CHUCK_BLADDER",10},
+                     {"r_LOADERB_CHUCK_BLADDER",11},
+                     {"r_LOADERA_WS_BLADDER_PRESSURE",12},
+                     {"r_LOADERB_WS_BLADDER_PRESSURE",13},
+                     {"r_SPUF_VAC",14},
+                     {"r_LOADER_GasFlowSensor_VACUUM",15},};
+
+                    AONameIndexDic = new Dictionary<string, int>
+                    {{"AO1",0},
+                     {"AO2",1},
+                     {"AO3",2},
+                     {"AO4",3},
+                     {"AO5",4},
+                     {"AO6",5},
+                     {"AO7",6},
+                     {"AO8",7},
+                     {"AO9",8},
+                     {"AO10",9},
+                     {"AO11",10},
+                     {"AO12",11},
+                     {"AO13",12},
+                     {"AO14",13},
+                     {"AO15",14},
+                     {"AO16",15}};
 
+                    //设置IO变量默认值
+                    AIShorts[AINameIndexDic["r_LoaderA_LS_Vacuum_anlg"]] = 0x32C8;
+                    AIShorts[AINameIndexDic["r_LoaderB_LS_Vacuum_anlg"]] = 0x32C8;
+                        break;
+                case 550:
+                    DONameIndexDic = new Dictionary<string, int>
+                    {{"DO0",0 }, {"DO1",1 }};
+                    DINameIndexDic = new Dictionary<string, int>
+                    {{"DI0",0 }, {"DI1",1 }};
+                    AONameIndexDic = new Dictionary<string, int>
+                    {{"AO0",0 }, {"AO1",0 }};
+                    AINameIndexDic = new Dictionary<string, int>
+                    {{"AI0",0 }, {"AI1",0 }};
+                    break;
+                default:
+                    break;
+            }
+   
+        }
         #region 公共方法
         public void UpdataDOBytes(string name,int value)
         {
@@ -266,6 +295,7 @@ namespace CyberX8_Simulator.Devices
             for (int i = 0; i < shortArray.Length; i++)
             {
                 byte[] tempBytes = BitConverter.GetBytes(shortArray[i]);
+                Array.Reverse(tempBytes);
                 Array.Copy(tempBytes, 0, byteArray, i * 2, 2);
             }
             return byteArray;

+ 22 - 91
CyberX8_Simulator/Views/WagoView.xaml.cs

@@ -203,102 +203,33 @@ namespace CyberX8_Simulator.Views
             _sim.UpdataAOShorts(AOSelectedItem, AOInputValue);
         }
 
-        private void InitData(int port)
+        private void InitData(int port) //端口用于初始化不同Wago设备的字典
         {
             DigitalInputSelected = new ObservableCollection<int> { 0, 1 };
 
-            DONameItems = new ObservableCollection<string>
-            { "c_System_Alarm",
-              "c_Pole_Red",
-              "c_Pole_Amber",
-              "c_Pole_Green",
-              "c_Pole_Blue",
-              "c_System_Alarm2",
-              "c_BACKSIDE_PRESSURE_TEST",
-              "c_VACUUM_TEST",
-              "DO8",
-              "DO9",
-              "DO10",
-              "DO11",
-              "DO12",
-              "DO13",
-              "DO14",
-              "DO15",
-              "DO16",
-              "DO17",
-              "DO18",
-              "DO19",
-              "DO20",
-              "DO21"};
-            
-            DINameItems = new ObservableCollection<string>
-            { "r_Cassette_1_150",
-              "r_Cassette_1_100",
-              "r_Cassette_1_200",
-              "r_Cassette_2_150",
-              "r_Cassette_2_100",
-              "r_Cassette_2_200",
-              "r_Cassette_3_150",
-              "r_Cassette_3_100",
-              "r_Cassette_3_200",
-              "r_Dummy_1_150",
-              "r_Dummy_1_100",
-              "r_Dummy_1_200",
-              "r_Dummy_2_150",
-              "r_Dummy_2_100",
-              "r_Dummy_2_100",
-              "D15",
-              "r_LoaderA_Wafer_Present",
-              "r_LoaderB_Wafer_Present",
-              "r_Cathode_Present",
-              "DI19",
-              "DI20",
-              "DI21",
-              "DI22",
-              "DI23",
-              "DI24",
-              "DI25",
-              "r_LOADERA_CRS_CURTAIN_1",
-              "r_LOADERA_CRS_CURTAIN_2",
-              "r_LOADERA_CRS_CURTAIN_3",
-              "r_LOADERA_CRS_CURTAIN_4",
-              "r_LOADERA_CRS_CURTAIN_5",
-              "r_LOADERA_CRS_CURTAIN_6",};
+            DONameItems = new ObservableCollection<string>();
+            foreach (var item in _sim.DONameIndexDic.Keys)
+            {
+                DONameItems.Add(item);
+            }
+
+            DINameItems = new ObservableCollection<string>();
+            foreach (var item in _sim.DINameIndexDic.Keys)
+            {
+                DINameItems.Add(item);
+            }
 
-            AONameItems = new ObservableCollection<string> 
-            { "AO1", 
-              "AO2",
-              "AO3",
-              "AO4",
-              "AO5",
-              "AO6",
-              "AO7",
-              "AO8",
-              "AO9",
-              "AO10",
-              "AO11",
-              "AO12",
-              "AO13",
-              "AO14",
-              "AO15",
-              "AO16"};
+            AONameItems = new ObservableCollection<string>();
+            foreach (var item in _sim.AONameIndexDic.Keys)
+            {
+                AONameItems.Add(item);
+            }
 
-            AINameItems = new ObservableCollection<string> 
-            { "AI1", 
-              "AI2",
-              "AI3",
-              "r_LoaderA_LS_Vacuum_anlg",
-              "r_LoaderB_LS_Vacuum_anlg",
-              "AI6",
-              "r_LOADER_GasFlowSensor_FLOW",
-              "r_LOADERA_BERNOULLI_PRESSURE",
-              "r_LOADERB_BERNOULLI_PRESSURE",
-              "r_LOADERA_CHUCK_BLADDER",
-              "r_LOADERB_CHUCK_BLADDER",
-              "r_LOADERA_WS_BLADDER_PRESSURE",
-              "r_LOADERB_WS_BLADDER_PRESSURE",
-              "r_SPUF_VAC",
-              "r_LOADER_GasFlowSensor_VACUUM",};
+            AINameItems = new ObservableCollection<string>();
+            foreach (var item in _sim.AINameIndexDic.Keys)
+            {
+                AINameItems.Add(item);
+            }
         }
     }