01-C语言实现一个简单PLC仿真小程序(上)

PLC,可编程逻辑控制器(Programmable Logic Controller),这里跳过对这种设备的详细介绍,仅大致说明一下。
PLC最初是为了完成较复杂的继电器控制的替代,随着计算机技术的发展,这种电气逐渐具备执行复杂计算的功能。
目前的PLC内置有完整的系统,可通过计算机编程后将对应程序下载到PLC设备中并执行,主要采用梯形图作为编程语言。按编程风格划分,可大致分为日系、欧系、美系,这三种风格各有优缺点,但大致上是相同的。
以上内容,是为了在不深入研究厂家(如三菱、西门子、AB)的PLC设备的情况下猜测PLC设备的实现方式而进行的一些介绍,更具体的东西不做讨论。

三菱的PLC使用过程:用 梯形图/SFC/指令表 编写程序,编译,连接PLC,下载程序。
1、程序需要编译后才进行下载,推测三菱PLC的程序代码或许是hex或其他非明文的格式;
2、SFC与梯形图可互转换,梯形图与指令表语言可互转换。或者说,完全可以用指令表来编写程序,然后转换为梯形图。推测,三菱PLC的程序是对指令表语言进行编译。

这里有两张图片:


01-C语言实现一个简单PLC仿真小程序(上)_第1张图片
01.PNG
01-C语言实现一个简单PLC仿真小程序(上)_第2张图片
02.PNG

以上两张图片来自三菱FX系列PLC的编程手册。
注意,我们在三菱PLC中常说的指令,如LD、OUT,在说明书中,被称为指令助记符,而每个指令具有对应的 FNC编号。
应该说,FNC编号(个人猜测FNC实际上是 function 的意思)才是指令,而LD、OUT之类的指令是 FNC 指令的助记符。
在三菱PLC中,或许是将指令作为一个函数,通过对函数的调用来执行对应的操作。

于是,三菱PLC的设计原理是:
硬件上,在一块电路板上,核心以一枚单片机作为CPU,围绕该CPU设计了相应的24V转5V(给单片机芯片供电)的供电电路,以光耦隔离实现的输入信号采集功能,以继电器输出或晶体管输出实现的低压控制24V高压的输出电路。最终,为该CPU加入串口(232)通讯模块,该模块用于提供程序下载、PLC与扩展模块、PLC与上位机通讯的功能。
软件上的设计则是,在该CPU上编写好相关的程序,该程序循环执行,读取用户程序存储区内的数据,并依据用户数据执行相应操作。FX1S的功能较简单,据说该系列的PLC的CPU采用51单片机实现,因我并未拆过该系列的PLC,也未能查找到相关的设计资料,不好下定论,如有知道的人请告知。虽然无法确定这种说法是否真实,但是原先我使用过山寨三菱PLC的国产工控板,该款工控板采用的正是52单片机,可使用GX developer以及 GX Works2进行编程下载,功能与FX1S完全一样。
也就是说,以51单片机是可以实现三菱FX1S系列PLC的功能设计的,由此可推测,FX1S系列的系统并不复杂。

这里我试图用C语言实现一个模拟简单的PLC功能的小程序,仅在控制台上运行,初步先实现基本的输入输出功能,即实现 LD、OUT两个指令。

你可能感兴趣的:(01-C语言实现一个简单PLC仿真小程序(上))