Closed brlarson closed 9 years ago
This is not a bug: Actual_Connection_Binding must be used in a contained property association. The reference value cannot be resolved if it's written at the connection declaration. We had a bug that allowed this (which we fixed a couple of weeks ago), but the AADL standard does not. Just put the connection bindings in the properties section of wrap_pca.imp: Actual_Connection_Binding => (reference(a_bus)) applies to co; etc. The error message is misleading, though.
this: co: feature group pump.command<->bus_adaptor.command_inv {Actual_Connection_Binding=>(reference(a_bus));}; produces error message: Couldn't resolve reference to property constant 'a_bus'. Property set name may be missing.
but 'a_bus' is not a property constant: a_bus : bus adaptor_bus;
full text of component: system wrap_pca features --EXTERNAL EFFECT --drug infused into patient Infused_Drug : out data port Physical_Types::Fluid_Flow {BLESS::Assertion=>"<<:=INFUSION_RATE>>";}; --infusion rate into patient is value of Infused_Drug port --EXTERNAL PHENOMENON Button_Press: in event port; --physically depressing the button --EXTERNAL EFFECT LightToEye: out data port; --image seen by clinician --EXTERNAL PHENOMENON
Finger_Press: in event data port; --clinician touches screen --EXTERNAL EFFECT Sound: out data port; --noise made by speaker, heard by clinician --bus access to ICE network
to_ice: requires bus access ICE::Ice_Network;
--jack maintenance_jack: requires bus access PCA_Context::Maintenance_Bus; --undermined maintenance protocol --signals with ICE app app_signals: feature group PCA_Pump::PCA5; --feature group of 5 feature groups --signals with technician software to_tech: feature group Maintenance_Signals; end wrap_pca;
--two subcomponents for PCA behavior and ICE network adaptor system implementation wrap_pca.imp subcomponents bus_adaptor: system PCA_System::ice_bus_adaptor.imp; pump: system PCA_Pump::pca.imp; maint : device PCA_System::maintenance.imp; a_bus : bus adaptor_bus; im_bus : bus internal_maintenance_bus; connections --bus connections -- --adaptor ba_to_a_bus: bus access a_bus <-> bus_adaptor.to_pca; p_to_a_bus: bus access a_bus <-> pump.To_Adaptor; -- --maintenance m_to_im_bus: bus access im_bus <-> maint.to_pca; p_to_im_bus: bus access im_bus <-> pump.To_Maintenance; --bus out from adaptor ba: bus access to_ice <-> bus_adaptor.to_ice; as: feature group app_signals<->bus_adaptor.to_app; --bus access to ICE network ic: bus access to_ice->bus_adaptor.to_ice; --jack j: bus access Maintenance_Jack<->maint.Jack; --liquid drug id: port pump.out_Infused_Drug->Infused_Drug; --touch see hear bp: port Button_Press->pump.Patient_Button_Press; lte: port pump.LightToEye->LightToEye; snd: port pump.Sound->Sound; fp: port Finger_Press->pump.Finger_Press; --feature group connections between bus_adaptor and pump co: feature group pump.command<->bus_adaptor.command_inv {Actual_Connection_Binding=>(reference(a_bus));}; pa: feature group pump.parameters<->bus_adaptor.parameters_inv {Actual_Connection_Binding=>(reference(a_bus));}; st: feature group pump.status<->bus_adaptor.status_inv {Actual_Connection_Binding=>(reference(a_bus));}; se: feature group pump.security<->bus_adaptor.security_inv {Actual_Connection_Binding=>(reference(a_bus));}; al: feature group pump.alarm<->bus_adaptor.alarm_inv {Actual_Connection_Binding=>(reference(a_bus));}; --fault & event logs; drug library, infused drug gf: port maint.Get_Fault_Log->pump.in_Get_Fault_Log {Actual_Connection_Binding=>(reference(im_bus));}; tf: port pump.out_The_Fault_Log->maint.The_Fault_Log {Actual_Connection_Binding=>(reference(im_bus));}; ge: port maint.Get_Event_Log->pump.in_Get_Event_Log {Actual_Connection_Binding=>(reference(im_bus));}; te: port pump.out_The_Event_Log->maint.The_Event_Log {Actual_Connection_Binding=>(reference(im_bus));}; ma: feature group maint.to_maintenance_processor<->to_tech; --load drug library through maintenance port dl: port maint.Load_Drug_Library->pump.in_Load_Drug_Library {Actual_Connection_Binding=>(reference(im_bus));}; --provisioning channel pc: feature group maint.Security_Provisioning<->pump.Security_Provisioning {Actual_Connection_Binding=>(reference(im_bus));}; --the error model for a system as a whole deems the system "operational" --if pca works. if either ICE or maintenance fails, the pump still works safely -- properties annex EMV2X {** use types ErrorLibrary, PCA_Error_Model; --when pump still works, it's operational use behavior PCA_Error_Model::CompositeWorkingOperationalFail;
--same error propagations as ui thread error propagations --sound errors Sound: out propagation {ItemOmission,AlarmError,ValueError}; --errors seen by clinician LightToEye: out propagation {ItemOmission,AlarmError,ValueError}; --errors caused by clinician Finger_Press: in propagation {OperatorError};
--must prevent third-party press from becoming drug flow error Button_Press: in propagation {ThirdPartyPress}; end propagations; composite error behavior states --pca pump failed -> failed [pump.failed]->failed; --pump working, either ice or maintenence is down -> operational [pump.working and (bus_adaptor.failed or maint.failed)]->operational; --all working -> working [pump.working and bus_adaptor.working and maint.working]->working;
end composite;
**}; --end of EMV2 end wrap_pca.imp;