abstract public void SendSignal(ASignal signal);
/// <summary> /// 将连接关系转换为输入到输出的模式,返回一个哈希表,从<objectid pinname>到Asignal的哈希 /// </summary> /// <returns></returns> public Hashtable Transform_Signal() { Hashtable result = new Hashtable(); foreach (ASignal asignal in signals.data.Values) { for (int i = 0; i < asignal.end_modules.Count; i++) { List<string> key = new List<string>(); key.Add(asignal.end_modules[i].ObjectID); key.Add(asignal.end_pins[i]); if (result.Contains(key)) { ((ASignal)result[key]).end_modules.Add(asignal.start_module); ((ASignal)result[key]).end_pins.Add(asignal.start_pin); } else { ASignal temp = new ASignal(); temp.start_module = asignal.end_modules[i]; temp.start_pin = asignal.end_pins[i]; temp.end_modules.Add(asignal.start_module); temp.end_pins.Add(asignal.start_pin); key = new List<string>(); key.Add(temp.start_module.ObjectID); key.Add(temp.start_pin); result[key] = temp; } } } return result; }
public override void SendSignal(ASignal signal) { SignalsQueue.Add(signal); }
/// <summary> /// 根据模块的Pin Value生成模块之间的连接关系 /// </summary> /// <param name="ControllerAddr">ControllerAddr</param> /// <param name="DocumentName">DocumentName</param> /// <param name="SheetName">SheetName</param> public void Generate_Signal_Info(string ControllerAddr, string DocumentName, string SheetName) { List<ASignal> one_to_one_list = new List<ASignal>();//临时,存储一对一的Signal的集合 ASignal temp_asignal; //对于每一个CLd_Module检查它的输入引脚的Value,寻找源端 foreach (Cld_Module cld_module in cld_modules.Values) { foreach (Cld_Module_Pin cld_module_pin in cld_module.Input_Pin.Values) {//遍历每一个输入引脚 string pinvalue = cld_module_pin.PinValue;//输入引脚的值 if (!pinvalue.StartsWith(DocumentName)) {//检查合法性 continue; } int last_index_ = pinvalue.LastIndexOf("-"); int pinindex = Int32.Parse(pinvalue.Substring(last_index_ + 1));//源PinIndex string objID = pinvalue.Substring(0, last_index_);//源Cld_Module的ID Cld_Module src = (Cld_Module)cld_modules[objID];//源CLd_MOdule if (src == null) { throw new Exception("In Table Cld_FCMaster,NO such objectid as " + objID); } string src_pin_name = this.meta_modules.PinName_By_FuncName_And_Index(src.FunctionName, pinindex);//源PinName temp_asignal = new ASignal(); temp_asignal.start_module = src; temp_asignal.start_pin = src_pin_name; temp_asignal.end_modules.Add(cld_module); temp_asignal.end_pins.Add(cld_module_pin.PinName); one_to_one_list.Add(temp_asignal); } } //Functions.show_ASignal_List(one_to_one_list);//显示 foreach (ASignal asignal in one_to_one_list) { Cld_Module start = asignal.start_module; string id_pinname = start.ObjectID + "_" + asignal.start_pin; if (!signals.data.Contains(id_pinname)) { temp_asignal = new ASignal(); temp_asignal.start_module = start; temp_asignal.start_pin = asignal.start_pin; temp_asignal.end_modules.Add(asignal.end_modules[0]); temp_asignal.end_pins.Add(asignal.end_pins[0]); signals.data[id_pinname] = temp_asignal; } else { ((ASignal)signals.data[id_pinname]).end_modules.Add(asignal.end_modules[0]); ((ASignal)signals.data[id_pinname]).end_pins.Add(asignal.end_pins[0]); } } //Functions.show_Signals(signals);//显示 }