static void Main() { BandiCropModule BCM = new BandiCropModule(); //ConnectEyesen ce = new ConnectEyesen(); //DevInfo dev = new DevInfo(); // TEST CONNECTION //ce.ConnectToServer("192.168.1.222", 7777); //Console.WriteLine(ce.RecieveMassage()); // RUN TEST //BCM.run_module_test(); // LOAD CROP DATA MWStructArray crops_db = BCM.load_crop_db(); // TEST DONG OBJECT TO APPLY CONTROLS DongConfig nare_testbed = new DongConfig(1); nare_testbed.name = "NARE_TESTBED"; nare_testbed.fan_total = 5; nare_testbed.ch_exhaust_fans = new int[4] { 1, 2, 3, 4 }; nare_testbed.ch_ceiling_vents_L1 = new int[1] { 1 }; nare_testbed.ch_side_vents_L1 = new int[1] { 2 }; nare_testbed.ch_heater = new int[1] { 3 }; // SPECIFY DONG STATE AND CROP string crop_name = "TOMATO"; DongState dong_state = new DongState(); dong_state.temp_in = 4; dong_state.temp_out = -3; dong_state.hum_in = 50; dong_state.hum_out = 40; dong_state.hum_bed = 30; dong_state.co2_supply = true; dong_state.rain = true; // CHECK CROP STATUS MWStructArray env_status = BCM.crop_env_checker(crops_db, crop_name, dong_state); // CHECK FOR REQUIRED CONTROL ACTIONS MWStructArray control_actions = BCM.crop_env_controller(crops_db, crop_name, dong_state); // APPLY CONTROL TO NARE_TESTBED BCM.autoswitch_control(control_actions, nare_testbed); Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); }
public void run_module_test() { BandiCropAnalyzer.CropAnalyzer crop_analyzer = new BandiCropAnalyzer.CropAnalyzer(); // TEST CROP AND SENSOR FEED string crop_name = "STRAWBERRY"; DongState dong_state = new DongState(); dong_state.temp_in = 4; dong_state.temp_out = -3; dong_state.hum_in = 50; dong_state.hum_out = 40; dong_state.hum_bed = 30; dong_state.co2_supply = true; dong_state.rain = true; // TEST DONG OBJECT TO APPLY CONTROLS DongConfig dong = new DongConfig(1) { name = "NARE_DONG", fan_total = 5, }; MWStructArray crops_db = load_crop_db(); // DO CROP ENVIRONMENT CHECK ONLY MWStructArray env_status = crop_env_checker(crops_db, crop_name, dong_state); // PARSE CHECK RESULTS FOR DISPLAY int print_level = 2; // 0->1->2 : INCREASING VERBOSITY string result_out = parse_results(env_status, print_level); // PERFORM STATUS CHECK + CONTROL ACTION MWStructArray control_actions = crop_env_controller(crops_db, crop_name, dong_state); // APPLY CONTROL TO DONG1 autoswitch_control(control_actions, dong); Console.WriteLine("\nMODULE TEST COMPLETE. PRESS ANY KEY TO CONTINUE..."); Console.ReadKey(); }
// SWITCH BETWEEN AUTOMATIC AND GROWTH CONTROLLER public void autoswitch_control(MWStructArray control_actions, DongConfig dong) { // CHECK IF CONTROL ACTIONS RETURNED. STOP AUTOMATIC CONTROL, ACTIVATE TOUCH PANEL CONTROL if (control_actions.NumberOfFields == 0) { Console.WriteLine(">> NO CONTROL ACTIONS RECEIVED."); // IF CONTROL ACTIONS EMPTY, REACTIVATE AUTOMATIC CONTROL //------------> activate automatic control here Console.WriteLine(">> REVERTING TO AUTOMATIC CONTROL..."); } else { // IF CONTROL ACTIONS RECEIVED, SWITCH TO GROWTH CONTROL // ------------> deactivate automatic control here Console.WriteLine(">> SWITCHING TO GROWTH CONTROL..."); // EXECUTE CONTROL ACTIONS THROUGH EYESEN INTERFACE execute_control(control_actions, dong); } }
// INTERFACETO HARDWARE-LEVEL COMMANDS public void execute_control(MWStructArray control_action, DongConfig dong) { Console.WriteLine("\n======================= SENDING CONTROL SIGNALS ======================="); Form1 eyesen = new Form1(); // PARSE DONG INFORMATION Console.WriteLine("\nACTIVATING CONTROLS FOR DONG #{0} ...", dong.GetType().GetProperty("id").GetValue(dong, null)); Console.WriteLine("NAME : " + dong.GetType().GetProperty("name").GetValue(dong, null)); int nFields = control_action.NumberOfFields; string[] field_names = control_action.FieldNames; for (int ix = 0; ix < nFields; ix++) { string control_target = field_names[ix]; string command = control_action.GetField(control_target).ToString(); // string command = "on"; // switch -> stop, open, close / (2) fan -> on, off / (3) on, off) Console.WriteLine(control_target + " : " + command); // GET IO POINTS FROM DONG OBJECT string iotype = "fan"; // EYESEN ACTUATORS: switch, fan, relay 입력 가능 int dongNumber = dong.id; // HEATER if (control_target == "heater") { int[] channels = dong.ch_heaters; for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "vent") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "fan") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; // VENTS if (control_target == "irrigation") { for (int i = 0; i < channels.Length; i++) { eyesen.EquipControl(iotype, dongNumber, channels[i], command); } } ; } }