Generated from salman_core::clause::REGISTRY. Do not edit by hand; edit the
registry. A test in crates/salman-core/src/clause.rs fails if this file and the
registry disagree.
IEC 61131-3:2013 (Edition 3.0) was withdrawn on 2025-05-22 and superseded by IEC 61131-3:2025 (Edition 4.0). salman targets Edition 3.0 because it is the edition its public sources allow it to verify, and citing an edition salman cannot check would be guessing in a footnote's clothing. Clause numbers are edition-specific — Structured Text is §7.3 in Edition 3.0 and §7.2 in Edition 4.0, and the standard function block tables shift from 43-46 to 44-47 — so a citation without an edition is meaningless. Every entry below carries one.
salman never reproduces the normative text of IEC 61131-3, which is copyrighted and sold by the IEC. Each row states, in salman's own words, the requirement a test checks, and points at the clause, table or figure where the normative wording lives.
The last column names the tests. A citation with no test is not allowed
into the registry: every_citation_names_at_least_one_test fails, and
every_cited_test_exists_in_the_source_tree fails again if a named test
is renamed or deleted. So a row here cannot be decoration, and the way to
retire a clause salman no longer checks is to delete the row, not to let
it stand with nothing behind it.
The standard is paywalled, so numbers have been cross-checked against public secondary sources where that was possible: the publisher's own front-matter preview, which contains the contents and the lists of tables and figures, and vendor implementer compliance statements, which enumerate the feature tables. Rows marked unconfirmed have a title that is reliable and a number that is not: search for the title.
| Citation | Title | Requirement salman tests | Number confirmed by | Tested by |
|---|---|---|---|---|
| IEC 61131-3:2013 §6.3 (Ed 3.0) | Literals – External representation of data | How a value is written literally in source text, for every literal form the languages accept | source | a_typed_literal_carries_the_type_its_prefix_namedliterals_reach_the_tree_with_their_values |
| IEC 61131-3:2013 §6.3.2 (Ed 3.0) | Numeric literals and string literals | Decimal, based and typed numeric literals, underscores as digit separators, and how a literal's type is decided | source | a_misplaced_underscore_is_reportedan_invalid_radix_is_reported_rather_than_guessed_at |
| IEC 61131-3:2013 §6.3.3 (Ed 3.0) | Character string literals | Single and double quoted strings, and the dollar-sign escape that lets a quote, a newline or a byte value appear inside one | source | an_unterminated_string_is_reported_and_does_not_swallow_the_next_linea_multi_byte_character_becomes_whole_code_units_in_a_wstring |
| IEC 61131-3:2013 §6.3.4 (Ed 3.0) | Duration literal | The T# form, the day/hour/minute/second/millisecond unit sequence, and the rule that only the first unit present may overflow its natural range | source | duration_literals_sum_their_unitsthe_first_unit_of_a_duration_may_overflow_but_a_later_one_may_not |
| IEC 61131-3:2013 §6.3.5 (Ed 3.0) | Date and time of day literal | The D#, TOD# and DT# literal forms for a calendar date, a time of day and the two combined | source | date_time_and_date_and_time_literals_parsea_date_that_does_not_exist_is_rejected |
| IEC 61131-3:2013 §6.4 (Ed 3.0) | Data types | What types exist, how they are declared, and what a value of each may hold | source | a_declared_type_resolves_without_complaint |
| IEC 61131-3:2013 §6.4.2 (Ed 3.0) | Elementary data types (BOOL, INT, REAL, STRING, etc.) | The built-in types, their widths and ranges, and the initial value each takes when a declaration does not give one | source | signed_integers_widen_through_the_whole_chaina_typed_literal_whose_value_does_not_fit_is_refused |
| IEC 61131-3:2013 §6.4.3 (Ed 3.0) | Generic data types | The ANY hierarchy that groups elementary types, so an overloaded function can be specified once for a whole family | source | an_operand_outside_the_operators_domain_names_the_generic_type_it_accepts |
| IEC 61131-3:2013 §6.4.4 (Ed 3.0) | User-defined data types | Declaring enumerations, subranges, arrays, structures and type aliases, and how each is initialised | source | a_type_block_holds_aliases_structures_enumerations_subranges_and_arraysenumeration_values_continue_from_the_previous_one_starting_at_zero |
| IEC 61131-3:2013 §6.5 (Ed 3.0) | Variables | Declaring a variable, giving it an initial value, and what its scope and lifetime are | source | a_program_carries_its_variable_blocks_and_its_body |
| IEC 61131-3:2013 §6.5.2 (Ed 3.0) | Variable sections | The VAR keyword families that say whether a variable is local, an input, an output, in-out, global or external, and what each permits | source | every_variable_section_keyword_opens_its_section |
| IEC 61131-3:2013 §6.5.5 (Ed 3.0) | Directly represented variables (%) | The percent-sign address form: its location letter, its size prefix, and its hierarchical numeric part | source | a_hierarchical_direct_address_lexes_as_one_tokenan_address_renders_back_the_way_it_was_written |
| IEC 61131-3:2013 §6.5.6 (Ed 3.0) | Retentive variables (RETAIN, NON_RETAIN) | Which variables keep their value across a power cycle or a warm restart, and which are put back to their initial value | source | retention_defaults_to_unspecified_rather_than_to_retaina_warm_restart_keeps_retain_and_persistent_and_clears_the_rest |
| IEC 61131-3:2013 §6.6 (Ed 3.0) | Program organization units (POUs) | The three units of program structure — function, function block, program — and the declaration features they share | source | two_pous_of_one_name_are_refused_and_the_first_one_wins |
| IEC 61131-3:2013 §6.6.2 (Ed 3.0) | Functions | A callable unit that keeps no state between calls and yields one result, so the same arguments always produce the same value | source | a_function_declares_the_type_of_the_value_it_returnsa_functions_result_type_is_the_type_of_the_call |
| IEC 61131-3:2013 §6.6.3 (Ed 3.0) | Function blocks | A callable unit whose instance keeps its internal state between calls, which is what makes timers, counters and edge detectors expressible | source | a_function_block_has_no_return_typea_user_function_block_is_called_through_its_instance |
| IEC 61131-3:2013 §6.6.4 (Ed 3.0) | Programs | The outermost program unit, which is what a configuration assigns to a task and therefore what actually gets executed | source | a_program_cannot_be_called |
| IEC 61131-3:2013 §6.8 (Ed 3.0) | Configuration elements | How a project is bound to hardware: configurations, the resources inside them, and the global variables and tasks they declare | source | a_configuration_holds_globals_resources_tasks_and_program_instances |
| IEC 61131-3:2013 §6.8.2 (Ed 3.0) | Tasks | Declaring a task by period or by a triggering variable, giving it a priority, and associating programs with it | source | an_event_task_runs_on_a_rising_edge_and_not_otherwise |
| IEC 61131-3:2013 §7.3 (Ed 3.0) | Structured Text (ST) | The textual, block-structured language: its expressions, its statements and its lexical conventions | source | a_small_program_lexes_into_the_expected_tokens |
| IEC 61131-3:2013 §7.3.2 (Ed 3.0) | Expressions | How an ST expression is built and evaluated, including operator precedence and the order operands are taken in | source | or_binds_looser_than_andevery_binary_level_is_left_associative |
| IEC 61131-3:2013 §7.3.3 (Ed 3.0) | Statements | The ST statement forms: assignment, IF and CASE selection, the three loops, calls, EXIT and RETURN | source | if_then_end_if_has_one_branch_and_no_elsewhile_tests_before_the_body_and_repeat_tests_after_it |
| IEC 61131-3:2013 Table 3 (Ed 3.0) | Comments | The comment forms: the line comment, the block comment, and the rows that make block comments nest rather than end at the first close | source | block_comments_nestline_comments_end_at_the_line_break |
| IEC 61131-3:2013 Table 5 (Ed 3.0) | Numeric literals | Every numeric literal form: signed decimals, reals with exponents, base 2, 8 and 16 literals, and the typed literal prefix | source | an_invalid_radix_is_reported_rather_than_guessed_ata_digit_outside_the_radix_is_reported |
| IEC 61131-3:2013 Table 6 (Ed 3.0) | Character string literals | Single quoted and double quoted string literals, including the empty string and the forms used for wide characters | source | wstring_escapes_take_four_hex_digits |
| IEC 61131-3:2013 Table 7 (Ed 3.0) | Two-character combinations in character strings | The dollar-sign escapes that put a quote, a dollar sign, a newline, a tab or a page break inside a string literal | source | string_escapes_follow_table_7an_unknown_escape_is_reported |
| IEC 61131-3:2013 Table 8 (Ed 3.0) | Duration literals | The written forms a duration may take: the keyword or hash prefix, the unit letters, and whether the units may be abbreviated | source | duration_units_must_descendlong_duration_prefixes_are_marked_as_ltime |
| IEC 61131-3:2013 Table 9 (Ed 3.0) | Date and time of day literals | The written forms of a calendar date, a time of day and a combined date and time, with their long and short keywords | source | date_time_and_date_and_time_literals_parsea_date_may_omit_leading_zeros |
| IEC 61131-3:2013 Table 10 (Ed 3.0) | Elementary data types | The keyword, the bit width and the range of values of each built-in type | source | nothing_narrows_implicitlybit_strings_widen_among_themselves |
| IEC 61131-3:2013 Table 16 (Ed 3.0) | Directly represented variables | The letters that make up a direct address: input, output or memory location, and the bit, byte, word, double or long word size | source | every_location_and_size_letter_is_accepteda_partly_specified_address_renders_as_a_star |
| IEC 61131-3:2013 Table 18 (Ed 3.0) | Execution control graphically using EN and ENO | The enable input and enable output that let a call be skipped, and what the outputs hold when it is | source | a_call_with_enable_false_does_not_happen_at_allenable_out_reports_whether_the_call_happened |
| IEC 61131-3:2013 Table 20 (Ed 3.0) | Function call | Calling a function with a formal argument list naming each parameter, or with a positional list, and where each is allowed | source | a_function_takes_positional_or_named_argumentsa_call_may_not_mix_positional_and_named_arguments |
| IEC 61131-3:2013 Table 42 (Ed 3.0) | Function block call | Calling an instance of a function block, passing inputs by name, and reading outputs back off the instance afterwards | source | positional_arguments_to_a_function_block_are_refused_citing_the_call_table |
| IEC 61131-3:2013 Table 43 (Ed 3.0) | Standard bistable function blocks | The set-dominant and reset-dominant latches, and which input decides the output when both are true at once | source | sr_is_set_dominant_when_both_inputs_are_truers_is_reset_dominant_when_both_inputs_are_true |
| IEC 61131-3:2013 Table 44 (Ed 3.0) | Standard edge detection function blocks | The rising and falling edge detectors, whose output is true for exactly the one execution after the input changed | source | r_trig_pulses_for_exactly_one_invocation_on_a_rising_edgef_trig_pulses_on_a_falling_edge |
| IEC 61131-3:2013 Table 45 (Ed 3.0) | Standard counter function blocks | The up, down and up-down counters: when they count, when they load or reset, and when the limit output goes true | source | ctu_counts_rising_edges_only_not_levelsctud_precedence_is_reset_then_load_then_counting |
| IEC 61131-3:2013 Table 46 (Ed 3.0) | Standard timer function blocks | The pulse, on-delay and off-delay timers, their elapsed-time output, and what happens when the input changes mid-interval | source | ton_does_not_fire_earlyton_elapsed_time_is_clamped_at_the_preset |
| IEC 61131-3:2013 Table 52 (Ed 3.0) | Assignment attempt | The checked assignment that succeeds only when the source really is of the target type, and leaves the target alone when it is not | source | an_assignment_attempt_is_parsed_rather_than_refusedthe_assignment_attempt_is_reported_as_not_implemented |
| IEC 61131-3:2013 Table 71 (Ed 3.0) | Operators of the ST language | Every ST operator with its precedence, from parentheses and function calls down to OR, which is what fixes how an unparenthesised expression parses | source | multiplication_binds_looser_than_exponentiationnot_binds_tighter_than_equality |
| IEC 61131-3:2013 Table 72 (Ed 3.0) | ST language statements | Every ST statement form with its syntax: assignment, the calls, IF, CASE, FOR, WHILE, REPEAT, EXIT, CONTINUE and RETURN | source | case_labels_may_be_single_values_lists_or_rangesfor_keeps_its_control_variable_bounds_and_step |
| IEC 61131-3:2013 Figure 11 (Ed 3.0) | Data type conversion rules – implicit and/or explicit (Summary) | The summary of which type conversions happen on their own and which the programmer has to write out as a call | source | nothing_narrows_implicitlya_narrowing_assignment_names_the_conversion_function |
| IEC 61131-3:2013 Figure 12 (Ed 3.0) | Supported implicit type conversions | The graph of conversions a conforming implementation performs without being asked, which is the set salman's type checker must not widen | source | int_widens_to_real_but_dint_does_notno_real_converts_implicitly_to_an_integer |
| IEC 61131-3:2013 Figure 15 (Ed 3.0) | Standard timer function blocks – timing diagrams (Rules) | The timing diagrams that fix, cycle by cycle, what the standard timers do when their input changes during a running interval | source | ton_does_not_accumulate_elapsed_time_across_separate_input_pulseston_falls_immediately_when_its_input_does |