請問:plc是如何實現在線修改的功能? 点击:1281 | 回复:3



冰源

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:3帖 | 27回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2005年12月23日
发表于:2005-12-23 16:36:00
楼主
若用一般的單片機,單片機沒有這樣的功能,它只能編譯后才能下載去使用.



王晟磊

  • 精华:12帖
  • 求助:0帖
  • 帖子:70帖 | 687回
  • 年度积分:0
  • 历史总积分:1173
  • 注册:2004年2月11日
发表于:2005-12-25 16:55:00
1楼
如果是硬解题的PLC或者解释型的PLC都比较容易做到这一点。
因为这两种都是基于虚拟机的,变量地址和程序地址是可控的,一般这两种的程序都可以很容易的恢复成梯型图或语言,而编译型的相当困难,原因是程序每一次编译每条PLC的指令都被分解开,不可再退回PLC的语言,不过困难不是做不到。
因为是5年前做的了,所以不一不定记得很准确,请您批评,具体的实现如下:
实现方式一、
1、如果是编译型的PLC,在实现上可以考虑将用户程序定位在一块固定的基址,这一块程序单独编译链接,主程序也单独编译,主程序内每次要解题时固定跳至该地址运行。
2、在线修改时,其实只下载重新编译过的用户程序块,先下载至SRAM,下载完后设一标记,在这一轮解题完后在主程序内将用户程序更新为新程序,再接着运行。
在实现上这种方式相对简单,但一定要小心空间的应用,特别是变量空间的定位,需要对每个变量用行固定定址,比方说输入变量的基址要固定在某个地方,输出的要固定在某个地方,中间变量要固固定在某个地方,临时变量也需要固定,而不要动态分配,尽量不要用堆做临时变量的分配,或自行管理。
实现方式二、
在下面实现重定位,也就是说下载的程序在下面将几个关键基址进行重定位
实现方式三、
现在很多单片机支持在线升级,如ST的51就有一块单独的4K空间可以用来编写下载程序,这一块空间是独立的,你可以用这一块空间来实现对你程序和更新维护。但要想做到变量地址不变,这一点很难,除非对C编译器进行很多改动。

冰源

  • 精华:2帖
  • 求助:0帖
  • 帖子:3帖 | 27回
  • 年度积分:0
  • 历史总积分:38
  • 注册:2005年12月23日
发表于:2005-12-26 11:29:00
2楼
请问:您说的虚拟机是不是8bit单片机都会支持?它是用何种方式存储指令而能让它很容易还原成梯形图?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2005-12-26 13:09:00
3楼
虚拟机的原型概念是原来中大型机时,主机比较贵,而且各家大型机电脑的生产商指令不一样,所以早期的操作系统商就开发了一个统一的指令环境,使同样指令可以在不同的机器上运行。
每个程序员都通过终端把自己的程序输入并送入大型机排队运行。
采用虚拟机的概念是DCS最早引进来的,因为可以使上位机的编程软件不用随硬件的升级而升级,同时可以在软指令内加保护,提高系统的可靠性。当然这也是一个双刃剑,一方面可靠性有可能因为代码量的增加而降低,另一方面成本会升高和速度会降低.
其实大家如果知道现在WINDOWS的各种内核其实也是基于虚拟机,这也就是为什么WIN平台的破解比DOS下更容易了,也是为什么WIN程序的兼容性可以空前的好,更是为什么微软可以令我们每两年把电脑的速度提高一倍.
虚拟机的指令可以自己定义,但一定要注意,你现在实现的是一个软CPU式的东东,所以一定要把栈、程序空间、数据空间、各空间的指针给定义好。否则以后再想加就困难了。
然后虚拟机这个东东也就是一个最基本的状态机,简单实现很容易,但要提升效率就很困难,而且要为以后的扩展考虑。我建议您去找一本早期大型机操作系统的书看一看再动手,可以更清晰一些。

热门招聘
相关主题

官方公众号

智造工程师