{"id":13568963,"url":"https://github.com/br-automation-com/SafeDODiag","last_synced_at":"2025-04-04T05:30:57.870Z","repository":{"id":43327185,"uuid":"427163979","full_name":"br-automation-com/SafeDODiag","owner":"br-automation-com","description":"Diagnose single- and dual-channel X20SOx1x0 outputs","archived":false,"fork":false,"pushed_at":"2023-08-11T01:04:49.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-05T01:34:41.324Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/br-automation-com.png","metadata":{"files":{"readme":"readme.txt","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-11-11T22:43:10.000Z","updated_at":"2021-12-04T02:46:44.000Z","dependencies_parsed_at":"2024-01-14T03:47:47.722Z","dependency_job_id":"216a17d8-c575-4cbe-9244-a4315251dc82","html_url":"https://github.com/br-automation-com/SafeDODiag","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/br-automation-com%2FSafeDODiag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/br-automation-com%2FSafeDODiag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/br-automation-com%2FSafeDODiag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/br-automation-com%2FSafeDODiag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/br-automation-com","download_url":"https://codeload.github.com/br-automation-com/SafeDODiag/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247128698,"owners_count":20888232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T14:00:34.014Z","updated_at":"2025-04-04T05:30:57.546Z","avatar_url":"https://github.com/br-automation-com.png","language":"Smalltalk","funding_links":[],"categories":["Safety / OpenSafety"],"sub_categories":["based on mapp"],"readme":"SafeDODiag is an Automation Studio library that monitors for errors when energizing single- or dual-channel safe digital output. This library is compatible with Safety Release and mapp Safety, and X20SO21x0, X20SO41x0, and X20SO6xx0 hardware are currently supported.\n\nTo use, simply clone this repository to your computer and drag the SafeDODiag folder into your Automation Studio project's Libraries folder.\n\nThe SODiagDemo folder is a cyclic task example that shows how to configure the function block inputs. You don't need the SODiagDemo folder in your project.\n\n\n[Background]\nThere are several options for monitoring if a pair of safety contactors (wired in series) or a single safe digital output is operating as intended:\n- use a SF_EDM function block in the SafeDESIGNER code and pass the DiagCode back to the gray PLC\n- wire contactor/actuator feedbacks to (safe) digital input channels (feedback state and output state need to be opposite of each other) and check the feedbacks in the gray PLC\n- check X20SOxxx0 safe digital output channels' CurrentOK status in the gray PLC\n- (for Safety Release) enable X20SOxxx0's \"Restart inhibit state information\" and check each channel's FBK_Status_1 value in the gray PLC;\n  (for mapp Safety) enable X20SOxxx0's \"State number for start interlock on error\" and check each channel's FBOutputStateXXYY value in the gray PLC\nThis library simplifies the use of these monitoring options by combining them into a single function block with configurable monitoring options.\n\n\n[Implementation]\nSContactor fub is designed for operating two safety contactors in series, but the fub can be used for dual-channel safe digital output control such as dual-channel axis STO.\nSDigitalOut fub is designed for operating one safe digital output channel, such as a gas dump valve.\nBoth fubs have four prioritized monitoring options:\n1. Config.DiagCode: SF_EDM DiagCode from safety CPU – if this monitoring config is enabled, external feedback monitoring and SO card's internal CurrentOK monitoring will be ignored (highest priority).\n2. Config.Fdbk: external contactor state monitoring (using SafeDigitalInput0X from SI card) – this config should only be used if SF_EDM DiagCode cannot be used, e.g. if PLKbandwidth is at a premium and we cannot afford to transmit SF_EDM DiagCode.\n3. Config.Current: SO channel's built-in wiring monitoring (using CurrentOK0X from SO card) – this config should only be used if feedback cannot be used, e.g. controlling dual-channel STO of a VFD (lowest priority).\n4. Config.InterlockState: SO channel's output interlock state monitoring (using FBK_Status_1 or FBOutputStateXXYY from SO card) – this config only informs why outputs do not energize, i.e. whether grayCPU doesn't request output or safety CPU doesn't permit output (in parallel to other options).\nInterface mapping recommendations:\n1. Assign the Status.SafetyResetRequested fub output directly to an IO output variable that uses a BOOL10x channel on the safety CPU to reset SF_EDM error. This request should only be used to reset SF_EDM errors and nothing else.\n2. Pass into the pSO_Out_... fub inputs the ADR of the IO output variables described in the Function Block Interface section, and do not manipulate the IOSP output variables in the task that calls this fub.\n3. Pass into the pSO_In_... / pSI_In_... fub inputs the ADR of the IO input variables described in the Function Block Interface section. The only reason we ask for the ADR of the input variables (instead of the values of the input variables) is to allow the fub to verify these inputs are connected for monitoring.\n\n\n[Function Block Interface (semi-color separated tables)]\nRequired Inputs; Data Types; Descriptions\nCmd.OutputRequest;\tBOOL;\tProcess control enable request. TRUE - close the contactors / FALSE - open the contactors.\nCmd.Reset;\tBOOL;\tUser reset request. Remove this fub from its error state and request a reset of safety CPU's SF_EDM.\npSO_Out_Contactor1;\tReference to BOOL;\t(SContactor only) ADR of the IO output variable that maps to the SO card's DigitalOutput0X for contactor coil 1. When processing an OutputRequest, this fub expects to toggle contactor coil 1's IO variable directly.\npSO_Out_Contactor2;\tReference to BOOL;\t(SContactor only) ADR of the IO output variable that maps to the SO card's DigitalOutput0Y for contactor coil 2. When processing an OutputRequest, this fub expects to toggle contactor coil 2's IO variable directly.\npSO_Out_DigitalOut;\tReference to BOOL;\t(SDigitalOut only) ADR of the IO output variable that maps to the SO card's DigitalOutput0X. When processing an OutputRequest, this fub expects to toggle the safe digital output's IO variable directly.\npSO_In_SafeModuleOK;\tReference to BOOL;\tADR of the IO input variable that maps to the SO card's input SafeModuleOK. If monitoring outputs' interlock states or CurrentOK states, this is used to check if the SO card has entered operational mode (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSO_In_Output1PhysicalState;\tReference to BOOL;\t(SContactor only) ADR of the IO input variable that maps to the SO card's input PhysicalState0X. This checks if the output for contactor coil 1 has actually energized (gray CPU requests output + safety CPU permits output) (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSO_In_Output2PhysicalState;\tReference to BOOL;\t(SContactor only) ADR of the IO input variable that maps to the SO card's input PhysicalState0Y. This checks if the output for contactor coil 2 has actually energized (gray CPU requests output + safety CPU permits output) (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSO_In_OutputPhysicalState;\tReference to BOOL;\t(SDigitalOut only) ADR of the IO input variable that maps to the SO card's input PhysicalState0X. This checks if the safe digital output channel has actually energized (gray CPU requests output + safety CPU permits output) (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\n\nEssential Outputs;\tDataTypes;\tDescriptions\nStatus.OutputRequested;\tBOOL;\tTRUE - both pSO_Out_Contactor1 and pSO_Out_Contactor2 are commanded to TRUE (or pSO_Out_DigitalOut is commanded to TRUE) / FALSE - either pSO_Out_Contactor1 or pSO_Out_Contactor2 is FALSE (orpSO_Out_DigitalOut is FALSE).\nStatus.OutputActive;\tBOOL;\tTRUE - both pSO_In_Output1PhysicalState andpSO_In_Output2PhysicalState are reporting TRUE (orpSO_In_OutputPhysicalState is reporting TRUE) / FALSE - either pSO_In_Output1PhysicalState orpSO_In_Output2PhysicalState is FALSE (or pSO_In_OutputPhysicalState isFALSE) / special case - if only one of these two SContactor fub inputs is mapped (thus the SContactor fub in error state), this output shows the reported value of the mapped input.\nStatus.SafetyResetRequested;\tBOOL;\tThis signals an automatic SF_EDM reset request after gray CPU reboot. This also passes through the user reset request on the input interface.\nError;\tBOOL;\tThis signals a fub error that requires a user reset request.\n\nInputs to Enable Monitoring of SF_EDM DiagCode;\tData Types;\tDescriptions\nConfig.DiagCode.EnableMon;\tBOOL;\tEnable the use of SF_EDM DiagCode from safetyCPU to monitor contactor operation (if this monitoring config is enabled, all other monitoring configs will be ignored).\nConfig.DiagCode.StartDelayTime;\tTIME (defaultT#3s);\tAfter SI card shows SafeModuleOK , this sets the amount of time this fub will delay checkingSF_EDM fub DiagCode (must be \u003e SF_EDM MonitorTime to allow SF_EDM to produce a stabilized DiagCode).\nConfig.DiagCode.ResetDelayTime;\tTIME (defaultT#1s);\tAfter DiagCode shows 16#C060 , this sets the amount of time this fub will delay requesting to reset SF_EDM fub (to allow channel diagnosis to complete and contactor feedbacks to show TRUEafter SI card reports SafeModuleOK).\npSF_In_DiagCode;\tReference toUINT;\tADR of the IO input variable that maps to the safety CPU's UINT00x channel that transmits the SF_EDM fub's DiagCode. This is used to check if safety CPU's SF_EDMerroneously believes the contactors were closed(feedbacks = FALSE) following a gray CPU reboot,so this fub can automatically request a reset ofSF_EDM. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_SafeModuleOK;\tReference toBOOL;\tADR of the IO input variable that maps to the SI card's input SafeModuleOK. For safety CPU's SF_EDM to work, there must bean SI card that reads contactor feedbacks. This is used to check if the SI card has entered operational mode. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_Contactor1Fdbk;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SI card's input SafeDigitalInput0X. This checks if contactor coil 1 is open (feedback =TRUE) or closed (feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_Contactor2Fdbk;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SI card's input SafeDigitalInput0Y. This checks if contactor coil 2 is open (feedback =TRUE) or closed (feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_DigitalOutFdbk;\tReference toBOOL;\t(SDigitalOut only) ADR of the IO input variable that maps to the SI card's input SafeDigitalInput0X. This checks if the safety device connected to the safe digital output is de-activated (feedback =TRUE) or activated (feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\n\nInputs to EnableMonitoring of ContactorFeedbacks;\tData Types;\tDescriptions\nConfig.Fdbk.EnableMon;\tBOOL;\tEnable the use of contactor feedbacks from SI card to monitor contactor operation. (This config should only be used if SF_EDM DiagCodecannot be used, e.g. if PLK bandwidth is at a premium.)\nConfig.Fdbk.StartDelayTime;\tTIME (defaultT#3s);\tAfter SI card shows SafeModuleOK , this sets the amount of time this fub will delay checking contactor feedbacks (to allow channel diagnosis to complete and contactor feedbacks to show TRUE after SI card reports SafeModuleOK).\nConfig.Fdbk.MonitorTime;\tTIME (required,must be \u003c=T#1s);\tThis sets the amount of time the gray CPU fub will delay comparing contactor feedbacks to allow for switching time and debounce.\npSI_In_SafeModuleOK;\tReference toBOOL;\tADR of the IO input variable that maps to the SIcard's input SafeModuleOK. For contactor feedback to work, there must be an SIcard that reads contactor feedbacks. This is used to check if the SI card has entered operational mode. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_Contactor1Fdbk;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SIcard's input SafeDigitalInput0X. This checks if contactor coil 1 is open (feedback =TRUE) or closed (feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_Contactor2Fdbk;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SIcard's input SafeDigitalInput0Y. This checks if contactor coil 2 is open (feedback =TRUE) or closed (feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSI_In_DigitalOutFdbk;\tReference toBOOL;\t(SDigitalOut only) ADR of the IO input variable that maps to the SIcard's input SafeDigitalInput0X. This checks if the load connected to the safe digital output is de-activated (feedback = TRUE) or activated(feedback = FALSE). (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\n\nInputs to EnableMonitoring of OutputCurrentOK;\tData Types;\tDescriptions\nConfig.Current.EnableMon;\tBOOL;\tEnable the use of CurrentOK from SO card to monitor if outputs are wired up – only available on X20SOx110 andX20SOx120 (This config should only be used if feedbacks cannot be used, e.g. controlling dual-channel STO of a VFD.)\nConfig.Current.MonitorTime;\tTIME (required, must be \u003c=T#1s);\tThis sets the amount of time the gray CPU fub will delay checking SO card current output levels (to allow transient currents to settle).\npSO_In_Output1CurrentOK;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SOcard's input CurrentOK0X. This checks if there is a reasonable amount of current flow(50 mA to 500 mA) from the SO card to contactor coil 1 – if output is not enabled or if the channel is not wired up,CurrentOK shows FALSE. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSO_In_Output2CurrentOK;\tReference toBOOL;\t(SContactor only) ADR of the IO input variable that maps to the SOcard's input CurrentOK0Y. This checks if there is a reasonable amount of current flow(50 mA to 500 mA) from the SO card to contactor coil 2 – if output is not enabled or if the channel is not wired up,CurrentOK shows FALSE. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\npSO_In_OutputCurrentOK;\tReference toBOOL;\t(SDigitalOut only) ADR of the IO input variable that maps to the SOcard's input CurrentOK0X. This checks if there is a reasonable amount of current flow(50 mA to 500 mA) from the SO card to the load connected to the safe digital output – if output is not enabled or if the channel is not wired up, CurrentOK shows FALSE. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\n\nInputs to Enable Monitoring ofOutput Interlock States;\tData Types;\tDescriptions\nConfig.Interlock.EnableMon;\tBOOL;\tEnable the use of FBK_Status_1 / FBOutputStateXXYY from SO card to monitor if outputs are energized – only implemented to support X20SOx110 andX20SOx120. (This config only informs why outputs do not energize, i.e. whether gray CPU doesn't request output or safety CPU doesn't permit output.)\nConfig.Interlock.ChannelPairSelector;\tUSINT;\t(SContactor only) Selector for which byte of the output interlock channel represents the contactor pair (1 -contactor pair is on SO card channels 1 \u0026 2; 3 -contactor pair is on SO card channels 3 \u0026 4;0/2/4/etc. - selection invalid).\nConfig.Interlock.ChannelSelector;\tUSINT;\t(SDigitalOut only) Selector for which byte of the output interlock channel represents the contactor pair (1-4 - load is on SO card channels 1-4; 0/5+ - selection invalid).\nConfig.Interlock.StartDelayTime;\tTIME (defaultT#3s);\tAfter SO card shows SafeModuleOK , this sets the amount of time this fub will delay checking output interlock states (to allow channel diagnosis to complete after SO card reportsSafeModuleOK).\nConfig.Interlock.DiscrepancyTime;\tTIME (required,must be \u003c=T#1s);\tThis sets the amount of time the gray CPU fub will delay comparing interlock states' discrepancy.\npSO_In_OutputInterlockStates;\tReference toUINT;\tADR of the IO input variable that maps to the SO card's \"Restart inhibit state information\" input FBK_Status_1 / \"State number for start interlock on error\" input FBOutputStateXXYY. This is used to check the output interlock state of every SO card channel (each channel is represented by 1 nibble in the range of 16#0 -16#F) – only implemented to supportX20SOx110 and X20SOx120. (Requiring ADR of the IO variable allows the fub to check if this input has been connected.)\n\nDiagnosticOutputs;\tDataTypes;\tDescriptions\nDiagCode;\tUINT;\tThis passes through the SF_EDM fub's DiagCode when CfgDiagCode monitoring is enabled. This shows supplemental diagnostic codes when other modes of contactor monitoring are used.\nDiag.DiagText;\tSTRING[79];\tThis provides guidance on what the output is doing/waiting on or why an error occurs.\nDiag.ErrorConfig;\tBOOL;\tThis signals an invalid fub input config.\nDiag.ErrorSafeFub;\tBOOL;\tThis signals either a contactor operation error detected by safety CPU's SF_EDM or an SF_EDM code administration error–seeDiag.DiagText for guidance.\nDiag.ErrorFdbk;\tBOOL;\tThis signals a timeout error during the switching of contactor feedback signals.\nDiag.ErrorCurrent;\tBOOL;\tThis signals a timeout error during the switching of SO card output current levels.\nDiag.ErrorInterlock;\tBOOL;\tThis signals either an output interlock error detected by the SO card or a two-channel discrepancy during the switching of output interlock states.\n\nSimulation;\tData Types;\tDescriptions\nCmd.Simulation.EnableSim;\tBOOL;\tStop the fub from monitoring real inputs and setting real outputs (all outputs get disabled). Start populating the Simulation output with simulated input and output values.\nCmd.Simulation.SimMonitorErrors;\tUSINT;\tEach bit (when set to TRUE) simulates the following hardware condition:\n\t0: output 1 blocked by safety (interlock)\n\t1: output 2 blocked by safety (interlock) – for SDigitalOut fub, this bit acts the same as bit 0\n\t2: output 1 wire break (current)\n\t3: output 2 wire break (current) – for SDigitalOut fub, this bit acts the same as bit 2\n\t4: fdbk 1 stuck on high/\"contactor open\" (fdbk)\n\t5: fdbk 2 stuck on high/\"contactor open\" (fdbk) – for SDigitalOut fub, this bit acts the same as bit 4\n\t6: fdbk 1 stuck on low/\"contactor closed\" (fdbk)\n\t7: fdbk 2 stuck on low/\"contactor closed\" (fdbk) – for SDigitalOut fub, this bit acts the same as bit 6\nSimulation.Input;\tSContactor_SimInputs_TYP;\tDisplay the simulated behavior of all input channels that may be connected to the fub.\nSimulation.Output;\tSContactor_SimOutput_TYP;\tDisplay the simulated behavior of all output channels that may be connected to the fub.\n\n\n[DiagCodes and DiagTexts]\nSeverity;\tDiagCode;\tInherited from safety CPU's SF_EDM;\tDiagText;\tExplanation\nError;\t49152 or 16#C000;\tNo;\tSafeFubCommTimeout;\tAfter safety becomes operational (in gray CPUit should be indicated by the contactor feedbacks' SI card reporting SafeModuleOK),SF_EDM DiagCode readback stays at 0 after startup comm timeout.\nError;\t49153 or 16#C001;\tYes;\tPosReset;\t\nError;\t49168 or 16#C010;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk1;\t\nError;\t49169 or 16#C011;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk1PosReset;\t\nError;\t49184 or 16#C020;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk2;\t\nError;\t49185 or 16#C021;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk2PosReset;\t\nError;\t49200 or 16#C030;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk1Fdbk2;\t\nError;\t49201 or 16#C031;\tYes;\tSameTimePosEdgeOutReqNegEdgeFdbk1Fdbk2PosReset;\t\nError;\t49216 or 16#C040;\tYes;\tNegFdbk1AfterNegOutReq;\tAfter output request turns off, contactor 1 stays closed (fdbk inactive) by timeout.\nError;\t49217 or 16#C041;\tYes;\tNegFdbk1PosResetAfterNegOutReq;\t\nError;\t49232 or 16#C050;\tYes;\tNegFdbk2AfterNegOutReq;\tAfter output request turns off, contactor 2 stays closed (fdbk inactive) by timeout.\nError;\t49233 or 16#C051;\tYes;\tNegFdbk2PosResetAfterNegOutReq;\t\nError;\t49248 or 16#C060;\tYes;\tNegFdbk1Fdbk2AfterNegOutReq;\tAfter output request turns off, both contactors stay closed (fdbk inactive) by timeout.\nError;\t49249 or 16#C061;\tYes;\tNegFdbk1Fdbk2PosResetAfterNegOutReq;\t\nError;\t49264 or 16#C070;\tYes;\tPosFdbk1AfterPosOutReq;\tAfter output request turns on, contactor 1 stays open (fdbk active) by timeout.\nError;\t49265 or 16#C071;\tYes;\tPosFdbk1PosResetAfterPosOutReq;\t\nError;\t49280 or 16#C080;\tYes;\tPosFdbk2AfterPosOutReq;\tAfter output request turns on, contactor 2 stays open (fdbk active) by timeout.\nError;\t49281 or 16#C081;\tYes;\tPosFdbk2PosResetAfterPosOutReq;\t\nError;\t49296 or 16#C090;\tYes;\tPosFdbk1Fdbk2AfterPosOutReq;\tAfter output request turns on, both contactors stay open (fdbk active) by timeout.\nError;\t49297 or 16#C091;\tYes;\tPosFdbk1Fdbk2PosResetAfterPosOutReq;\t\nError;\t49409 or 16#C101;\tNo;\tStartResetTimeout;\tAfter gray CPU bootup, contactor feedbacks stay FALSE (inferring contactors closed) orSF_EDM has not reset after startup reset timeout.\nError;\t49425 or 16#C111;\tYes;\tSameTimePosEdgeOutReqPosEdgeReset;\t\nError;\t49728 or 16#C240;\tNo;\tPosCurrentOk1fterNegOutReq;\t\nError;\t49744 or 16#C250;\tNo;\tPosCurrentOk2AfterNegOutReq;\t\nError;\t49760 or 16#C260;\tNo;\tPosCurrentOk1CurrentOK2AfterNegOutReq;\t\nError;\t49776 or 16#C270;\tNo;\tNegCurrentOk1AfterPosOutReq;\tSafeDO card output channel 1 (or other odd number channels) not wired to contactor 1control input.\nError;\t49792 or 16#C280;\tNo;\tNegCurrentOk2AfterPosOutReq;\tSafeDO card output channel 2 (or other odd number + 1 channels) not wired to contactor 2control input.\nError;\t49808 or 16#C290;\tNo;\tNegCurrentOk1CurrentOK2AfterPosOutReq;\tSafeDO card output channels not wired to contactor pair control inputs.\nError;\t49920 or 16#C300;\tNo;\tSafeDOCardOkTimeout;\tEquivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#0 for the channel.\nError;\t49921 or 16#C301;\tNo;\tSafeDOCardOutput1PosReleaseBeforePosEdgePermissioin;\tReleaseOutput already active whenSafeDigitalOutput for channel 1 activates (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#6 for output channel 1's interlock state).\nError;\t49922 or 16#C302;\tNo;\tSafeDOCardOutput2PosReleaseBeforePosEdgePermissioin;\tReleaseOutput already active whenSafeDigitalOutput for channel 2 activates (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#6 for output channel 2's interlock state).\nError;\t49923 or 16#C303;\tNo;\tSafeDOCardOutputsPosReleaseBeforePosEdgePermissioin;\tReleaseOutput already active whenSafeDigitalOutput for both channels activate (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#6 for both output channels' interlock states).\nError;\t49936 or 16#C310;\tNo;\tSafeDOCardOutput1HwErr;\tHardware error or wiring error on output channel 1 (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#A for output channel 1's interlock state).\nError;\t49937 or 16#C311;\tNo;\tSafeDOCardOutput1SameTimePosEdgePermissionPosEdgeRelease;\tReleaseOutput and SafeDigitalOutput for channel 1 activate at the same time (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#5 for output channel 1's interlock state).\nError;\t49952 or 16#C320;\tNo;\tSafeDOCardOutput2HwErr;\tHardware error or wiring error on output channel 2 (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#A for output channel 2's interlock state).\nError;\t49954 or 16#C322;\tNo;\tSafeDOCardOutput2SameTimePosEdgePermissionPosEdgeRelease;\tReleaseOutput and SafeDigitalOutput for channel 2 activate at the same time (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#5 for output channel 2's interlock state).\nError;\t49968 or 16#C330;\tNo;\tSafeDOCardOutputsHwErr;\tHardware error or wiring error on both output channels (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#A for both output channels' interlock states).\nError;\t49971 or 16#C333;\tNo;\tSafeDOCardOutputsSameTimePosEdgePermissionPosEdgeRelease;\tReleaseOutput and SafeDigitalOutput for both channels activate at the same time (equivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#5 for both output channels' interlock states).\nError;\t49984 or 16#C340;\tNo;\tSafeDOCardPosOutputsNotSameTime;\tThe switching of a pair of safety contactors is expected to happen at the same time programmatically, but one output stays de-energized by timeout. (No diagnostic effort is made to identify which output stays de-energized.)\nError;\t53247 or 16#CFFF;\tNo;\tIndeterminateState or UndocumentedError;\tEquivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing an undocumented value for an output channel's interlock state.\nCfg Error;\t16#F001;\tNo;\tNoSafeDOCardOkADR;\t\nCfg Error;\t16#F002;\tNo;\tNoContactor1OutADR;\t\nCfg Error;\t16#F003;\tNo;\tNoContactor2OutADR;\t\nCfg Error;\t16#F004;\tNo;\tNoOutput1PhysicalStateADR;\t\nCfg Error;\t16#F005;\tNo;\tNoOutput2PhysicalStateADR;\t\nCfg Error;\t16#F010;\tNo;\tNoDiagCodeADR;\t\nCfg Error;\t16#F011;\tNo;\tNoSafeDICardOkADR;\t\nCfg Error;\t16#F012;\tNo;\tNoContactor1FdbkADR;\t\nCfg Error;\t16#F013;\tNo;\tNoContactor2FdbkADR;\t\nCfg Error;\t16#F014;\tNo;\tNoOutput1CurrentOkADR;\t\nCfg Error;\t16#F015;\tNo;\tNoOutput2CurrentOkADR;\t\nCfg Error;\t16#F016;\tNo;\tNoOutputInterlockStateADR;\t\nCfg Error;\t16#F020;\tNo;\tNoStartDelay;\t\nCfg Error;\t16#F021;\tNo;\tStartDelayTooLong;\t\nCfg Error;\t16#F022;\tNo;\tNoResetDelay;\t\nCfg Error;\t16#F023;\tNo;\tResetDelayTooLong;\t\nCfg Error;\t16#F024;\tNo;\tNoMonitorTime;\t\nCfg Error;\t16#F025;\tNo;\tMonitorTimeTooLong;\t\nCfg Error;\t16#F026;\tNo;\tInvalidOutputInterlockChannelPairSelector;\tSafe contactors are expected to be wired in channel pairs, so valid selector values are: 1 for channels 1 \u0026 2, 3 for channels 3 \u0026 4. This fub is currently designed to supportX20SO21x0 and X20SO41x0.\nInformation;\t16#0000;\tNo;\tIndeterminate;\tFunction block status is indeterminate.\nInformation;\t16#0001;\tNo;\tWaitingForSafeDOComm;\t\nInformation;\t16#0002;\tNo;\tWaitingForSafeDIComm;\tSafety has not become operational (in grayCPU it should be indicated by the contactor feedbacks' SI card reporting SafeModuleOK).\nInformation;\t16#0003;\tNo;\tWaitingForSafeFubComm;\t(During init state) After safety becomes operational (in gray CPU it should be indicated by the contactor feedbacks' SI card reportingSafeModuleOK), this code/text is displayed to give SF_EDM fub enough time to completeMonitorTime transition. At the moment of startup comm timeout, SF_EDM fub DiagCode is checked. (After init state) SF_EDM fub is deactivated or comm to safety CPU is lost.\nInformation;\t16#0004;\tNo;\tEnergizing;\tBoth outputs are activated but feedbacks have not confirmed the outputs as enabled. (In existing implementation, outputs are assumedEnergized -- 6#8000 -- as soon as outputs are activated until an error is detected.)\nInformation;\t16#0005;\tNo;\tDe-energizing;\tBoth outputs are deactivated but feedbacks have not confirmed the outputs as disabled. (In existing implementation, outputs are assumedDe-energized -- 6#8110 -- as soon as outputs are deactivated until an error is detected.)\nInformation;\t32768 or 16#8000;\tYes;\tEnergized;\t\nInformation;\t32769 or 16#8001;\tYes;\tRequireStartReset;\t\nInformation;\t32770 or 16#8002;\tNo;\tMayRequireStartReset;\tIf feedback monitoring is used, then thisDiagText is displayed during init state.\nInformation;\t32784 or 16#8010;\tYes;\tRequireOutReq;\tEquivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#7 for an output channel's interlock state.\nInformation;\t33024 or 16#8100;\tNo;\tRequireSafePermission;\tEquivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#8 for an output channel's interlock state.\nInformation;\t33025 or 16#8101;\tNo;\tRequireSafeRelease;\tEquivalent to SafeDO card FBK_Status_1 / FBOutputStateXXYY showing 16#4 for an output channel's interlock state.\nInformation;\t33040 or 16#8110;\tNo;\tDe-energized;\tIf requirements to energize outputs are not known (because of limitations of feedback monitoring, current monitoring, or no monitoring), then this DiagText is displayed during disabled state.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbr-automation-com%2FSafeDODiag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbr-automation-com%2FSafeDODiag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbr-automation-com%2FSafeDODiag/lists"}