其实际,PLC就是一个完整bai的单片机系统du,你可以把它形像化为一zhi个功能专一的单片机开发板dao.
这个单片机开发板由电源+单片机+继电器或MOS管+端子等等组成.
现在的PLC,多用32位单片机,也有16位,早很多年前的PLC,还有用8位的,比如西门子曾经用的是51单片机.
而梯形图烧录到PLC后内正常运行,是因为PLC的开发软件,把梯形图通过电脑运算,转换成了二进制的机器语言,然后烧录的PLC内部的单片机或者PLC内部的Flash里去了,这点,和你用单片机编程没有什么特别区别.
而你在编写单片机的时候,一般来说是需要硬件图的,我说的是一般,有一种情况不用,那就是,有人把单片机的底层给编写好的,你不需要关心底层驱动是怎么实现的,只需要知道怎么用就行了.在这种情况下,你不需要知道硬件如何实现,就不需要看硬件电路.
举例:
unsigned char Output_Y00 = 0,Output_Y01 = 0;
//-----这是底层函数-------------------------------------
void Output_Process(void)
{
if(Output_Y00) P1_0 = 0;//---打开第一路输出
else P1_0 = 1;//---关闭第一路输出
if(Output_Y01) P1_4 = 0;//---打开第二路输出
else P1_4 = 1;//---关闭第二路输出
}
上面的例子,在编程的时候,如果是分层编程,即一个人写逻辑,一个人写底层,你是看不到那个
Output_Process()的存在的,因为编写底层的人给封装起来了,你可能只看到一个库.
但是他同时也给你留下了接口,就是 Output_Y00,Output_Y01,你通过这两个变量,就能操作
输出口的驱动,同样的道理,什么AD,DA,串口,都是一个样,把底层封装起来,然后由另一个人操作接口变量就行了
这就是单片机分层编程的概念.
而PLC也是基于这种概念,PLC厂商已经把底层做好,并且封装起来了,你在电脑上的梯形图,只是做逻辑控制,等你做好了,翻译成特定的代码,再联合厂商做好的底层,一直编译成二进制机器码,下载到PLC的单片机里.
编程bai语言是思想不一样。梯形图是拷贝继电器系du统而来的,它用的最多的是常开zhi、常闭等dao通断概念。C语言可是没有导通,关闭,常开、常闭的东西。梯形图里有步进指令,并行处理等,C语言里没有。为什么单片机不那样做?那你得问问什么PLC要那么做了。因为它最初设计出来是给电工看的,就是那些懂继电器系统的工程师,但是它们不懂什么计算机语言啊,而单片机就不同了,懂得单片机的几乎都懂计算机,没有人再去学继电器系统。如果你要问为什么PLC不用C语言编写程序,我觉得这确实是一个值得讨论的问题。