关键词: PLC 可编程控制器 上电停止 串口通信 梯形图 摘要: PLC (可编程控制器)在工业控制中使用非常广泛,型号很多,有一部分 PLC 有上电停止的功能,它们为什么需要这个功能呢?孔丙火(微信公众号:孔丙火)分析了上电停止的具体用途及实现路径,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的 PLC ,上电停止功能是需要的。同时,这种设计,对于单片机的串口通信设计,具有很好的借鉴意义。 1.PLC 与上电停止 PLC 是可编程逻辑控制器( Programmable Logic Controller )的简称,随着技术的不断发展, PLC 已不仅仅在于逻辑控制,因此后来改称为可编程控制器( Programmable Controller ),但由于简称 PC 与个人电脑的简称一样,为了不混淆,依然用 PLC 来简称可编程控制器。从 70 年代第一台 PLC 到目前为止,出现过各种形式的 PLC ,厂家型号众多。你或许用过 PLC ,或许没用过 PLC ,你用的 PLC 或许有上电停止功能,或许没有上电停止功能,那为什么有的 PLC 需要上电停止功能呢。 如图 1 所示,这是某款 PLC 的上电停止功能。 图 1 这是 PLC 编程软件菜单下的一个截图,具体用法是:点击“上电停止 PLC ”,然后把 PLC 断电,通过该款 PLC 指定的可以实现上电停止功能的通信口( 485 或 232 )与计算机连接,然后给 PLC 重新上电,此时编程界面上就会出现“ PLC 上电停止成功”的提示,可以看到 PLC 处于停止状态,且此通信口的通信参数为默认状态(数据手册上标注的上电停止后的通信参数)。 看了上面的描述,孔丙火(微信公众号:孔丙火)相信你对上电停止功能有了一个大概的了解。也许会想,搞得这么啰嗦,有什么用呢,为什么要这样设计呢。 首先,具有上电停止功能的 PLC 不具有启停旋钮,无法通过硬件开关控制 PLC 的启动和停止。至于有的 PLC 为什么不设计启停旋钮,可能是为了节省电路板空间、节省硬件成本,或者其他什么原因,孔丙火(微信公众号:孔丙火)不得而知。没有启停旋钮,要想停止 PLC 的运行,只能通过编程软件进行控制,在计算机与 PLC 正常通信的情况下,可以通过编程软件控制 PLC 的运行与停止。但 PLC 在上电伊始是默认进入运行状态的,要想要 PLC 上电就进入停止状态,就需要上电停止功能,这是上电停止功能的第一个用途。 其次,具有上电停止功能的 PLC 一般不具有专用的编程接口或者专用的编程电缆,任何一个通信口都可以下载程序,同时,任何一个通信口也都可以用作通用的通信口,用户程序可以操作使用。一旦用户把通信口的通信参数改乱了,或者记不清通信参数了,那么计算机上的编程软件就无法与 PLC 通信了, PLC 岂不是变砖了?这个时候,就需要上电停止功能,上电停止成功后,具有上电停止功能的通信口的参数变为默认参数,此时编程软件可以与 PLC 通信,查看当前的通信参数或者修改通信参数,以恢复 PLC 的正常功能。 还有一种情况,这种 PLC 的通信口一般都支持 Modbus 协议,且均支持设置为主站或从站,当所有的通信口都被设置为了主站,主站口会主动向外发数据,此时,程序下载无法完成,因此,在下载程序的时候,需要计算机上的编程软件主动发起数据通信,此时的 PLC 应当相当于从站。这个时候同样需要上电停止功能来解决, PLC 上电伊始便停止运行了,通信口不会再向外发数据,程序下载就可以正常进行了。这是上电停止功能的第二个用途。 总结:孔丙火(微信公众号:孔丙火)认为,对于没有启停旋钮、没有专用编程口或编程电缆、通信口即作为编程口又作为通用口、通信口同时支持主站和从站设置的 PLC ,上电停止功能是需要的,也是必须的,否则 PLC 有可能会变砖。 2. 实现路径分析 孔丙火(微信公众号:孔丙火)做过一些单片机的设计项目,现在很多小型的 PLC 都是用单片机实现,这里就来分析一下 PLC 的上电停止功能的实现路径。 PLC 的程序代码大体可以分为两个部分:固件和用户程序,固件是 PLC 在出厂的时候固化好的,外设、用户程序的解析等功能都在这个部分,用户程序就是用户通过编程软件编写的部分,我们通常写的梯形图程序就属于这个部分。 PLC 上电开始运行,便进入固件部分,然后根据一定的条件,再进入用户程序的运行。 大体猜测一下上电停止的实现方法。 PLC 上电,固件程序开始运行,具有上电停止功能的通信口按照默认参数设置,在这个过程中,检测具有上电停止功能的通信口是否接收到上电停止指令,如果接收到了上电停止指令,则不进入用户程序(即 PLC 处于停止状态),这个时候,编程软件可以建立与 PLC 的通信,可以查看通信口参数,可以修改通信口参数,可以下载或上传程序。如果在一定的时间内(较短时间,例如 500ms )没有收到上电停止指令,则进入用户程序, PLC 正常运行。 有了上面的分析,也就知道了,为什么在执行上电停止的时候,一定要先打开编程软件上的上电停止功能,正确连接 PLC 的通信口,然后才能给 PLC 上电,这样才能确保 PLC 在刚开始运行在固件程序阶段的时候能接收到上电停止指令。 3. 单片机设计借鉴 在涉及到 Modbus 串口通信的单片机项目中,孔丙火(微信公众号:孔丙火)认为,这种上电停止的设计方法是具有借鉴意义的。一般情况下,串口的通信参数是需要开放修改的,修改的方法大致可以分为两种。第一种是通过硬件的方法,在电路上设计一些拨码开关或编码开关,以实现通信参数的设定。第二种方法是通过软件设计,将通信参数存在 flash 或 EEPROOM 中,计算机或 HMI 等设备通过串口通信来改变参数。 对于软件设计的方法,存在两个问题:第一,用户把串口参数改乱或记不清通信参数的情况下,只用重新下载单片机程序,清空 flash 或 EEPROOM ,很不方便;第二,如果串口作为 Modbus 主站口,单片机运行过程中,无法通过串口修改通信参数。 类似 PLC 上电停止功能的设计方法可以很多解决上面两个问题。在我的 FreeModbus 从站设计的系列文章中,后续会有关于上电停止功能的分享,实现一个简单的上电停止功能,以便可以方便地修改通信参数。欢迎持续关注。 文章在公众号( 孔丙火 )同步推出,欢迎查看更多系列文章。 单片机、 ARM 、现场总线、 PLC 、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,以实际项目为单元阐述知识点,一起分享,共同交流。