应而,开发拥有完全自主知识产权的民族PLC。
本人负责PLC软件部分。公司的PLC才用的是51CPU。而编程方式采用T型图开发。
我主要问题是如何把T型图转化为51的单片机目标代码。
望各高手,能畅所欲言。
29 个解决方案
#1
帮顶一下。
#2
不行吧,
将T型图转化为51的单片机目标代码也就差不多写一个新的编译器,而且也很难下载给51使用啊.
编个解释器,T型图解释成整型指令型式,可能简单点,大概这样子:
0x99,0x00一条指令
0x88,0x00一条指令
0x77,0x00一条指令
然后就可直接下载到51内存中,然后从头开始顺序解释执行,每次取2个字节解释(只是举例而已实际由你定),执动后又加2指向下一条,指令含义由自已定义.
PLC其实也差不多是这样运作.
还有T型图与PLC编程指令一一对应,图形怎解释.
其实真正讲是将PLC编程解释成可以由51解释的指令.
将T型图转化为51的单片机目标代码也就差不多写一个新的编译器,而且也很难下载给51使用啊.
编个解释器,T型图解释成整型指令型式,可能简单点,大概这样子:
0x99,0x00一条指令
0x88,0x00一条指令
0x77,0x00一条指令
然后就可直接下载到51内存中,然后从头开始顺序解释执行,每次取2个字节解释(只是举例而已实际由你定),执动后又加2指向下一条,指令含义由自已定义.
PLC其实也差不多是这样运作.
还有T型图与PLC编程指令一一对应,图形怎解释.
其实真正讲是将PLC编程解释成可以由51解释的指令.
#3
一听,就知道你是PLC的高手。我对PLC的研究不深。
我估计的你意思是先编译成51的汇编程序,然后通过汇编程序,连接,装配。不知道对否。
本人是学计算机的,对编译有一定的研究。
我的想法是作个以T型图为源语言,以51单片机为目标代码的编译器。
但是,公司毕竟是中国的公司,它太追求短期效益。
而这是一个庞大而且难度相当大的项目,软件项目没有足够重视。
我这里还有PLC的一点资料。大家不妨看看。
市场期盼小型PLC国产化
http://www.lodestar.com.cn/dl/news/100650.html
我估计的你意思是先编译成51的汇编程序,然后通过汇编程序,连接,装配。不知道对否。
本人是学计算机的,对编译有一定的研究。
我的想法是作个以T型图为源语言,以51单片机为目标代码的编译器。
但是,公司毕竟是中国的公司,它太追求短期效益。
而这是一个庞大而且难度相当大的项目,软件项目没有足够重视。
我这里还有PLC的一点资料。大家不妨看看。
市场期盼小型PLC国产化
http://www.lodestar.com.cn/dl/news/100650.html
#4
关心,紧!
我也在做类似的工作,不过不是基于51,而是基于DSP。51功能太弱了,如果要基于MCU体系,也建议用ARM,价格贵不到哪里去。PLC系统的成本控制必须系统考虑,不要为了节省少量的硬件成本而大量提升软件成本。
国内做PLC的大公司也不是没有,竞争力不强而已。当然如果是open项目的话另有价值。不过也要考虑到太硬件相关的东西open不容易。OpenARM本来是个很不错的项目吧,拖拖拉拉这么几年看来也要无疾而终了。
所以我的考虑是干脆结合考虑PLC、DCS、FCS的功能走高端路线,强调运算处理能力,大幅度提高现场总线带宽,这都是PLC所不具备的特点,看看能否适应一些特定应用。至于编程方式,兼容梯形图或者流程图原理上都可以,但是实施起来工程量也不小。所以我想初期干脆就用C/C++编程,毕竟会C/C++的人有比较大的基数,在支持面向对象面向组件的情况下还不牺牲效率。当然随后可以考虑传统PLC编程方式的支持,毕竟最后执行的都是二进制代码。
目前主流的PLC所采用的CPU到P3一级的也不少了,用在电力系统自动化方面还是不够用,运算处理能力不足,所以我个人认为再走低端路线不是好方向了。另外有个思路就是EDAS CE - The Open Architecture PLC(http://www.edasce.com/plc.asp?wsc=ge0156)那样用CE做OS来支持,那样也能少做不少工作。
我也在做类似的工作,不过不是基于51,而是基于DSP。51功能太弱了,如果要基于MCU体系,也建议用ARM,价格贵不到哪里去。PLC系统的成本控制必须系统考虑,不要为了节省少量的硬件成本而大量提升软件成本。
国内做PLC的大公司也不是没有,竞争力不强而已。当然如果是open项目的话另有价值。不过也要考虑到太硬件相关的东西open不容易。OpenARM本来是个很不错的项目吧,拖拖拉拉这么几年看来也要无疾而终了。
所以我的考虑是干脆结合考虑PLC、DCS、FCS的功能走高端路线,强调运算处理能力,大幅度提高现场总线带宽,这都是PLC所不具备的特点,看看能否适应一些特定应用。至于编程方式,兼容梯形图或者流程图原理上都可以,但是实施起来工程量也不小。所以我想初期干脆就用C/C++编程,毕竟会C/C++的人有比较大的基数,在支持面向对象面向组件的情况下还不牺牲效率。当然随后可以考虑传统PLC编程方式的支持,毕竟最后执行的都是二进制代码。
目前主流的PLC所采用的CPU到P3一级的也不少了,用在电力系统自动化方面还是不够用,运算处理能力不足,所以我个人认为再走低端路线不是好方向了。另外有个思路就是EDAS CE - The Open Architecture PLC(http://www.edasce.com/plc.asp?wsc=ge0156)那样用CE做OS来支持,那样也能少做不少工作。
#5
PLC本身没有太高的技术壁垒,只有市场先入和占有率的问题。我个人体会类似PLC这样的体系倒是有个open的两难问题,如果完全open,没有公司支持的硬件开发是非常困难的,而如果全体系open,又没有哪个公司愿意干。所以这个知识产权是指“某公司的”知识产权还是“所有中国人的”知识产权要有个区别。我也是替公司做事,我想我最多对软件拥有是否open的决定权,硬件则不可能。当然软件的open对各方面来说也不是坏事,但是到底有多大的号召力又是另外一回事了。
目前我已经完成了很大一部分工作,每天日思夜想都是这个东西,看到楼主的帖子不禁感慨。当然我们整个体系主要是为了自己的应用(电力自动化),没有从整个工业自动化行业的角度来考虑,也没有从国家和民族的角度来看待过这个问题;)
目前我已经完成了很大一部分工作,每天日思夜想都是这个东西,看到楼主的帖子不禁感慨。当然我们整个体系主要是为了自己的应用(电力自动化),没有从整个工业自动化行业的角度来考虑,也没有从国家和民族的角度来看待过这个问题;)
#6
软件方面严重涉及到编译原理,偶编译也有过很简单的研究,觉得做个半成品容易,但是做成成熟产品是很难的。项目很大啊!一个人恐怕比较难搞定。
#7
没错,自动化这个行业,不光是PLC,类似的相关产品,一般都是先入为主。后者很难与先驱们分一杯羹…但机会还是有的,毕竟国外的东西存在着价格和界面,以及服务方面的诸多不便,所以,如果我们想做一些我们国人自己的东西,一定别忘了把市场推广和用户需求考虑在首位!
#8
先把T型图转换为51源代码 然后再用已有的51编译器编译。
#9
难度是比较大,但也并非没有突破口。只是强烈建议不要放在51这个平台上。
#10
谢谢大家的支持和关心。
大家的话都很有道理对我有不小的启发。希望大家能经常来看看,交流讨论。
TO PowerDSP()
非常感谢你的建议。而且,你说已经完成了很大一部分工作。我很高兴也很好奇。
我只负责软件,硬件选型还没有定下来。现在,公司对软件方面不够重视。
所以,更没考虑软件成本。在他们看来软件成本是恒定的。
而且,我也想通过这个项目使我大学的毕业课题产品化。作个产品级的编译器。
我想,不管公司选用什么CPU编译前端是相同的。不同的目标代码的指令级。不知对否。
大家的话都很有道理对我有不小的启发。希望大家能经常来看看,交流讨论。
TO PowerDSP()
非常感谢你的建议。而且,你说已经完成了很大一部分工作。我很高兴也很好奇。
我只负责软件,硬件选型还没有定下来。现在,公司对软件方面不够重视。
所以,更没考虑软件成本。在他们看来软件成本是恒定的。
而且,我也想通过这个项目使我大学的毕业课题产品化。作个产品级的编译器。
我想,不管公司选用什么CPU编译前端是相同的。不同的目标代码的指令级。不知对否。
#11
这是项目新要求,不懂,太深奥,望各位达人解释。
在基于ATMEL MEGA CPU的单片机系统中,实现对DI/DO的读写控制、指令解释执行。
理由及目标:
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
2,切实理解循环扫描。
要求要点:
1,单片机主程序循环执行,实现循环扫描的基本过程,程序循环周期为 2~50 ms,依据要解释的程序长度/内容。
2,实现以下指令:
LD/LDN
OR/ORN
AND/AND NOT
OUT/NEG OUT
PD/SET/RST
ANDLD/ORLD
TMR/CNT
基本数据运算指令 + - * /
比较指令
FOR/NEXT
各指令的具体功能,参考FATEK FBx PLC的说明书。
按照《专用控制器(设计:系统软件)附表20050116.xls》之“存储空间详细分配(TC)”表的“用户BIT操作”和“用户WORD操作”列存储器DEC范围、模拟PLC内部存储器空间。
各指令的操作数范围,是各存储器DEC范围 后面 对应的“目标码范围( xxx操作/DEC) ”
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
ANDLD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
3,基本语法检查功能
4,硬件支持RST/POWER FAILED(意外掉电前兆)的情况下,
实现RST时CPU复位动作(任意设计)
实现POWER FAILED时CPU数据保护动作(任意设计)
在基于ATMEL MEGA CPU的单片机系统中,实现对DI/DO的读写控制、指令解释执行。
理由及目标:
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
2,切实理解循环扫描。
要求要点:
1,单片机主程序循环执行,实现循环扫描的基本过程,程序循环周期为 2~50 ms,依据要解释的程序长度/内容。
2,实现以下指令:
LD/LDN
OR/ORN
AND/AND NOT
OUT/NEG OUT
PD/SET/RST
ANDLD/ORLD
TMR/CNT
基本数据运算指令 + - * /
比较指令
FOR/NEXT
各指令的具体功能,参考FATEK FBx PLC的说明书。
按照《专用控制器(设计:系统软件)附表20050116.xls》之“存储空间详细分配(TC)”表的“用户BIT操作”和“用户WORD操作”列存储器DEC范围、模拟PLC内部存储器空间。
各指令的操作数范围,是各存储器DEC范围 后面 对应的“目标码范围( xxx操作/DEC) ”
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
ANDLD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
3,基本语法检查功能
4,硬件支持RST/POWER FAILED(意外掉电前兆)的情况下,
实现RST时CPU复位动作(任意设计)
实现POWER FAILED时CPU数据保护动作(任意设计)
#12
楼主的消息收到。由于我负责整个项目,所以技术细节没有办法多谈,这是商业上的敏感问题也是职业道德的需求。但是我一直想将整个软件平台框架open了,当然这要在公司许可之后才行。毕竟在中国软件不怎么能得到知识产权方面的保护。
所以我谈的都是泛泛的观点问题,仅仅是个人看法而已。我不是做PLC的,公司另有部门作PLC,是应用。只是我在DSP系统产品的开发过程中不自觉地参考了PLC、DCS、FCS的思路而已。所以我开发的不是PLC,能做PLC用但是功能强过PLC,当然成本也超过PLC,不过和国外PLC的价格比较起来还是有优势,仰仗国内比较低的人力成本而已。
做产品和作课题是两回事,你们做的项目意义很大,但是从商业价值来看值得商榷。我们基本上是PLC用户,作各种工业自动化工程,记忆中就从来没有选用过国产PLC。很多时候用户愿意多出钱来买产品的稳定性和可靠性。所以我的意思是要做也要做有自己特色的东西,别人没有的功能。重复走别人走过的路子前途不大,从头开发作PLC,排除国外厂商的竞争,国内的产品就可以造成巨大的市场竞争压力。
我的PLC系统只是个副产品,是模块化、组件化、分布式思想下的一个专用系统。因为协作部门提出现场总线带宽要到1G以上,仅仅这点,PLC系统是没有这个要求的。
所以我谈的都是泛泛的观点问题,仅仅是个人看法而已。我不是做PLC的,公司另有部门作PLC,是应用。只是我在DSP系统产品的开发过程中不自觉地参考了PLC、DCS、FCS的思路而已。所以我开发的不是PLC,能做PLC用但是功能强过PLC,当然成本也超过PLC,不过和国外PLC的价格比较起来还是有优势,仰仗国内比较低的人力成本而已。
做产品和作课题是两回事,你们做的项目意义很大,但是从商业价值来看值得商榷。我们基本上是PLC用户,作各种工业自动化工程,记忆中就从来没有选用过国产PLC。很多时候用户愿意多出钱来买产品的稳定性和可靠性。所以我的意思是要做也要做有自己特色的东西,别人没有的功能。重复走别人走过的路子前途不大,从头开发作PLC,排除国外厂商的竞争,国内的产品就可以造成巨大的市场竞争压力。
我的PLC系统只是个副产品,是模块化、组件化、分布式思想下的一个专用系统。因为协作部门提出现场总线带宽要到1G以上,仅仅这点,PLC系统是没有这个要求的。
#13
是啊。我也只是个打工的。人家给钱,我练手。
没办法,这是我的一个梦想,不想就这么放弃。
而且,明年做完这个项目就要去读人工智能的研究生了。
没办法,这是我的一个梦想,不想就这么放弃。
而且,明年做完这个项目就要去读人工智能的研究生了。
#14
类似查表功能
一一对应就可以解决这个问题
一一对应就可以解决这个问题
#15
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
这一段梯形图事实上完成了下面的两个逻辑表达式
Y0 = (X0 OR Y0) AND NOT X1
Y1 = NOT Y0
循环扫描
1:读取输入端X0,X1的状态(0或1,断开或接通)到内存中
2:执行程序(可以将X0,X1,Y0,Y1等看作逻辑变量)
3:将内存中Y0,Y1的状态复制到输出端
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
这一段梯形图事实上完成了下面的两个逻辑表达式
Y0 = (X0 OR Y0) AND NOT X1
Y1 = NOT Y0
循环扫描
1:读取输入端X0,X1的状态(0或1,断开或接通)到内存中
2:执行程序(可以将X0,X1,Y0,Y1等看作逻辑变量)
3:将内存中Y0,Y1的状态复制到输出端
#16
楼上大哥言之有理。
#17
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
AND LD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
AND LD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
#18
ANDLD 块间串联
ORLD 块间并联
要实现这两条指令,将LD X0 指令翻译为--->> 累加器进栈,X0送入累加器
ANDLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“与”操作
ORLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“或”操作
LD X0 上一步运算结果进栈(这里与以后运算无关),累加器=X0
AND X1 累加器= X0 AND X1
AND NOT X1 累加器= X0 AND X1 AND (NOT X1)
LD Y0 累加器= Y0 栈顶=X0 AND X1 AND (NOT X1)
AND Y1 累加器= Y0 AND Y1
ANDLD 累加器= (X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
LD M0 累加器= M0 栈顶=(X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
AND NOT Y1 累加器= M0 AND (NOT Y1)
ORLD 累加器= ((X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)) OR (M0 AND (NOT Y1))
我自己的一点想法,ANDLD指令和ORLD指令也不一顶用栈实现
至于PD指令可能需要记住上一次运行到这里时的累加器状态,然后才能决定是否输出
ORLD 块间并联
要实现这两条指令,将LD X0 指令翻译为--->> 累加器进栈,X0送入累加器
ANDLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“与”操作
ORLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“或”操作
LD X0 上一步运算结果进栈(这里与以后运算无关),累加器=X0
AND X1 累加器= X0 AND X1
AND NOT X1 累加器= X0 AND X1 AND (NOT X1)
LD Y0 累加器= Y0 栈顶=X0 AND X1 AND (NOT X1)
AND Y1 累加器= Y0 AND Y1
ANDLD 累加器= (X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
LD M0 累加器= M0 栈顶=(X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
AND NOT Y1 累加器= M0 AND (NOT Y1)
ORLD 累加器= ((X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)) OR (M0 AND (NOT Y1))
我自己的一点想法,ANDLD指令和ORLD指令也不一顶用栈实现
至于PD指令可能需要记住上一次运行到这里时的累加器状态,然后才能决定是否输出
#19
先进编译技术研究组ACTGroup ( Advanced Compiler Technology Group), 隶属于中国科学院计算技术研究所体系结构研究室。
ACTGroup以其坚实的软件开发能力引起了国际大公司的关注。承担了多项国际合作项目,包括:
Motorola, DSP程序设计环境 该项目是一个图形化的集成环境,包括调试器,性能分析器,行为监视器等。
ACTGroup以其坚实的软件开发能力引起了国际大公司的关注。承担了多项国际合作项目,包括:
Motorola, DSP程序设计环境 该项目是一个图形化的集成环境,包括调试器,性能分析器,行为监视器等。
#20
记号
#21
PLC做原理实现容易,做产品难哪!PLC的使用环境千差万别,首要的是可靠性。在这方面,没有人愿意冒险使用一个陌生的牌子,除非这个项目对可靠性要求不高。可靠性差正是中国产品的通,要知道,在某些情况下,可靠性是用成本换来的,而寻求低成本高可靠性的产品,才是真正的课题。
#22
厉害
#23
现在都不用梯形图了,,,用结构化的编程语言。这样要好些!!!
#24
需要对一块AVR 8515的板,进行操作。
手里有一个汇编程序。
对输出点操作相关的句子是:
Y开头的为输出点。
.EQU OUTPORT1=$C000;$3805 ;D0_D7 Y9,YA,YB,YC,Y5,Y6,Y7,Y8 有效电平为0
.EQU OUTPORT2=$D000;$3806 ;D0_D7 YD,YG,YF,YE,Y3,Y2,Y1,Y4 有效电平为0
LDI TEMP,$0FF
STS OUTDATE1,TEMP
STS OUTDATE2,TEMP ;输入继电器初始化
STS OUTPORT1,TEMP
STS OUTPORT2,TEMP
在ICC中怎么实现上面几句
比如如何使Y1为高电平。
手里有一个汇编程序。
对输出点操作相关的句子是:
Y开头的为输出点。
.EQU OUTPORT1=$C000;$3805 ;D0_D7 Y9,YA,YB,YC,Y5,Y6,Y7,Y8 有效电平为0
.EQU OUTPORT2=$D000;$3806 ;D0_D7 YD,YG,YF,YE,Y3,Y2,Y1,Y4 有效电平为0
LDI TEMP,$0FF
STS OUTDATE1,TEMP
STS OUTDATE2,TEMP ;输入继电器初始化
STS OUTPORT1,TEMP
STS OUTPORT2,TEMP
在ICC中怎么实现上面几句
比如如何使Y1为高电平。
#25
没想到也有人想做这个。
我现在已经完成了基于三菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
解释器动作分析也做完了,但是尚未实现。等实现了这个再试试。
我现在已经完成了基于三菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
解释器动作分析也做完了,但是尚未实现。等实现了这个再试试。
#26
厉害
我现在是连PLC都不怎么会用
我现在是连PLC都不怎么会用
#27
以前教学,都教的是国外,西门子和日本的PLC多些,没有一个是国产的,前一段想开发一个PLC的通用软件,写一半发现统一几乎不可能,就停了,很希望能有国产的plc在性能上和国外的能相比呀!工控上面应用,不像家里的PC,不行就reset!
#28
目前,项目的进展是PLC中的虚拟机已经实现。
对基于菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
已经实现。
目标是通用集成化梯形图图形开发系统,集编程,编译/反编译,通讯,监控于一体。
对基于菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
已经实现。
目标是通用集成化梯形图图形开发系统,集编程,编译/反编译,通讯,监控于一体。
#1
帮顶一下。
#2
不行吧,
将T型图转化为51的单片机目标代码也就差不多写一个新的编译器,而且也很难下载给51使用啊.
编个解释器,T型图解释成整型指令型式,可能简单点,大概这样子:
0x99,0x00一条指令
0x88,0x00一条指令
0x77,0x00一条指令
然后就可直接下载到51内存中,然后从头开始顺序解释执行,每次取2个字节解释(只是举例而已实际由你定),执动后又加2指向下一条,指令含义由自已定义.
PLC其实也差不多是这样运作.
还有T型图与PLC编程指令一一对应,图形怎解释.
其实真正讲是将PLC编程解释成可以由51解释的指令.
将T型图转化为51的单片机目标代码也就差不多写一个新的编译器,而且也很难下载给51使用啊.
编个解释器,T型图解释成整型指令型式,可能简单点,大概这样子:
0x99,0x00一条指令
0x88,0x00一条指令
0x77,0x00一条指令
然后就可直接下载到51内存中,然后从头开始顺序解释执行,每次取2个字节解释(只是举例而已实际由你定),执动后又加2指向下一条,指令含义由自已定义.
PLC其实也差不多是这样运作.
还有T型图与PLC编程指令一一对应,图形怎解释.
其实真正讲是将PLC编程解释成可以由51解释的指令.
#3
一听,就知道你是PLC的高手。我对PLC的研究不深。
我估计的你意思是先编译成51的汇编程序,然后通过汇编程序,连接,装配。不知道对否。
本人是学计算机的,对编译有一定的研究。
我的想法是作个以T型图为源语言,以51单片机为目标代码的编译器。
但是,公司毕竟是中国的公司,它太追求短期效益。
而这是一个庞大而且难度相当大的项目,软件项目没有足够重视。
我这里还有PLC的一点资料。大家不妨看看。
市场期盼小型PLC国产化
http://www.lodestar.com.cn/dl/news/100650.html
我估计的你意思是先编译成51的汇编程序,然后通过汇编程序,连接,装配。不知道对否。
本人是学计算机的,对编译有一定的研究。
我的想法是作个以T型图为源语言,以51单片机为目标代码的编译器。
但是,公司毕竟是中国的公司,它太追求短期效益。
而这是一个庞大而且难度相当大的项目,软件项目没有足够重视。
我这里还有PLC的一点资料。大家不妨看看。
市场期盼小型PLC国产化
http://www.lodestar.com.cn/dl/news/100650.html
#4
关心,紧!
我也在做类似的工作,不过不是基于51,而是基于DSP。51功能太弱了,如果要基于MCU体系,也建议用ARM,价格贵不到哪里去。PLC系统的成本控制必须系统考虑,不要为了节省少量的硬件成本而大量提升软件成本。
国内做PLC的大公司也不是没有,竞争力不强而已。当然如果是open项目的话另有价值。不过也要考虑到太硬件相关的东西open不容易。OpenARM本来是个很不错的项目吧,拖拖拉拉这么几年看来也要无疾而终了。
所以我的考虑是干脆结合考虑PLC、DCS、FCS的功能走高端路线,强调运算处理能力,大幅度提高现场总线带宽,这都是PLC所不具备的特点,看看能否适应一些特定应用。至于编程方式,兼容梯形图或者流程图原理上都可以,但是实施起来工程量也不小。所以我想初期干脆就用C/C++编程,毕竟会C/C++的人有比较大的基数,在支持面向对象面向组件的情况下还不牺牲效率。当然随后可以考虑传统PLC编程方式的支持,毕竟最后执行的都是二进制代码。
目前主流的PLC所采用的CPU到P3一级的也不少了,用在电力系统自动化方面还是不够用,运算处理能力不足,所以我个人认为再走低端路线不是好方向了。另外有个思路就是EDAS CE - The Open Architecture PLC(http://www.edasce.com/plc.asp?wsc=ge0156)那样用CE做OS来支持,那样也能少做不少工作。
我也在做类似的工作,不过不是基于51,而是基于DSP。51功能太弱了,如果要基于MCU体系,也建议用ARM,价格贵不到哪里去。PLC系统的成本控制必须系统考虑,不要为了节省少量的硬件成本而大量提升软件成本。
国内做PLC的大公司也不是没有,竞争力不强而已。当然如果是open项目的话另有价值。不过也要考虑到太硬件相关的东西open不容易。OpenARM本来是个很不错的项目吧,拖拖拉拉这么几年看来也要无疾而终了。
所以我的考虑是干脆结合考虑PLC、DCS、FCS的功能走高端路线,强调运算处理能力,大幅度提高现场总线带宽,这都是PLC所不具备的特点,看看能否适应一些特定应用。至于编程方式,兼容梯形图或者流程图原理上都可以,但是实施起来工程量也不小。所以我想初期干脆就用C/C++编程,毕竟会C/C++的人有比较大的基数,在支持面向对象面向组件的情况下还不牺牲效率。当然随后可以考虑传统PLC编程方式的支持,毕竟最后执行的都是二进制代码。
目前主流的PLC所采用的CPU到P3一级的也不少了,用在电力系统自动化方面还是不够用,运算处理能力不足,所以我个人认为再走低端路线不是好方向了。另外有个思路就是EDAS CE - The Open Architecture PLC(http://www.edasce.com/plc.asp?wsc=ge0156)那样用CE做OS来支持,那样也能少做不少工作。
#5
PLC本身没有太高的技术壁垒,只有市场先入和占有率的问题。我个人体会类似PLC这样的体系倒是有个open的两难问题,如果完全open,没有公司支持的硬件开发是非常困难的,而如果全体系open,又没有哪个公司愿意干。所以这个知识产权是指“某公司的”知识产权还是“所有中国人的”知识产权要有个区别。我也是替公司做事,我想我最多对软件拥有是否open的决定权,硬件则不可能。当然软件的open对各方面来说也不是坏事,但是到底有多大的号召力又是另外一回事了。
目前我已经完成了很大一部分工作,每天日思夜想都是这个东西,看到楼主的帖子不禁感慨。当然我们整个体系主要是为了自己的应用(电力自动化),没有从整个工业自动化行业的角度来考虑,也没有从国家和民族的角度来看待过这个问题;)
目前我已经完成了很大一部分工作,每天日思夜想都是这个东西,看到楼主的帖子不禁感慨。当然我们整个体系主要是为了自己的应用(电力自动化),没有从整个工业自动化行业的角度来考虑,也没有从国家和民族的角度来看待过这个问题;)
#6
软件方面严重涉及到编译原理,偶编译也有过很简单的研究,觉得做个半成品容易,但是做成成熟产品是很难的。项目很大啊!一个人恐怕比较难搞定。
#7
没错,自动化这个行业,不光是PLC,类似的相关产品,一般都是先入为主。后者很难与先驱们分一杯羹…但机会还是有的,毕竟国外的东西存在着价格和界面,以及服务方面的诸多不便,所以,如果我们想做一些我们国人自己的东西,一定别忘了把市场推广和用户需求考虑在首位!
#8
先把T型图转换为51源代码 然后再用已有的51编译器编译。
#9
难度是比较大,但也并非没有突破口。只是强烈建议不要放在51这个平台上。
#10
谢谢大家的支持和关心。
大家的话都很有道理对我有不小的启发。希望大家能经常来看看,交流讨论。
TO PowerDSP()
非常感谢你的建议。而且,你说已经完成了很大一部分工作。我很高兴也很好奇。
我只负责软件,硬件选型还没有定下来。现在,公司对软件方面不够重视。
所以,更没考虑软件成本。在他们看来软件成本是恒定的。
而且,我也想通过这个项目使我大学的毕业课题产品化。作个产品级的编译器。
我想,不管公司选用什么CPU编译前端是相同的。不同的目标代码的指令级。不知对否。
大家的话都很有道理对我有不小的启发。希望大家能经常来看看,交流讨论。
TO PowerDSP()
非常感谢你的建议。而且,你说已经完成了很大一部分工作。我很高兴也很好奇。
我只负责软件,硬件选型还没有定下来。现在,公司对软件方面不够重视。
所以,更没考虑软件成本。在他们看来软件成本是恒定的。
而且,我也想通过这个项目使我大学的毕业课题产品化。作个产品级的编译器。
我想,不管公司选用什么CPU编译前端是相同的。不同的目标代码的指令级。不知对否。
#11
这是项目新要求,不懂,太深奥,望各位达人解释。
在基于ATMEL MEGA CPU的单片机系统中,实现对DI/DO的读写控制、指令解释执行。
理由及目标:
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
2,切实理解循环扫描。
要求要点:
1,单片机主程序循环执行,实现循环扫描的基本过程,程序循环周期为 2~50 ms,依据要解释的程序长度/内容。
2,实现以下指令:
LD/LDN
OR/ORN
AND/AND NOT
OUT/NEG OUT
PD/SET/RST
ANDLD/ORLD
TMR/CNT
基本数据运算指令 + - * /
比较指令
FOR/NEXT
各指令的具体功能,参考FATEK FBx PLC的说明书。
按照《专用控制器(设计:系统软件)附表20050116.xls》之“存储空间详细分配(TC)”表的“用户BIT操作”和“用户WORD操作”列存储器DEC范围、模拟PLC内部存储器空间。
各指令的操作数范围,是各存储器DEC范围 后面 对应的“目标码范围( xxx操作/DEC) ”
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
ANDLD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
3,基本语法检查功能
4,硬件支持RST/POWER FAILED(意外掉电前兆)的情况下,
实现RST时CPU复位动作(任意设计)
实现POWER FAILED时CPU数据保护动作(任意设计)
在基于ATMEL MEGA CPU的单片机系统中,实现对DI/DO的读写控制、指令解释执行。
理由及目标:
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
2,切实理解循环扫描。
要求要点:
1,单片机主程序循环执行,实现循环扫描的基本过程,程序循环周期为 2~50 ms,依据要解释的程序长度/内容。
2,实现以下指令:
LD/LDN
OR/ORN
AND/AND NOT
OUT/NEG OUT
PD/SET/RST
ANDLD/ORLD
TMR/CNT
基本数据运算指令 + - * /
比较指令
FOR/NEXT
各指令的具体功能,参考FATEK FBx PLC的说明书。
按照《专用控制器(设计:系统软件)附表20050116.xls》之“存储空间详细分配(TC)”表的“用户BIT操作”和“用户WORD操作”列存储器DEC范围、模拟PLC内部存储器空间。
各指令的操作数范围,是各存储器DEC范围 后面 对应的“目标码范围( xxx操作/DEC) ”
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
ANDLD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
3,基本语法检查功能
4,硬件支持RST/POWER FAILED(意外掉电前兆)的情况下,
实现RST时CPU复位动作(任意设计)
实现POWER FAILED时CPU数据保护动作(任意设计)
#12
楼主的消息收到。由于我负责整个项目,所以技术细节没有办法多谈,这是商业上的敏感问题也是职业道德的需求。但是我一直想将整个软件平台框架open了,当然这要在公司许可之后才行。毕竟在中国软件不怎么能得到知识产权方面的保护。
所以我谈的都是泛泛的观点问题,仅仅是个人看法而已。我不是做PLC的,公司另有部门作PLC,是应用。只是我在DSP系统产品的开发过程中不自觉地参考了PLC、DCS、FCS的思路而已。所以我开发的不是PLC,能做PLC用但是功能强过PLC,当然成本也超过PLC,不过和国外PLC的价格比较起来还是有优势,仰仗国内比较低的人力成本而已。
做产品和作课题是两回事,你们做的项目意义很大,但是从商业价值来看值得商榷。我们基本上是PLC用户,作各种工业自动化工程,记忆中就从来没有选用过国产PLC。很多时候用户愿意多出钱来买产品的稳定性和可靠性。所以我的意思是要做也要做有自己特色的东西,别人没有的功能。重复走别人走过的路子前途不大,从头开发作PLC,排除国外厂商的竞争,国内的产品就可以造成巨大的市场竞争压力。
我的PLC系统只是个副产品,是模块化、组件化、分布式思想下的一个专用系统。因为协作部门提出现场总线带宽要到1G以上,仅仅这点,PLC系统是没有这个要求的。
所以我谈的都是泛泛的观点问题,仅仅是个人看法而已。我不是做PLC的,公司另有部门作PLC,是应用。只是我在DSP系统产品的开发过程中不自觉地参考了PLC、DCS、FCS的思路而已。所以我开发的不是PLC,能做PLC用但是功能强过PLC,当然成本也超过PLC,不过和国外PLC的价格比较起来还是有优势,仰仗国内比较低的人力成本而已。
做产品和作课题是两回事,你们做的项目意义很大,但是从商业价值来看值得商榷。我们基本上是PLC用户,作各种工业自动化工程,记忆中就从来没有选用过国产PLC。很多时候用户愿意多出钱来买产品的稳定性和可靠性。所以我的意思是要做也要做有自己特色的东西,别人没有的功能。重复走别人走过的路子前途不大,从头开发作PLC,排除国外厂商的竞争,国内的产品就可以造成巨大的市场竞争压力。
我的PLC系统只是个副产品,是模块化、组件化、分布式思想下的一个专用系统。因为协作部门提出现场总线带宽要到1G以上,仅仅这点,PLC系统是没有这个要求的。
#13
是啊。我也只是个打工的。人家给钱,我练手。
没办法,这是我的一个梦想,不想就这么放弃。
而且,明年做完这个项目就要去读人工智能的研究生了。
没办法,这是我的一个梦想,不想就这么放弃。
而且,明年做完这个项目就要去读人工智能的研究生了。
#14
类似查表功能
一一对应就可以解决这个问题
一一对应就可以解决这个问题
#15
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
这一段梯形图事实上完成了下面的两个逻辑表达式
Y0 = (X0 OR Y0) AND NOT X1
Y1 = NOT Y0
循环扫描
1:读取输入端X0,X1的状态(0或1,断开或接通)到内存中
2:执行程序(可以将X0,X1,Y0,Y1等看作逻辑变量)
3:将内存中Y0,Y1的状态复制到输出端
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
这一段梯形图事实上完成了下面的两个逻辑表达式
Y0 = (X0 OR Y0) AND NOT X1
Y1 = NOT Y0
循环扫描
1:读取输入端X0,X1的状态(0或1,断开或接通)到内存中
2:执行程序(可以将X0,X1,Y0,Y1等看作逻辑变量)
3:将内存中Y0,Y1的状态复制到输出端
#16
楼上大哥言之有理。
#17
1,基于这个现成的硬件平台,学习实际的单片机开发环境,并初步实现程序的解释执行。
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
AND LD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
程序举例如下(程序由文本或者其他任意自定义的形式输入,检查完成情况时,将会随意抽查编写)
LD X0
OR Y0
AND NOT X1
OUT Y0
NEG OUT Y1
LD X0
AND X1
AND NOT X1
LD Y0
AND Y1
AND LD
LD M0
AND NOT Y1
ORLD
PD M0
FOR R0
LD Y0
ADD R0 K1
NEXT
#18
ANDLD 块间串联
ORLD 块间并联
要实现这两条指令,将LD X0 指令翻译为--->> 累加器进栈,X0送入累加器
ANDLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“与”操作
ORLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“或”操作
LD X0 上一步运算结果进栈(这里与以后运算无关),累加器=X0
AND X1 累加器= X0 AND X1
AND NOT X1 累加器= X0 AND X1 AND (NOT X1)
LD Y0 累加器= Y0 栈顶=X0 AND X1 AND (NOT X1)
AND Y1 累加器= Y0 AND Y1
ANDLD 累加器= (X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
LD M0 累加器= M0 栈顶=(X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
AND NOT Y1 累加器= M0 AND (NOT Y1)
ORLD 累加器= ((X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)) OR (M0 AND (NOT Y1))
我自己的一点想法,ANDLD指令和ORLD指令也不一顶用栈实现
至于PD指令可能需要记住上一次运行到这里时的累加器状态,然后才能决定是否输出
ORLD 块间并联
要实现这两条指令,将LD X0 指令翻译为--->> 累加器进栈,X0送入累加器
ANDLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“与”操作
ORLD 指令翻译为--->> 将栈顶的数据弹出 和 累加器的内容进行“或”操作
LD X0 上一步运算结果进栈(这里与以后运算无关),累加器=X0
AND X1 累加器= X0 AND X1
AND NOT X1 累加器= X0 AND X1 AND (NOT X1)
LD Y0 累加器= Y0 栈顶=X0 AND X1 AND (NOT X1)
AND Y1 累加器= Y0 AND Y1
ANDLD 累加器= (X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
LD M0 累加器= M0 栈顶=(X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)
AND NOT Y1 累加器= M0 AND (NOT Y1)
ORLD 累加器= ((X0 AND X1 AND (NOT X1) ) AND (Y0 AND Y1)) OR (M0 AND (NOT Y1))
我自己的一点想法,ANDLD指令和ORLD指令也不一顶用栈实现
至于PD指令可能需要记住上一次运行到这里时的累加器状态,然后才能决定是否输出
#19
先进编译技术研究组ACTGroup ( Advanced Compiler Technology Group), 隶属于中国科学院计算技术研究所体系结构研究室。
ACTGroup以其坚实的软件开发能力引起了国际大公司的关注。承担了多项国际合作项目,包括:
Motorola, DSP程序设计环境 该项目是一个图形化的集成环境,包括调试器,性能分析器,行为监视器等。
ACTGroup以其坚实的软件开发能力引起了国际大公司的关注。承担了多项国际合作项目,包括:
Motorola, DSP程序设计环境 该项目是一个图形化的集成环境,包括调试器,性能分析器,行为监视器等。
#20
记号
#21
PLC做原理实现容易,做产品难哪!PLC的使用环境千差万别,首要的是可靠性。在这方面,没有人愿意冒险使用一个陌生的牌子,除非这个项目对可靠性要求不高。可靠性差正是中国产品的通,要知道,在某些情况下,可靠性是用成本换来的,而寻求低成本高可靠性的产品,才是真正的课题。
#22
厉害
#23
现在都不用梯形图了,,,用结构化的编程语言。这样要好些!!!
#24
需要对一块AVR 8515的板,进行操作。
手里有一个汇编程序。
对输出点操作相关的句子是:
Y开头的为输出点。
.EQU OUTPORT1=$C000;$3805 ;D0_D7 Y9,YA,YB,YC,Y5,Y6,Y7,Y8 有效电平为0
.EQU OUTPORT2=$D000;$3806 ;D0_D7 YD,YG,YF,YE,Y3,Y2,Y1,Y4 有效电平为0
LDI TEMP,$0FF
STS OUTDATE1,TEMP
STS OUTDATE2,TEMP ;输入继电器初始化
STS OUTPORT1,TEMP
STS OUTPORT2,TEMP
在ICC中怎么实现上面几句
比如如何使Y1为高电平。
手里有一个汇编程序。
对输出点操作相关的句子是:
Y开头的为输出点。
.EQU OUTPORT1=$C000;$3805 ;D0_D7 Y9,YA,YB,YC,Y5,Y6,Y7,Y8 有效电平为0
.EQU OUTPORT2=$D000;$3806 ;D0_D7 YD,YG,YF,YE,Y3,Y2,Y1,Y4 有效电平为0
LDI TEMP,$0FF
STS OUTDATE1,TEMP
STS OUTDATE2,TEMP ;输入继电器初始化
STS OUTPORT1,TEMP
STS OUTPORT2,TEMP
在ICC中怎么实现上面几句
比如如何使Y1为高电平。
#25
没想到也有人想做这个。
我现在已经完成了基于三菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
解释器动作分析也做完了,但是尚未实现。等实现了这个再试试。
我现在已经完成了基于三菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
解释器动作分析也做完了,但是尚未实现。等实现了这个再试试。
#26
厉害
我现在是连PLC都不怎么会用
我现在是连PLC都不怎么会用
#27
以前教学,都教的是国外,西门子和日本的PLC多些,没有一个是国产的,前一段想开发一个PLC的通用软件,写一半发现统一几乎不可能,就停了,很希望能有国产的plc在性能上和国外的能相比呀!工控上面应用,不像家里的PC,不行就reset!
#28
目前,项目的进展是PLC中的虚拟机已经实现。
对基于菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
已经实现。
目标是通用集成化梯形图图形开发系统,集编程,编译/反编译,通讯,监控于一体。
对基于菱FX系列的梯形图源程序的分析,逻辑检查,虚拟机中间代码生成。
已经实现。
目标是通用集成化梯形图图形开发系统,集编程,编译/反编译,通讯,监控于一体。