Beispiel #1
0
 abstract public void SendSignal(ASignal signal);
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
 public override void SendSignal(ASignal signal)
 {
     SignalsQueue.Add(signal);
 }
Beispiel #4
0
        /// <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);//显示
        }