Search in sources :

Example 1 with Fault

use of edu.umn.cs.crisys.safety.analysis.transform.Fault in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method addTopLevelFaultDeclarations.

/**
 * Method adds fault information to main node. This includes locals and inputs.
 * It also checks to see if IVC analysis is being performed. If so, the fault
 * indep vars are added to lustre (set equal to false) and given the IVC
 * command.
 *
 * @param currentNode Top node
 * @param nb          Node builder has assertions, locals, etc added.
 */
public void addTopLevelFaultDeclarations(AgreeNode currentNode, AgreeNodeBuilder nb) {
    List<Fault> faults = this.faultMap.get(currentNode.compInst);
    // whether or not fault is currently active.
    for (Fault f : faults) {
        String base = addPathDelimiters(f.path, f.id);
        nb.addInput(new AgreeVar(this.createFaultEventId(base), NamedType.BOOL, f.faultStatement));
        addFaultIndepVarsToLustre(base, f, nb);
        // Add dependent as per usual.
        nb.addInput(new AgreeVar(this.createFaultDependentActiveId(base), NamedType.BOOL, f.faultStatement));
        addToLustreFaultMap(base, f);
        // constrain fault-active depending on transient / permanent & map it to a
        // fault in the node interface
        // take the propagation map when constrainFaultActive
        constrainFaultActive(f, base, nb);
        mapFaultActiveToNodeInterface(f, f.path, base, nb);
    }
    List<HWFault> hwfaults = this.hwfaultMap.get(currentNode.compInst);
    addLocalsAndInputForHWFaults(hwfaults, nb);
    // Add hw faults to lustre fault mapping
    for (HWFault hwf : hwfaults) {
        String base = addPathDelimiters(hwf.path, hwf.id);
        addToLustreHWFaultMap(base, hwf);
    }
    for (AgreeNode n : currentNode.subNodes) {
        addTopLevelFaultDeclarations(n, nb);
    }
}
Also used : AgreeNode(com.rockwellcollins.atc.agree.analysis.ast.AgreeNode) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) BaseFault(edu.umn.cs.crisys.safety.analysis.transform.BaseFault) Fault(edu.umn.cs.crisys.safety.analysis.transform.Fault) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) AgreeVar(com.rockwellcollins.atc.agree.analysis.ast.AgreeVar)

Example 2 with Fault

use of edu.umn.cs.crisys.safety.analysis.transform.Fault in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method collectFaultPath.

/**
 * Method updates fault map with the path, also sets path for each fault. (Path
 * corresponds to agree node.)
 *
 * @param currentNode Agree node with this fault.
 * @param path        Path name (node name)
 */
public void collectFaultPath(AgreeNode currentNode, List<String> path) {
    List<Fault> faults = this.faultMap.get(currentNode.compInst);
    List<HWFault> hwfaults = this.hwfaultMap.get(currentNode.compInst);
    // Add unconstrained input and constrained local to represent fault event and
    // whether or not fault is currently active.
    int index = 0;
    for (Fault f : faults) {
        // update fault name base
        f.setPath(path);
        // update fault list
        faults.set(index, f);
        index++;
    }
    // update faultMap
    this.faultMap.put(currentNode.compInst, faults);
    index = 0;
    for (HWFault hwf : hwfaults) {
        // update fault name base
        hwf.setPath(path);
        // update fault list
        hwfaults.set(index, hwf);
        index++;
    }
    // update faultMap
    this.faultMap.put(currentNode.compInst, faults);
    this.hwfaultMap.put(currentNode.compInst, hwfaults);
    // repeating it for the decendents of the node
    for (AgreeNode n : currentNode.subNodes) {
        List<String> ext = new ArrayList<>(path);
        ext.add(n.id);
        collectFaultPath(n, ext);
    }
}
Also used : AgreeNode(com.rockwellcollins.atc.agree.analysis.ast.AgreeNode) ArrayList(java.util.ArrayList) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) BaseFault(edu.umn.cs.crisys.safety.analysis.transform.BaseFault) Fault(edu.umn.cs.crisys.safety.analysis.transform.Fault) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) TransientConstraint(edu.umn.cs.crisys.safety.safety.TransientConstraint) PermanentConstraint(edu.umn.cs.crisys.safety.safety.PermanentConstraint) TemporalConstraint(edu.umn.cs.crisys.safety.safety.TemporalConstraint)

Example 3 with Fault

use of edu.umn.cs.crisys.safety.analysis.transform.Fault in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method gatherFaultyOutputs.

/**
 * Method populates faultyVarsExpr map with faults associated with outputs they
 * are attached to. Return map is : output1 -> {(outputExpr, fault1),
 * (outputExpr, fault2)...}
 *
 * @param faults List of all faults in this agree node.
 * @param node   The agree node.
 * @return HashMap<String, List<Pair>> faultyVarsExpr map.
 */
private HashMap<String, List<Pair>> gatherFaultyOutputs(List<Fault> faults, AgreeNode node) {
    HashMap<String, List<Pair>> outputMap = new HashMap<String, List<Pair>>();
    String id = "";
    for (Fault f : faults) {
        for (Expr ide : f.faultOutputMap.keySet()) {
            id = AgreeUtils.getExprRoot(ide).id;
            addIdToMap(outputMap, ide, id, f);
        }
    }
    return outputMap;
}
Also used : RecordAccessExpr(jkind.lustre.RecordAccessExpr) UnaryExpr(jkind.lustre.UnaryExpr) Expr(jkind.lustre.Expr) IntExpr(jkind.lustre.IntExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) BoolExpr(jkind.lustre.BoolExpr) BinaryExpr(jkind.lustre.BinaryExpr) ArrayAccessExpr(jkind.lustre.ArrayAccessExpr) IdExpr(jkind.lustre.IdExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) HashMap(java.util.HashMap) List(java.util.List) ArrayList(java.util.ArrayList) EList(org.eclipse.emf.common.util.EList) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) BaseFault(edu.umn.cs.crisys.safety.analysis.transform.BaseFault) Fault(edu.umn.cs.crisys.safety.analysis.transform.Fault)

Example 4 with Fault

use of edu.umn.cs.crisys.safety.analysis.transform.Fault in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method findFaultInCompInst.

/**
 * Identify the fault associated with a ComponentInstance given the fault name
 * and the component path.
 *
 * @param faultName      Name of fault to be found
 * @param faultComp_Path Component instance path
 * @return Fault with name matching string.
 */
public BaseFault findFaultInCompInst(String faultName, NamedElement faultComp_Path) {
    List<ComponentInstance> compInsts = new ArrayList<ComponentInstance>(faultMap.keySet());
    for (ComponentInstance compInst : compInsts) {
        if (compInst.getName().equals(faultComp_Path.getName())) {
            List<Fault> faults = new ArrayList<Fault>(faultMap.get(compInst));
            for (Fault fault : faults) {
                if (fault.name.equals(faultName)) {
                    return fault;
                }
            }
        }
    }
    compInsts = new ArrayList<ComponentInstance>(hwfaultMap.keySet());
    for (ComponentInstance compInst : compInsts) {
        if (compInst.getName().equals(faultComp_Path.getName())) {
            List<HWFault> hwfaults = new ArrayList<HWFault>(hwfaultMap.get(compInst));
            for (HWFault hwfault : hwfaults) {
                if (hwfault.name.equals(faultName)) {
                    return hwfault;
                }
            }
        }
    }
    return null;
}
Also used : ComponentInstance(org.osate.aadl2.instance.ComponentInstance) ArrayList(java.util.ArrayList) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) BaseFault(edu.umn.cs.crisys.safety.analysis.transform.BaseFault) Fault(edu.umn.cs.crisys.safety.analysis.transform.Fault) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault)

Example 5 with Fault

use of edu.umn.cs.crisys.safety.analysis.transform.Fault in project AMASE by loonwerks.

the class AddFaultsToNodeVisitor method addAsymFaultAssertions.

/**
 * Method adds assertions associated with the asym fault event. Adds triggers
 * for the communication node faults: __fault__trigger__Sender__fault_1 : bool;
 * Adds trigger expression linking fault of sender node to the comm node
 * behavior: output = if __fault__trigger__Sender__fault_1 then
 * Sender__fault_1__node__val_out else __fault__nominal__output
 *
 * @param nb NodeBuilder that will have these assertions added.
 */
private void addAsymFaultAssertions(AgreeNodeBuilder nb) {
    // List of idExpr holding dep ids and list for indep ids
    List<Expr> triggerList = new ArrayList<>();
    for (Fault fault : mapAsymFaultToCommNodes.keySet()) {
        for (String nodeName : mapAsymFaultToCommNodes.get(fault)) {
            // Create trigger statements for each of the faults comm nodes
            IdExpr trigger = new IdExpr(nodeName + "__fault__trigger__" + fault.id);
            triggerList.add(trigger);
        }
        // Create trigger expression that links fault of sender node to comm node
        // trigger.
        String compName = mapAsymFaultToCompName.get(fault);
        IdExpr trigger = new IdExpr(compName + "__fault__trigger__" + fault.id);
        Expr bigOrExpr = buildBigOrExpr(triggerList, 0);
        Expr notBigOrExpr = new UnaryExpr(UnaryOp.NOT, bigOrExpr);
        Expr ifThenElse = new IfThenElseExpr(trigger, bigOrExpr, notBigOrExpr);
        nb.addAssertion(new AgreeStatement("", ifThenElse, this.topNode.reference));
        triggerList.clear();
    }
}
Also used : AgreeStatement(com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement) RecordAccessExpr(jkind.lustre.RecordAccessExpr) UnaryExpr(jkind.lustre.UnaryExpr) Expr(jkind.lustre.Expr) IntExpr(jkind.lustre.IntExpr) NodeCallExpr(jkind.lustre.NodeCallExpr) BoolExpr(jkind.lustre.BoolExpr) BinaryExpr(jkind.lustre.BinaryExpr) ArrayAccessExpr(jkind.lustre.ArrayAccessExpr) IdExpr(jkind.lustre.IdExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr) IdExpr(jkind.lustre.IdExpr) ArrayList(java.util.ArrayList) HWFault(edu.umn.cs.crisys.safety.analysis.transform.HWFault) BaseFault(edu.umn.cs.crisys.safety.analysis.transform.BaseFault) Fault(edu.umn.cs.crisys.safety.analysis.transform.Fault) UnaryExpr(jkind.lustre.UnaryExpr) IfThenElseExpr(jkind.lustre.IfThenElseExpr)

Aggregations

BaseFault (edu.umn.cs.crisys.safety.analysis.transform.BaseFault)14 Fault (edu.umn.cs.crisys.safety.analysis.transform.Fault)14 HWFault (edu.umn.cs.crisys.safety.analysis.transform.HWFault)14 ArrayList (java.util.ArrayList)10 IdExpr (jkind.lustre.IdExpr)6 AgreeNode (com.rockwellcollins.atc.agree.analysis.ast.AgreeNode)4 AgreeVar (com.rockwellcollins.atc.agree.analysis.ast.AgreeVar)4 HashMap (java.util.HashMap)4 List (java.util.List)4 ArrayAccessExpr (jkind.lustre.ArrayAccessExpr)4 BinaryExpr (jkind.lustre.BinaryExpr)4 BoolExpr (jkind.lustre.BoolExpr)4 Expr (jkind.lustre.Expr)4 IfThenElseExpr (jkind.lustre.IfThenElseExpr)4 IntExpr (jkind.lustre.IntExpr)4 NodeCallExpr (jkind.lustre.NodeCallExpr)4 RecordAccessExpr (jkind.lustre.RecordAccessExpr)4 UnaryExpr (jkind.lustre.UnaryExpr)4 EList (org.eclipse.emf.common.util.EList)4 AgreeStatement (com.rockwellcollins.atc.agree.analysis.ast.AgreeStatement)3