adolfshxq 发表于 2008-9-24 23:28:41

编译型PLC开发平台OpenLogic的开发方案【恢复】

最终目的就是做一个用梯形图来做嵌入式开发的平台。

这是我的一些想法,想听听大家的意见。



编译型PLC开发平台OpenLogic的开发方案(只是编译部分,还有通讯部分,在线调试部分,我后续给出): 



语句表:语句表是类似与堆栈式计算机的汇编语言序列。



解释型PLC:比较多的PLC是采用解析语句表来完成指令的执行的,下位有个执行指令的解释器,类似于虚拟机。

特点:速度较慢,易于移植。



编译器PLC:将语句表通过编译器直接转化成MCU可直接识别二进制代码。

特点:速度快,不易于移植。





第一步:梯形图转化为语句表。(这一部分与具体的MCU无关)

这一部分我正在做,以前为另外一个公司做过,现在正在重新开发一个,力争做的比较好用,现在已经可以完成画图和逻辑实现。有兴趣的朋友可以跟我要去看看,很多东西还没做就不在这里献丑了



第二步:语句表转化为C代码

简介: 这样的C代码是利用GCC的内嵌汇编语法,将一条PLC指令,转换为几条MCU汇编指令。具体转化过程如下:

利用词法和语法分析工具FLEX(LEX)和BISON(YACC),生成语句表的编译器,这里叫编译器并不很准确,因为只是生成了C代码。

前端开源PLC提出要做语句表的编译器,可否这样来做。



相关工具:FLEX和BISION,利用它们可以生成编译器的源码 

C语言编译器使用CodeBlock,它是基于GCC的编译器,可以跨平台使用,开始的时候可能不是很好用。

利用CodeBlock将FLEX和BISION生成的源码编译成我们需要的编译器.

优点:可以解决编译型PLC的移植性差的缺点。只要修改BISON的输入文件,然后重新编译,就可以生成一个基于其他MCU的编译器。



第三步:利用GCC编译器,将上一步生成的代码转化成二进制文件,可以下载到下位机中执行。



可能有人会对为什么不直接从语句表生成二进制代码感兴趣。这样是可以的,但是上述方法有两个优点:

1.        从梯形图的指令中可以直接调用C语言写的函数,这样将用户的C函数和我将从语句表中生成的C代码一起利用GCC编译就好了。因为即使语句指令很多但是还有有一些功能难以实现,这样留一个C语言的接口就是一个不错的选择。

2.        GCC是多目标机,可以很容易编译成适应其他MCU的代码。



以上的想法还很不成熟。具体实现可能还有很多难度,希望对这个感兴趣的朋友可以多交流一下,或者能够参与其中,大家一起做一件有意思的事情,虽难,但吾心向往之。

本贴被 adolfshxq 编辑过,最后修改时间:2008-09-24,23:58:59.

zxqwork 发表于 2008-9-28 12:56:19

顶!

adolfshxq 发表于 2008-9-25 11:26:32

谢谢!:)

zxqwork 发表于 2008-9-25 11:09:16

我和楼主一样,对PLC感兴趣!而且喜欢楼主的一句话:“大家一起做一件有意思的事情,虽难,但吾心向往之。”

感兴趣的朋友一起探讨吧

adolfshxq 发表于 2008-9-25 10:56:44

您好,我是用VC2005开发的。

caorujun 发表于 2008-9-25 10:47:31

楼主,你的这个梯形图软件用什么语言开发的,VC吗,还是其他的,想跟你学习一下,谢谢

caorujun 发表于 2008-10-23 09:34:06

说的有道理啊

zxqwork 发表于 2008-10-12 09:23:40

再顶

adolfshxq 发表于 2008-10-22 13:17:15

第一步也比较难的,关键做的好用,好多软件做出来画图非常复杂,软件限制很多。总的来说是架构不好。

软件的东西和硬件有区别,软件要考虑很多用户操作的习惯等,硬件则需要更强的稳定性,和其他设备的通信能力等等

wqsjob 发表于 2008-10-22 10:30:41

顶一下,刚才没看到这个帖子,呵呵。

做出可以直接给CPU用的编译软件,是最好的。第一步可能并不难,但是这类的软件如果仿真PLC就比较难了。

得想办法处理。比如做个植入CPU的监控程序。要不,就要去了解CPU的调式命令了。

wenunit 发表于 2008-10-27 22:25:27

固定函数地址的方法,请参考向量表,



固定内存地址吗,你将编译器定义的硬件总内存定的和实际小一点,



余下来的用强制指针方式使用,就是固定内存地址了.



还可以用汇编申请内存块,分散加载到固定地址,当然使用也是强制指针.

liuzq 发表于 2008-10-27 16:28:49

【14楼】 wenunit 龙啸苍天:



你好!



"流程程序采用固定地址方式调用主程序的一些函数,须要共享的变量也采用固定地址方式实现(实现这个的方法很多).",



这个用IAR EWARM如何实现呢? 

wenunit 发表于 2008-10-26 20:01:16

又发现一个高手了..



<a name=baidusnap1></a>编译型的PLC速度是很快,下一步也打算做这个.



以下是个人想法:



对我来说IDE还只能用三菱的GX8(研究的比较透了,自己写是肯定的事,不过现在没时间),



自己再写一个转换程序,将梯形图转换成C文件,再调用GCC编译成Hex,烧与MCU的固定地址(非起始地址).



这个Hex中只有一个对外的接口函数,在这里执行梯形图对应的所有流程代码,



主程序不在这里,运行的时由主程序调用这个接口函数.



流程程序采用固定地址方式调用主程序的一些函数,须要共享的变量也采用固定地址方式实现(实现这个的方法很多).



这样做的一个好处是,每次烧写的东西不会很多,不用编程口进行烧写,



更重要的一点是,主程序不会外流,让别人不好仿造(产品所必须的).







有机会可以交流一下,本人已初步完成了解释型的PLC.



VC2005,LPC的ARM7都还行,会的很杂,什么都知道点,



现在在做基于STM32的PLC,也是解释型的,十之八九了.属于移植,底层好了,程序就好了.



下一步也想做一个编译型的PLC,&nbsp;QQ:&nbsp;188483835&nbsp;&nbsp;工作日白天必隐身在线.

adolfshxq 发表于 2008-10-27 11:07:52

想法基本一致:)

heky 发表于 2008-9-25 01:08:19

看来无锡是PLC开发集中的地方啊。有空交流下。

adolfshxq 发表于 2008-9-26 22:18:44

7楼比较喜欢难的东西,呵呵

jerrywzf 发表于 2008-9-26 22:00:41

这种还是不算难,MFC多文挡编辑.我们也有一个类似的产品.

adolfshxq 发表于 2008-9-24 23:41:42

截一个我做的软件的图

http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_429223.JPG

openlogic平台的界面&nbsp;(原文件名:openlogic.JPG)&nbsp;

zsyjacky 发表于 2010-11-14 23:48:19

这个是用内存定位技术,应该好做

fraser 发表于 2011-4-19 00:07:14

mark

sylgy 发表于 2011-6-4 17:04:09

用梯形图和指令表作为编程语言,PLC还有一种FBD语言,这种我觉得在工业现场做闭环控制什么的比较多,可能更实用,我也在做这方面的课题,楼主有空多多交流哦!

stlww 发表于 2011-9-1 10:56:01

回复【1楼】adolfshxq
-----------------------------------------------------------------------

楼主的这个想法真是不错啊!学习了。

gj13966288 发表于 2011-10-18 16:48:40

学习…………

Elec_Ramble 发表于 2012-12-14 20:08:57

看了楼主的方案获益匪浅。FBD语言确实用得比较多,而且很直观。

jungleyang 发表于 2013-1-11 20:21:57

不知道楼主做到什么样子了

adolfshxq 发表于 2013-1-12 21:09:13

样子很不错喽哈哈

seekor2012 发表于 2014-4-18 13:10:40

学学中,谢谢分享

batistuta516 发表于 2014-9-2 08:43:00

编译型不简单啊 关注下

zhou_taotb 发表于 2015-4-5 11:43:15

好难啊感觉

tjx0512 发表于 2015-8-5 23:05:40

年代久远,也应该支持的!

adolfshxq 发表于 2015-9-15 09:13:18

本帖最后由 adolfshxq 于 2015-9-15 09:14 编辑

已发展成一套比较完善的PLC编程软件,有兴趣的朋友,可以联系我

liuyingqing139 发表于 2015-9-15 14:24:14

{:smile:}恭喜恭喜
页: [1]
查看完整版本: 编译型PLC开发平台OpenLogic的开发方案【恢复】