揭开三菱PLC的面纱,原来如此简单。。。
原来这个话题在这里这么火,我也来凑凑热闹。本人研究自制PLC半年多了,头两个月自己开发了编译软件和AVR核PLC板子。用起来也还可以,颇受朋友赏识,目前卖出去10几块板子,20点的和48个点的两种。
去年10月到新公司上班,闲的实在无聊,决定破解三菱PLC的通讯协议,仿造一个FX1N系列PLC。
断断续续至今,已完成大部分破解工作,现在的AVR MEGA128核 PLC板子可以直接用三菱的软件下载梯形图执行并监控,可以与人机触摸屏通讯,IO点可以达到60点以上(看怎么扩展地址了)。就是PLC的步数受MEGA128内部RAM大小限制,只能跑几百步,正在扩展外部RAM,准备用62256,这个月底应该就可以做出一个仿FX1N60MR的PLC。 真的写得很简单,
面纱在那里?没有看到呢。。。 ./emotion/em020.gif 通讯波特率 9600,7,e,1 rs232
电脑端SEND:02 30 30 45 30 32 30 32 03 36 43
发送完了以后
PLC端 ACK: 02 36 32 36 36 03 44 37
SEND:02 45 30 30 30 31 43 30 30 31 03 44 44
ACK: 02 30 41 03 37 34
SEND:02 30 30 45 30 32 30 32 03 36 43
ACK: 02 36 32 36 36 03 44 37
SEND:02 45 30 31 38 30 30 30 32 45 03 45 38
ACK: 02 30 38 30 30 43 35 44 43 30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 03 44 36
SEND:02 45 30 31 38 30 32 45 32 45 03 46 46
ACK: 02 32 30 32 30 46 34 30 39 46 46 30 42 46 34 30 31 45 37 30 33 36 34 30 45 43 37 30 45 44 43 30 45 46 46 30 45 39 30 30 31 46 45 30 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 03 45 35
SEND:02 45 30 30 30 45 30 36 30 32 03 45 35
ACK: 02 31 30 30 30 03 43 34
这些对于FX1N PLC都是固定的开头通讯块。
接下来读取一段程序
SEND: 02 45 30 31 38 30 35 43 34 300345 44
(单元一) (步数*2)
ACK:02 N个字节 03 两个检验码
。
。
。
同上
接着
SEND:02 45 37 37 36 30 45 03 36 31
ACK:06
接下来写程序到PLC
SEND: 02 45 31 31 38 30 35 43 34 30 + 32步指令+03+两个检验码(第一单元)
ACK:06
SEND: 02 45 31 31 38 30 39 43 34 30 + 32步指令+03+两个检验码(第二单元)
ACK:06
。
。
。
同上
接下来
SEND: 02 45 38 37 36 30 45 03 36 32 (写结束)
ACK:06
SEND:02 42 03 34 35 (检验开始)
ACK:06
接下来读取全部刚才所下载程序
SEND: 02 45 30 31 38 30 35 43 34 300345 44
(单元一) (步数*2)
ACK:02 N个字节 03 两个检验码
SEND: 02 45 30 31 38 30 39 43 34 300345 44
(单元二) (步数*2)
ACK:02 N个字节 03 两个检验码
。
。
。
同上
读取完则校验结束,下载过程也全部结束 以上这段通讯密码,我一个网友跟我要,我给他了,他太激动了,给我2K RMB,我说我不能要,他不乐意了,我也不强人所难,就勉为接受,哈哈。 指令编码
30 30 32 34 LD X0
30 31 32 34 LD X1
30 31 34 34 AND X1
30 30 45 35 SET Y0
30 31 45 35 SET Y1
30 30 32 35 LD Y0
30 31 34 35 AND Y1
30 31 35 35 ANI Y1
30 31 35 34 ANI X1
30 30 34 38 AND M0
30 30 44 38 SET M0
32 LD 34 X
33 LDI 35 Y
34 AND 36 T
35 ANI 45 C
36 OR 38 M0-M255
37 ORI 39 M256-M511
38 上升下降沿 41 M512-M767
43 OUT 42 M768-M1023
44 SET 43 M1024-M1279
45 RST 44 M1280-M1535
46 M8000-M8255
43 41 30 31 LDF 43 42 30 31 30 31 38 34 LDF X1
43 42 30 31 LDP 43 41 30 31 30 31 38 34 LDP X1
46 38 46 46 ANB
46 39 46 46 ORB
46 46 46 46 NOP
43 43 30 31 ANDP
43 44 30 31 ANDF
43 45 30 31 ORP
43 46 30 31 ORF
30 46 30 30 END
46 41 46 46 MPS
46 43 46 46 MPP
30 30 30 3630 3138 3030 3038 30 OUT T0 K1
(T0 ) (低8位) (高8位)
30 30 30 4530 3238 3030 3038 30 OUT C0 K2
(T0 ) (低8位) (高8位)
39 34 30 30 ALT
39 34 30 30 30 3138 3430 35 38 30ALT Y1
(ALT )(1 ) (Y)
30 43 30 3030 31 38 45 RST C1
(RST ) (1) (C)
30 43 30 3030 31 38 36 RST T1
(RST ) (1) (T)
以上是规律,很容易总结出来 关注了。。。 希望阿漠进一些62256之类的RAM芯片啊,这样我们买起来就方便了。
上次跟你们邮购买了个STK500下载器,货到付款,真是太方便了,希望芯片种类再多些,那样OURAVR就是我买东西的首选了。 楼主真强 这么说来收到2千元的礼物了...谢谢! 是啊,说来也巧,那位兄弟的公司就是卖仿三菱FX1S PLC的控制板的,卖的不错,一个月就几十块板子的销售量。他只是搞硬件设计,老板不透露51核的代码,所以就对我的代码特别感兴趣。 关注,有机会详谈 avr不适合做plc处理器呢 一般都用16位的日立的芯片?8位机做的是玩具,智能继电器应该可以的。三凌的破解网上漫天飞啊,毕竟是九十年代的产品,上位机软件和下位机都没有加密数据的。不过三凌就是牛气,不管你仿的再象还是不如它的。 很简单啊,用串口侦听记录软件就可以了啊。关键要研究命令解释程序及地址分配。 我只想看看他的硬件电路. 我的实验硬件电路是IO点都加光偶隔离,但未象三菱那样加RC二次滤波,外部7.3728MHZ晶振,MAX232与电脑COM口通讯,电路双电源,5V 24V,5V由24V经LM2596转成,还没扩展RAM 与EEPROM,PLC程序暂时存在MEGA128内部的4K SRAM 与 4K EEPROM中。现在正在画新PCB,准备外扩62256 与 AT24C512,输入IO点加RC滤波,输出点驱动24V继电器或D882,二者都有预留PCB位置,不准备引入时钟系统,还要加电池太麻烦。
我的QQ 8451660感兴趣的朋友可以和我交流。 PLC的工作原理是写一个具有许多可变参数的单片机程序框架,然后用三菱的软件下载这些参数进去,保存并运行,就成了一个固定参数的单片机控制板实例了。
难点:1 与三菱软件通讯
2 命令解释
3 抗干扰
开发初衷,我带了个比我大3岁的徒弟,钳工出身,他只学会了三菱PLC,本来还想教他AVR的,可他看到洋码码就晕了,所以想开发一个仿三菱的控制板,这样他也可以用单片机板了,就为公司节约了成本。 PLC好用,高可靠不用说。其实功能指令是最重要,楼主的编译软件支持吗??? 他基本指令都实现了,功能指令实现也不是问题!只要规划好栈的问题就可以了.
功能指令最重要到也不一定.因为这种PLC上不了台面,基本上内部消化,只要基本指令可完成复杂的逻辑控制已经实现目的了!
有兴趣研究的朋友可以看三凌的*.PMW文件,地址0X15C开始.就是对应的中间指令码.
也就是楼主贴出来的!自己要做个解释器.
个人认为,PLC的瓶颈在电源上.80%问题出在这里. 电源部分直接用24V的开关电源啊,不过板子的电源和电磁阀的电源分开,用两个电源。我的一个DEMO板已经在朋友的一台USB连接器自动组装机上跑了几个月了,还带步进马达控制,除了他嫌速度慢让我改过一次之外,没有出现稳定性问题。 9楼:那位兄弟的公司就是卖仿三菱FX1S PLC的控制板的。
请问哪里能卖到这种板?
我的信箱:gao.chaoning@yahoo.com 顶了 等我这个月底把板子做出来就可以给大家试用了。
个人感觉 MEGA128的抗干扰性能是最好的,而MEGA8不只是存储空间小,稳定性也差好多。
-----此内容被biscuit2于2007-03-10,20:13:33编辑过 强烈关注ing biscuit2
感谢搂住的资料,不顾有几点请教
1,你的plc是那种方式执行的,翻译行,还是直接生成源代码
2,单步时间能达到多少?? 3,有没有朋友多提供一些,PLC硬件原理图设计资料,供大家研究。 肯定是翻译型的啊,市场上的PLC都是这么工作的. 感兴趣,观注 avr翻译型的我以前做过,但不速度我法满足工业要求,不知楼值得单步时间是多少,
我做过直接编译的还行,ld x000 这样的指令 2个时钟做到
不知楼长 翻译型的怎么解决速度问题 速度不是很快,要好几个时钟周期吧 但市场定位不一样啊,对于速度要求不高的机械控制,这个速度绰绰有余了,不是吗? 我知道某些智能继电器是用的51核的单片机,但是这个单片机是特制的ic,ld指令是硬件执行的。 既然是51核,怎么会支持硬件执行LD指令,除非是51核的超集,编译器也支持LD指令。 AVR编译型的"LD X0" 2个时钟可以完成?!我认为AVR中绝对是不可能实现的!难道不用栈?!wangyu49不妨在思想上开导开导我. wangyu49的意思就是在下载梯形图的时候就一次一劳永逸的把LD X0 转化成 if(x(0)==1)
而不用运行时每扫描到这一步都要翻译一次,这样速度不就快了。if(x(0)==1)这个语句就2个时钟周期左右吧。
我认为,要这样做,上位机的编译软件的工作量就很大了,首先把梯形图转化成对应单片机的C语言,再转成能在目标单片机上执行的机器码,HEX文件,在通过这个软件烧写单片机的程序存储FLASH,这样就能让PLC程序高速的在MCU上运行了。
但是问题来了,怎么从MCU读取梯形图指令呢,这个是PLC的必备功能。所以在上一步的上位机软件里还得把梯形图也下载到MCU的EEPROM中,这样才算一个完整过程。 Qhjh
別的不感誇口ld X000肯定2个周期,压一次栈就行 做个书签,等待搂主的进一步动作。 编译型的就拉到了,不用读了.书写器也就省了,呵呵!
国内见到过,用软件将PMW文件翻译成HEX的做法.(一国内PLC商).
我认为是不可能的2个周期,wangyu49既然这么肯定,我推算了一下,请wangyu49指正!
//LD X0
if((XMap&0x1) == 1) SkMap++; 不否认是两周期.
条件1.XMap 和SkMap 必须位于R0-R31之间.
条件2.SkMap的栈必须事先是空的.
wangyu49别见怪,是我思想封闭,从PLC角度出发了,我认为8级栈空间,绝对是不够的.
所以...,呵呵抱歉!
我的实现方法(解释型的):
//访问X映射区
LDI R30,LOW(XMap)
LDI R31,HIGH(XMap)
LDR16,Z
//搜索操作数对应的位信息
LDI R17,0X00
CPR17,DAT
BRNEPC+3
BST R16,0// X0
RET
INC R17
CPR17,DAT
BRNEPC+3
BST R16,1// X1
........
........
//压栈
LSL SkMapl
ROL SkMaph ;考虑到复杂逻辑情况,增大栈区.
BLD SkMapl,0 ; X映射区位于0x70
RET biscuit2
搂住的说的正是
我的意思是分2部分1部分是固定的类似于Bootloader负责代码上传,或下在
另一部分是执行的梯形图目标代码
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=585933&bbs_page_no=1&sub_kind_id=2065&bbs_id=1000 Qhjh
我已开始用c做但是内存使用不够灵活
用汇编肯定能做到,
这里面有汇编语言技巧问题,
就如汇编可以在没有RAM得状况下调用子程序自如,c我没试过 高手如云啊,鄙人抛块砖而已。。。 biscuit2继续抛吧.下次抛块玉.这个论坛有不少网友对PLC感兴趣. 厉害啊!有这目标啊!加油! 感慨万分!支持你们! 做了两天的扩展RAM,还是没搞定,今天冷静下来想想,干吗非要扩展呢,PLC的程式能装2000步就够了,而且我的单片机程序对RAM的利用还不够精简,还有大把的压缩空间,最终决定还是采用单芯片+iic EEPROM方案,又稳定又简洁。现在手头上已经有以前LAY好的板子了,可以基本上不怎么改动,准备几天时间调试好就传上来供大家交流。
我的PLC的特色,它就是个三菱FX1N PLC可以用三菱软件直接下载
直接监控
与任意人机触摸屏通讯 不错,顶一个。
感觉IIC速度太慢了。 只是在下载程序和PLC上电的时候读写一次占点时间,把指令调入RAM运行,不影响指令运行速度。 M128内部的FLASH不够吗,何必还要外扩EEPROM? 支持一下 全部在sram运行只能跑几百步,再大就有困难了。
我前段时间也写了个简单的,支持液晶和上位机或下位机自编程,不过在M8里只能跑几十步而已,iic速度又太慢。 MEGA128内部的EEPROM只有4K,肯定不够用,内部FLASH虽然大,但不知道怎么可以当成EEPROM来保存数据,还是外括AT24C512算了,用的熟练了,接线又简单,到时候还可以做成密码狗防破解。 可惜啊.本来支持外部SRAM挺好的,干嘛放弃了呢!
说说我的硬件构架吧!
层开关电源(呵呵就是AC/DC的,支持80-260V)
层主CPU板,M162+62256+电池
层I/0板(M16)
M16和M162通过TWI通讯!
双CPU不是就没有烦恼了啊! 既然扩了RAM,何必还要M16采集I/O呢?
直接用总线采集I/O不就行了? 用总线可以啊!贴片的8155比M16还要贵! Qhjh
为什么要那么复杂???
直接用373所存输出,240采集输入不就行了,反正i/o速度要求不高为什么要用8155?
再就是可否把程序(解释执行部分)放在boot区,然后读取0x0000区的数据(plc指令码) 可以考虑使用一片EPM3xxx的CPLD挂在总线上,价格不高,可扩的口应该够多的了。 不复杂啊.TWI不是挺好的啊,PCB布线上也容易啊!
M16的物理I/0口直接映射到M162的RAM中,给个片段,这个是以前做的用SPI口,用C实现的.
#define Y0ON() SpiOneMap &= 0xfe
#define Y0OFF() SpiOneMap |= 0x01
#define Y1ON() SpiOneMap &= 0xfD
#define Y1OFF() SpiOneMap |= 0x02
#define Y2ON() SpiOneMap &= 0xfB
#define Y2OFF() SpiOneMap |= 0x04
#define Y3ON() SpiOneMap &= 0xf7
#define Y3OFF() SpiOneMap |= 0x08
#define Y4ON() SpiOneMap &= 0xEF
#define Y4OFF() SpiOneMap |= 0x10
#define Y5ON() SpiOneMap &= 0xDF
#define Y5OFF() SpiOneMap |= 0x20
#define Y6ON() SpiOneMap &= 0xBF
#define Y6OFF() SpiOneMap |= 0x40
#define Y7ON() SpiOneMap &= 0x7F
#define Y7OFF() SpiOneMap |= 0x80
我的系统都是多核处理,成本超不出多少,干活不累.
工业上用,不要太计较成本啊!(每天少抽1包烟就节省了)
一个原则:怎么简单就怎么搞.
wangyu49 ,我这个构架,很多人会喜欢的!
-----此内容被Qhjh于2007-03-15,11:56:54编辑过 双MCU工作不是很稳定,电路中最脆弱的就是MCU了,现在你给他整两个,DOWN机的概率不是更高了吗?
有的时候不能偷懒的,如果这个双MCU的板子用在你的汽车的发动机控制上,你敢开出去吗,那天你要有这个信心了,你就设计到家了,哈哈。 问题复杂了.双MCU和单MCU 一个100步一个50步.
至于干扰的抑制,理论上也要吃透,培养分析和对策的能力.
实际中,边测试边修改,如果还是不行的话,就要加成本.比如ADC用,DC-DC的文波系数太大,就只有换线性电源了.或者其它方法!
干扰不可怕,怕的是没有思想去对策!有时我常常也不知道原因,就找个入口,去模拟去观察!
一个一个去排除,对于成本敏感的都最终可以找到一个平衡点!
汽车上的方向机电子组力系统(EPS),我设计过,改过4版,这个都很正常的.设计不到家,但不怕,可以重来啊! 比较支持biscuit2的观点,单板双mcu在本项目中我不是很主张(对提高MCU效率提升意义不大); 确实,可靠性与是否采用多CPU没有太大关系。顶多也就是概率上的一点增加。曾经看过一款控制器,6CPU协同工作,一样卖的很好。
但【52楼】 Qhjh 所说方案,我觉得完全没必要使用双CPU啊,有更简单,成本更低,相对的高可靠性的单CPU方案啊。
单纯的使用CPU来扩展I/O,有这个必要吗? 我是深思过的!
这个类PLC只能内部消化,对外没有人啊.
我的构架只要更换应用板,就可打切到其它项目上啊!这个是设计的最终目的.
--------------------------------------------------------------------
省成本的来了.
现在工厂要求设计1路0-10V模拟量输入/输出,控制变频器.俺用LM331V/F,F/V.呵呵!只要重新设计应用板上就可以了! 保留看法,关注 今天终于扩展62256成功了,这下RAM够用了,再外加个24C512存储PLC梯形图指令和掉电保护数据,准备用FM24C512,铁电存储器,理想擦写寿命是10亿次,速度也很快。
程序写了3000多行,ICC AVR编译报错,说文件大于64K,于是我就拆成两个C文件了,一大堆的INCLUDE文件,麻烦,全局变量,MAPPING 地址,终于编译通过。 有外部RAM就是爽!T,M可以标准实现了.
三凌定时器32767=0x7fff!
0x7fff+1 = 0x1000,这个设计的巧妙啊.
呵呵.
内部RAM不够用. 恭喜了 好贴!狂顶!!!! 最好的是M162+62256,我写的解释器的核心只有6KB的代码,支持130条指令,增加一条高级指令要不了多少空间的. 楼上的兄弟做的PLC能和三菱的软件通讯吗? 和三菱通讯是小事情,关键是解释器的效率。
biscuit2 向前冲,我和mimikankan会跟紧跟的! 我和你们的路线相反,我只是简单实现解释的代码后就开始主攻三菱的破解,能够兼容这个软件就是最好的卖点。MICROSOFT的 VB为什么那么成功呢,难道是VB的执行效率特别高,事实证明不是的,是界面友好,门槛抵,现在全球有几百万的VB开发者,这个就是卖点。 硬件的稳定性与效率是我最后考虑的
最后集中精力解决。
-----此内容被biscuit2于2007-03-16,22:07:10编辑过 通讯早就搞定了.监控也没有问题了!只是没有人要啊!
这个东西,其实很多人都搞定了,一些自动化公司就李逵李斧的互弄.
----------------------------------------------------------------------
电脑上用串口映射方式测试破解.效率高,三凌 COM1<->KEIL COMX.
数据放到XDATA,一清二楚! Qhjh
首先我觉本项目在技术研究上意义多于实用性。
你提的没人要,我觉得很正常。
本项目从开始目标就不确定,从硬件要求的设计,软件的流程设计,都没有做到系统话分析.
包括产品的 功能、技术指标、最大成本、可靠性,延展性,在预定环境下测试周期,等一系列问题,没有明确的确定。
我的观点
avr-做的PLC做学习板很不错。
做产品难度很大,技术指标上讲avr-PLC速度很难达到目前市面通用的PLC,其次成本并不是很低,即便是由高手做到以上两点,该产品的扩展性很差(有点儿像小灵通,在怎么开发也
没多大作用,基础决定了)。 唉......
我也是做工业控制的.一片AVR 一心一意全速运行.都忙不过来.
那还有空脱裤子放屁. 做一个"PLC 指令解释程序"
由于要用工业现成触摸屏.做人机界面.
只好研究了一下,多CPU并行工作.呵呵......效果还不错.
还有我发现,做系统,写代码的时间只有 3-5天,而硬件设计及系统结构设计最少也要150天.
我搞一个东东,写程序只用了 5天,前前后后花了 6个月.(事实说明,代码所用工时并不多)
做为一个会用.高级语言的人,再MCU用 PLC 语言去开发东东,有点脱裤子放屁的感觉.
但是想做工控产品的人,三菱或别家的PLC 通讯协议是有必要研究. 可以学到很多东东.也是很有实际作用.
我说话,粗了点,不好意思. (改不了,本性啊) 1.要6-7个有水平的有实战过的(实在没有合适对象,找些研究生回来,要名牌的.),起码要个100万做启动.1个人1个月平均1万要吧(钱少了,做不出好东西),6个月拿出样机就要42万,平台搭搭,关系跑跑(科委),打模,报废.100万出了样机,钱一点都剩不下来,
2.没有钱了.样机OK了,要送省技监局,要请专家(浙大做PLC有先天优势)开个鉴定会,户口可以解决了,推吧,同时技术人员还得养着(养着养着,国产PLC市场好的话,不好得话,总有核心人员会跳槽,就等于大学里帮别人养老婆,),反正没有个500万以上,就不要去想做这个玩意!!
有了100万,我就投资股票了,不用看人脸色.同样都是谈技术!
------------------------------------------------------------------------------
3.混水摸鱼的产品也可以.就当VB来耍,也要技高胆大,同时要有背景.起码有个配套厂很乐意用.
4.我想大家也都是研究研究怎么回事.高级的PLC和嵌入式系统差不多了.中小型的PLC会单片机的就没有必要去深入理解了.解释型的可以看作SWITCH-CASE的结构.解释器的效率看水平了!要研究的是EMC技术,这个有前途!!!
5.我直接公开,各种形状的三菱PLC都会爬出来.觉得还是慢慢来的好!
6.biscuit2继续,还要坚持!! 系统分析时间最长,象我们这些硬件,软件要全盘考虑!这个过不了,推翻重来,就要费时间了!
多核有好处.做过的都有体会.
1.主CPU就是一个监控者,20MS查询下级一次,没有事情,就打打牌,接接电话,干自己喜欢干的事情,就是不能让自己给累着了.
2.下级是累了疏忽还是真的病晕了,怎么不理我,先送盆冷水关心下(复位从机),实在不行,出了大事情,要马上报告,自己不要担着,压着,让全部下级都先趴下. 赞同以上观点 "做为一个会用.高级语言的人,再MCU用 PLC 语言去开发东东,有点脱裤子放屁的感觉. "
此句仅仅适用于象你这样的高手吧
写电脑游戏的人不一定是拿来自己玩的,玩游戏的大部分都不会写游戏。
当然,开发PLC的人,不一定就自己使用PLC,用PLC的人也大部分不会开发PLC啊。
所以我觉得你这个逻辑有点偏激,毕竟懂PLC梯形图编程的人还是远远多于会MCU的,为什么我就不能为他们搭建一个成本低的门槛呢? 顶啊!
Qhjh、biscuit2等高手们继续,给我等新手上上课,也是一件造福的事啊! 这里我谈一下对MCU选片的看法
AVR 系列 与同类产品的比较
速度优势 ---差不了许多
可靠性优势 ---差不了许多
功耗优势 ---差不了许多
性价比 ---最优
m128优势一般,不如直接用ARM7
所以AVR开发的产品性价比是最的的卖点,如果搞得产品失去了性价比的优势,实在可惜。
倒不如直接选 16位 ARM7 或32位的MCU了。 ARM7做工控的实例接触的少,网上也很少有现成的例子,到是用来做手机 路由器 游戏机的比较多,所以不敢用啊,再说主频升到那么高也难以驾御啊,要漫漫来。 楼主太牛了,做plc,软件难度〉〉〉硬件难度 今天终于把PCB画出雏形了,上传一份给大家看看,提点建议,特别是该怎么布局好看些!
PROTEL 99SE
点击此处下载armok01147080.rar 偶以前也喜欢用PLC,因为那时用MCU老是被干扰,现在更喜欢MCU了,因为对付干扰已经很有经验了。用C/C++其实比用梯形图直接的多!!!由其是在实现复杂的通信协义时,C/C++更直接,更有效!!! 工控系统工程中,PLC 通用性、可靠性强,义维护、成本低,设计周期短。
MCU比较个性化,通用性差、开发周期相对较长、可靠性比较难控制、维护难、成本相对较高(达不到一定数量)。
所以工控系统工程(尤其是大型工程),尽可能用PLC。 TO: 【79楼】 biscuit2
不好意思:我的言语是偏激了.
我在发贴时就有声明.(我说话,粗了点,不好意思. (改不了,本性啊) )
我对开发PLC 以前也很感兴趣.后来发现不现实.
我只想说一句: 忠言*耳.路在自己脚下,不要因别人的否定,而不前;也不要一时迷信而浪费人民币及时间.
我现在发贴只想说声:对不起! 有兴趣聊的,我们可以继续在这个主题下,一边聊PLC一边聊技术细节!
最近要实现的东东给大家看看,本人现在正在考虑如何对通讯的安全作到万无一失的保证!
http://cache.amobbs.com/bbs_upload782111/files_6/armok01147141.jpg
TWI通讯都是有主机主动发起"读""写"操作,从机属于被动应答.
传统的RS-485多机通讯的一帧信息基本上:[地址][信息][校验].
TWI对于地址可以不作识别.因此:[信息][校验].
关于信息和校验是那些内容和什么校验方式,完全自由,这个没有讨论的必要.
------------------------------------------------------------------------
想和大家讨论一下应答机制-挂号信的实现.
1.以前,从机少,主机信息写入后,就立刻开始读入(读从机应答信息).当然如果信息量大的话,假如从机不是边接收边解释的话,会有一个超时机制.主机会等,(和STK500协议基本相似),
假如,从机校验发现错误,应答时会提交一个错误内容.主机会重复写,这个写入次数也是有规定了,我定了3次,连续3次,就报警,这个基本上没有可能出现.
2.现在从机多了,有10多个,呵呵,上1的做法效率会太慢了.
假设,通讯永远不会出错的话,取消应答机制,可见速度是非常之快.
现实中如我心中认为是肯定对的,可制度上应答又必须要做,呵呵,所以,有了一个变通的思想.
主机每10MS到,激活TWI任务(统一操作,这个跟搭飞机一样,觉不搞专机特殊化),先记录下消息的个数,然后执行TWI消息队伍中要写操作的从机消息,各个从机写处理完毕后,然后根据这个消息队伍执行读一圈各个从机的应答信息.这个方法,效率上比要等待的方法高很多了,假如正确的弹掉消息,消息数--,全部正确的话,消息数=0了,退出!
有错误的会在根据消息队伍中的消息,再执行一次,应答还是不正确的话,就只有退出了,转到错误处理程序中了.
仔细看,要去读从机的数据怎么办?呵呵,当然也是先写入读命令后,收取应答信息阶段,从机会将数据+应答信息一起上传的!
大家看看,我这个思想有没有1.严重问题?2.效率是否低? 看不出有什么问题,不过提个小建议。
假定正常通讯的时候队列是10个,错误的时候是否队列中仅保持错误的消息?这个时候队列似乎有点闲置。
建议队列始终保持满负载运行。这样也不需要做消息数维护了,因为队列始终是满的。但新消息的填充需要判断上次消息是否成功。
效率上么,没用过TWI通讯,不过个人觉得应该没有多少改进。 通讯的安全是最关键的啊,谁不想在硬件上省几根线呢,Qhjh再努力。。。 Qhjh:你为什么要那样设计???
工业不赞成用TWI.
为什么不把每个单元独立的做成模块,(如控制模块,温度传感器模块,变频控制模块,等)成本差不了多少,也就是多了max485和7805,然后用485总线连接(2根数据,2根电源),架构有点象汽车控制,不过汽车用的是can(成本太高) 。这样扩展性强,每个模块都可以追加。
485总线在开发协议上麻烦些,要避免总线锁死。 他那个本来就是在一个板上,485速度慢,适合慢速通讯。
TWI在板内通讯没问题。 点击此处下载armok01147422.htm
485可采用高速芯片
这样设计维护方便,那个模块坏了,换一下就行。而且以后系统可以扩展 上下两层.TWI自带了应答机制,一步一个脚印,我是将简单的东西复杂化了. 那么多协处理器,很难保证稳定性啊,速度也都卡在通讯那块了。 我也觉得TWI不太可靠! Qhjh
你说的程序因为没有结构图不是很清楚,我根据你叙述的情况画了结构图。你看一下是不是你说的结构。
点击此处下载armok01147697.htm 我终于搞到一台,结果相当牛。(不愧为国产PLC),现正在测试中,跑了4天还没问题。 搞到一台什么?给兄弟们共享一下! 楼主的工作进行到哪里了?什么时候能欣赏到样机呀?