跳到主要内容

6.3.1 SFC语言简介

6.3.1.1 SFC基础知识

  • SFC提供了一种手段,通过有向连线相互链接一组步(steps)和转换(transitions),实现按照顺控程序的格式编写程序。每个步与一组操作(Actions)相关,而每个转换与转换条件相关。

  • SFC要求储存步等元素的状态信息,天行IDE只支持FB可以用SFC进行编程。 PRG和FC不可以用SFC进行编程

  • 一个SFC结构的网络分为一系列步和转换。它们要循环地进行求值和执行。一个步总是处于激活状态或者不激活状态。每一次循环对所有转换的求值,其结果不是TRUE就是FALSE。待处理循环的活动步清单取决于这些步所依赖的转换的计算值。

注意
  • 步骤(Step)的合理划分
    清晰定义每个步骤:每个步骤应该代表一个明确的控制状态或操作。确保步骤划分得当,避免过于复杂或模糊不清的步骤。
    避免步骤过多或过少:步骤过多会使得程序变得冗长、难以管理,而步骤过少则可能导致程序逻辑不清晰。因此,在设计SFC图时,要平衡步骤的数量,确保逻辑清晰简洁。
  • 转移条件(Transition)设置
    明确转移条件:转移是步骤之间的桥梁,每个转移必须有明确的条件。这些条件应当是可测量和可验证的,避免模糊不清的条件导致逻辑错误。
    条件判断的优先级:如果多个转移条件同时满足,SFC程序应该清晰地定义哪个转移条件优先触发,以防出现优先级冲突。
    避免不必要的复杂条件:过于复杂的转移条件可能导致调试困难和程序运行时的错误,条件应尽量简洁和直观。
  • 步骤的激活与去激活
    正确控制步骤的激活:确保步骤在合适的时间被激活。例如,当步骤执行完毕后,应适时去激活该步骤,以避免它继续占用系统资源。
    避免不必要的重复激活:如果一个步骤不需要重新激活,应当确保它不会被重复激活,防止不必要的系统开销。
  • 并行步骤的使用
    适当使用并行步骤:SFC允许在同一时间并行执行多个步骤,但要注意并行步骤之间的交互和依赖关系,避免出现资源冲突或死锁的情况。
    并行执行的同步问题:在并行执行的步骤之间,如果它们依赖于相同的输入或输出,必须确保它们的同步,以防止竞争条件和冲突。
  • 避免过度复杂的步骤与转移
    模块化设计:避免每个步骤过于复杂,步骤中的操作应简化为独立的小任务。复杂的逻辑可以分拆成多个子步骤或模块,以提高可读性和可维护性。
    简洁的流程设计:尽量避免过多的嵌套步骤和转移,复杂的逻辑可能使得调试和维护变得更加困难。
  • 死锁和无限循环的预防
    避免死锁:SFC中可能出现“死锁”情况,尤其是在步骤之间的转移条件设置不当时。确保每个步骤都有明确的转移条件,并且不会因条件冲突而无法进入下一个步骤。
    防止无限循环:确保在每个步骤或转移中有合适的出口条件,防止程序进入无限循环。每个步骤都应该有明确的结束条件。
  • 事件驱动与时间延迟的处理
    合理使用时间延迟:SFC允许使用定时器(Timer)等来控制时间延迟,但要避免过度依赖时间延迟。过长的延迟可能导致控制响应不及时,而过短的延迟可能导致控制不稳定。
    事件触发控制:尽量使用事件驱动的控制方式,而不是固定的时间间隔,这样可以提高程序的灵活性和实时性。
  • 错误处理机制
    实现故障处理:在每个步骤或转移中,设计适当的错误处理机制。例如,使用错误标志位、故障安全步骤(Fallback Steps)等来确保系统在出现故障时能正确响应。
    异常流程设计:确保在发生异常时,系统能够有序地从错误状态恢复,而不是进入不确定状态。
  • 测试与验证
    逐步验证:在完成SFC程序的设计后,进行单步和逐步调试,验证每个步骤和转移条件是否按预期工作。
    模拟测试:通过仿真工具或者在实际硬件上进行测试,检查程序的逻辑是否正确,确保没有遗漏或错误。
  • 文档与注释
    注释步骤与转移:SFC图的图形化设计虽然直观,但仍然建议对关键步骤、转移条件、输入输出等进行详细的注释,以便于将来的修改和维护。
    文档化设计:对于较复杂的SFC图,最好配合详细的设计文档,描述系统的工作原理、逻辑流程以及每个步骤的功能,方便团队成员之间的协作。