若用一般的單片機,單片機沒有這樣的功能,它只能編譯后才能下載去使用.
WW.W_PLC※JS_C,OM-PL,C-技.术_网
以下是对《請問:plc是如何實現在線修改的功能?》的回复:
WWW.PLCJS.COM——可编程控制器技术门户
匿名回复:P.L.C.技.术.网——可编程控制器技术门户
如果是硬解题的PLC或者解释型的PLC都比较容易做到这一点。WWW_PLC※JS_COM-PmLC-技.术_网
因为这两种都是基于虚拟机的,变量地址和程序地址是可控的,一般这两种的程序都可以很容易的恢复成梯型图或语言,而编译型的相当困难,原因是程序每一次编译每条PLC的指令都被分解开,不可再退回PLC的语言,不过困难不是做不到。WWW.PLCJS.COM——可编程控制器技术门户
因为是5年前做的了,所以不一不定记得很准确,请您批评,具体的实现如下:P.L.C.技.术.网——可编程控制器技术门户
实现方式一、WW.W_PLC※JS_C,OM-PL,C-技.术_网
1、如果是编译型的PLC,在实现上可以考虑将用户程序定位在一块固定的基址,这一块程序单独编译链接,主程序也单独编译,主程序内每次要解题时固定跳至该地址运行。W1WW_P4LCJS_COM-PLC-技.术_网
2、在线修改时,其实只下载重新编译过的用户程序块,先下载至SRAM,下载完后设一标记,在这一轮解题完后在主程序内将用户程序更新为新程序,再接着运行。——可——编——程——控-制-器-技——术——门——户
在实现上这种方式相对简单,但一定要小心空间的应用,特别是变量空间的定位,需要对每个变量用行固定定址,比方说输入变量的基址要固定在某个地方,输出的要固定在某个地方,中间变量要固固定在某个地方,临时变量也需要固定,而不要动态分配,尽量不要用堆做临时变量的分配,或自行管理。——可——编——程——控-制-器-技——术——门——户
实现方式二、WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
在下面实现重定位,也就是说下载的程序在下面将几个关键基址进行重定位WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
实现方式三、——可——编——程——控-制-器-技——术——门——户
现在很多单片机支持在线升级,如ST的51就有一块单独的4K空间可以用来编写下载程序,这一块空间是独立的,你可以用这一块空间来实现对你程序和更新维护。但要想做到变量地址不变,这一点很难,除非对C编译器进行很多改动。WWW_P※LCJS_COM-PLC-)技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
匿名回复:plcjs.技.术_网
请问:您说的虚拟机是不是8bit单片机都会支持?它是用何种方式存储指令而能让它很容易还原成梯形图? WWW_PLCJS_COM-PLC-技.术_网
匿名回复:plcjs.技.术_网
虚拟机的原型概念是原来中大型机时,主机比较贵,而且各家大型机电脑的生产商指令不一样,所以早期的操作系统商就开发了一个统一的指令环境,使同样指令可以在不同的机器上运行。WWW_P※LCJS_CO※M-PLC-技-.术_网
每个程序员都通过终端把自己的程序输入并送入大型机排队运行。WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
采用虚拟机的概念是DCS最早引进来的,因为可以使上位机的编程软件不用随硬件的升级而升级,同时可以在软指令内加保护,提高系统的可靠性。当然这也是一个双刃剑,一方面可靠性有可能因为代码量的增加而降低,另一方面成本会升高和速度会降低.WWW_PL※CJS_COM-PLC-技.术_网
其实大家如果知道现在WINDOWS的各种内核其实也是基于虚拟机,这也就是为什么WIN平台的破解比DOS下更容易了,也是为什么WIN程序的兼容性可以空前的好,更是为什么微软可以令我们每两年把电脑的速度提高一倍.——可——编——程——控-制-器-技——术——门——户
虚拟机的指令可以自己定义,但一定要注意,你现在实现的是一个软CPU式的东东,所以一定要把栈、程序空间、数据空间、各空间的指针给定义好。否则以后再想加就困难了。plcjs.技.术_网
然后虚拟机这个东东也就是一个最基本的状态机,简单实现很容易,但要提升效率就很困难,而且要为以后的扩展考虑。我建议您去找一本早期大型机操作系统的书看一看再动手,可以更清晰一些。 P.L.C.技.术.网——可编程控制器技术门户