搜索
bottom↓
回复: 41

发布一下个人近来研究成果(仿30PLC的程序源码,包括通信及指令解释)

[复制链接]

出0入0汤圆

发表于 2009-9-24 16:43:39 | 显示全部楼层 |阅读模式
还有很多未完成及不完善的地方,希望对大家参考上有一定的价值.
本程序中参照了一些其它大虾在之前发布的一些程序,在此对他们表示感谢.
开发环境"Keil uVision3+RealView MDK 3.23中国版"
本程序只在"GX Develope"上测试过,没在"FXGP WIN_C"上测试.(因为我用的是小白版的"WINDOWS7"系统,无法运行FXGP WIN_C)
本程序只在LPC2148开发板上测试过,其它芯片也只要修改几个驱动程序就可以了
好了,在此我就不贴出代码的部分内容了.个人认为这样占地方.认为有用的自己下载.
点击此处下载 ourdev_484889.rar(文件大小:132K) (原文件名:My_PLC.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-9-24 16:57:38 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2009-9-24 17:05:19 | 显示全部楼层
下一步的工作是想将30的指令重解释成自己定义的指令.这样主要是为了提高指令的执行速度.

出0入0汤圆

发表于 2009-9-25 08:43:06 | 显示全部楼层
keil打开出错,出错的原因是环境不正确。
楼主可否启文, 指导如何完成正确环境的搭建,最好附上 响应的类似“RealView MDK 3.23中国版” 软件的下载与配置指导。
谢谢

出0入0汤圆

发表于 2009-9-25 08:53:53 | 显示全部楼层
这是高水平的研究

出0入0汤圆

发表于 2009-9-25 09:07:18 | 显示全部楼层
程序结构并不好,到现在还在大量使用SWTICH,而不能善用函数指针散转,说明我们的技术差距不是一点点,程序运行效率更不可比了.

函数指针数组的妙用
--函数指针数组代替switch
来源:yesky.com 作者:陈德林更新日期:2004-11-07
点击此处下载 ourdev_485165.pdf(文件大小:146K) (原文件名:函数指针数组的妙用.pdf)

许工的"c 函数指针"贴子沉下去了,说明我们还没意识到程序结构对讲究运行效率工控作品的重要性.
c 函数指针 http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3462715&bbs_page_no=2&bbs_id=3041


到现在还没有见到讨论工控运行效率的贴子,抱怨国人不用国品的倒不少.

真诚希望能有讨论与国际品牌差距的贴子,知"差"而奋进!

出0入0汤圆

发表于 2009-9-25 10:36:52 | 显示全部楼层
不管什么说,首先要支持下,呵呵。
这个代码的质量比前面小卢已经进步了不少。

另外,不知道有人分析过FX的文件存储结构吗?

出0入0汤圆

发表于 2009-9-25 11:58:43 | 显示全部楼层
函数指针数组代替switch
这方法好啊,的确得好好学下这方法

出0入0汤圆

 楼主| 发表于 2009-9-25 13:21:21 | 显示全部楼层
回【3楼】 guoj
先安装"keil c51 8.05"以上版本,再安装"mdk305"以上版本,(不一定是中国版,中国版只是把帮助做成中文.及专为中文操作系统修改了一下注释部分而已.)我给出的就是一个工程文件,所以只要软件是对的不用再做其它配置了.因为软件太大,所以在此就不上传了.你在网上找一下很多的.

出0入0汤圆

 楼主| 发表于 2009-9-25 13:29:41 | 显示全部楼层
5楼】 bkkman
现在由于个人能力有限,只能做到这样了.希望那位大虾修改出一个例程,以便于小弟也学习一下.谢谢
其实我本人是想先做出一个可以实现功能的程序先就好,最后还是想用FPGA来实现真正的PLC,因为个人认为这样才能完全支持所有30的指令,而又能处理速度上快过30的PLC.当然这可能成本会高一些,不过我是想把它做成触摸屏和PLC的一体机.这样一来就可以又处理触摸屏的指令也处理PLC的指令,和做液晶的驱动功能.总体上的成本就会下降了,而又能保正执行上的速度

出0入0汤圆

发表于 2009-9-25 13:51:27 | 显示全部楼层
细化,你的程序太繁杂了。理清结构,把公用的东西独立开来。

出0入0汤圆

 楼主| 发表于 2009-9-25 14:04:05 | 显示全部楼层
【10楼】 heky
现在的程序就是为执行速度快一些,所以很多程序没做成函数的方式,你想做成函数的话你在调用时就得CALL它,CALL指令就会有程序跳转及返回的动作,这都会使程序执行减慢.所以一些程序量不大的地方个人都不做成函数.而是使用"#define"来声明的.再说我使用的LPC2148的ROM有512K所以不想为了节省代码空间而掉了执行速度.这是个人的理解,可能有误,希望大虾们指点一下

出0入0汤圆

发表于 2009-9-25 14:09:44 | 显示全部楼层
你的观点就是错误的。call减慢程序了吗?如果你对call减慢程序都在意的话,要么是大牛,要么是菜鸟。

plc这种系统,结构稳健性才是最关键的。

出0入0汤圆

 楼主| 发表于 2009-9-25 14:22:00 | 显示全部楼层
有理,看来个人编程方面还是有很多要跟各位学习的.我本也是做成函数的形式的,只是后来在KEIL中仿真是发现CALL比直接调用慢了0.000002s所以才修改了程序,原本还自认为这是聪明的做法来着.看来还是要再学习才行呀

出0入0汤圆

发表于 2009-9-25 14:27:48 | 显示全部楼层
你发布出来的程序 维护成本 > 开发成本

出0入0汤圆

发表于 2009-9-26 05:42:05 | 显示全部楼层
无论是函数指针数组或汇编的散转,实质是查表操作,其效率是SWITCH不可比拟的。

有关函数指针数组,当你用关键字“函数指针数组”GOOGLE或百度一下,你可看到很多参考资料。

你更可就近参考本版块版主许工的贴“PLC 梯型图 解释型监控 C Code示范程序(用于 51单片机)”http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3589911&bbs_page_no=1&bbs_id=3041

出0入0汤圆

 楼主| 发表于 2009-9-26 17:30:26 | 显示全部楼层
【15楼】 bkkman
个人看了一下用"SWITCH"编译器编译出来的代码就是以查表的方式在实现的,所以个人不太认同你的观点.我的编译器版本为"MDK 3.23".

出0入8汤圆

发表于 2009-10-16 20:27:35 | 显示全部楼层
"函数指针数组"真的要好好学一学,我平时就是喜欢用switch

出0入0汤圆

发表于 2009-10-16 21:39:04 | 显示全部楼层
函数并不一定非要call和return的损失的,比如用inline function

出0入0汤圆

发表于 2009-10-20 08:41:42 | 显示全部楼层
支持一下!

出0入0汤圆

发表于 2009-10-23 16:22:31 | 显示全部楼层
你的程序写的很好啊,崇拜中,5楼说用函数指针,关键是你的CASE里面不是按顺序函数啊,怎么用?就算用也有很多缺点啊。5楼要么是菜鸟,要么是真高人。
你这个高人很谦虚啊,
做个自己的上位机就可以“批量出货”了,呵呵

另外问一下 PLC_PROG_START_ADD  0x40006000 不是RAM地址吗,掉电不保存的吧。每次都要先下载程序再运行?

还有如何实现加密? 如果PLC程序存在片内FLASH里面,要再更新PLC程序的话就得整个芯片擦出才能更新了;而且如果芯片不加密,用串口ISP就读出来了

出0入0汤圆

发表于 2009-10-23 16:29:52 | 显示全部楼层
小白版的"WINDOWS7"系统在哪里可以下载到啊?好不好用?gougou了一下,好多结果,不知该下哪个。

出0入0汤圆

 楼主| 发表于 2009-10-23 16:40:37 | 显示全部楼层
【21楼】 oufuqiang 欧福强
小白版的"WINDOWS7" 我现在用的是7264中文版,IE有很多问题.文字也有乱码.听说正式版发布了.我看兄弟还是等一下吧

出0入0汤圆

 楼主| 发表于 2009-10-23 16:55:07 | 显示全部楼层
【20楼】 zhuchina
我是进这论坛后看到很多不错的仿PLC程序后才突发奇想自己也玩它一下的.编写的这些程序还有太多的问题.我这时间正在研究怎第用FPGA来实现一个PLC的CPU.不怕兄弟笑话,我到现在还没有什么FPGA的概念.怎么写硬件描述语言的也没什么经验(以前只写过一个用CPLD做的液晶驱动).只是个人觉得这个很好玩而已.当大家都在用单片机或ARM做PLC时我在用FPGA做专用PLC用CPU这样才有我的个性呀,呵呵.当然这成本就高一些了,所以就没想过要把它做成成品,就算要做成成品也得附加其它功能(如触摸屏)这样才能分担开成本了.

出0入0汤圆

发表于 2009-10-23 17:08:18 | 显示全部楼层
老兄,我的留言这么快就回复了啊,上面写的后面还有两个问题没请教到呢

出0入0汤圆

发表于 2009-10-23 17:11:39 | 显示全部楼层
FPGA做的PLC可以解决很多问题,如加密,设备不暂停的情况下下载程序,速度等

出0入0汤圆

 楼主| 发表于 2009-10-23 17:18:20 | 显示全部楼层
PLC_PROG_START_ADD  是RAM地址,因为我没做IAP.(可以自己做好的把地址改成你的IAP PROG的地址就好)因为这程序我拿来玩的,没想做成成品
还有如何实现加密?  我也没做FLASH加密算法,网上很多例程.你可以找一下.这个我没做过也不太了解.因为我从来没加密过我写的程序,也没必要

出0入0汤圆

发表于 2009-10-23 17:27:09 | 显示全部楼层
谢谢你的回复,预祝你的FPGA顺利,那才是真正的PLC啊。

出0入0汤圆

发表于 2009-10-23 17:53:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-27 10:32:42 | 显示全部楼层
请教几个RZ的问题:
1.GX的通信下载指令是否与SWOPC-WIN-C 上位机软件 是一致的?
2.GX的工程文件有好多个,他下载的是所有的文件呢?还是POU里面的呢?

出0入0汤圆

发表于 2011-5-21 12:45:39 | 显示全部楼层
我还不会玩,但是要支持

出0入0汤圆

发表于 2011-5-30 11:03:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-14 21:27:44 | 显示全部楼层
崇拜中

出0入0汤圆

发表于 2012-5-5 17:57:08 | 显示全部楼层
学习中。。。

出0入0汤圆

发表于 2012-5-12 21:14:06 | 显示全部楼层
学习下啊

出0入0汤圆

发表于 2012-10-11 23:56:34 | 显示全部楼层
用switch .. case 和用if .. else if 在汇编上基本是一样的,每个判断至少需要2条指令,每条指令1T的话,每次判断至少2T,若有100个case(100条指令),第一个case需要2T,运行到最后一个case,需要200T,这样就造成每条指令的入口(预处理)时间是不一样的。采用散转(函数指针)的方法的每一条指令的入口时间是一样的,就是500条指令也一样。

出0入0汤圆

发表于 2012-10-12 00:00:02 | 显示全部楼层
程序我看过,没有什么章法,结构需要好好的规划和组织。

出0入0汤圆

发表于 2012-11-13 20:09:40 | 显示全部楼层
mark。。。

出0入0汤圆

发表于 2012-12-8 14:13:01 | 显示全部楼层
学习了,函数指针数组。。。

出0入0汤圆

发表于 2013-2-17 11:36:08 | 显示全部楼层
Thanks for sharing!

出0入0汤圆

发表于 2015-11-17 22:20:53 | 显示全部楼层
mark、学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 17:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表