|
首先,向大家道个歉,自从加入PLC DIY团队至今已经有近5个月的时间.其中前两个月恶补PLC相关知识和编写PLC下载通讯协议的前期准备,从一个什么是PLC都不是很清楚的局面,到现在对PLC有较为细致的了解;第三个月开始全面启动PLC下载通讯协议的软件编写.由于工作上的原因,进度缓慢,开发的陆陆续续,八月初被抽调到福建开发SQL Server软件平台.直至上周才返回.回来近10天,处理了一些工作事宜,利用这周的时间,结合个人开发手册,重新回顾PLC相关开发进度以及开始进一步的探索.终于周四修成正果.这两天完善了一些子程序,整理相关说明和使用文档.现正式发布.
整个开发期间,感谢版主的引导和鼎力支持,同时也感谢网友OSTE和其他一些网友的热心帮助.
接下来,详细说明FX1N PLC 下载通讯的流程
Baud Rate: 9600
StopBits: 1, Parity: Even, DataBits: 7
Baud Rate: 9600
StopBits: 1, Parity: Even, DataBits: 7
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 30 30 45 30 32 30 32 03 36 43 // 查询PLC 类型:FX1N\FX1S
PLC: 02 36 32 36 36 03 44 37 // '6266'PLC型号 FX1N;'C256'PLC型号 FX1S.
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 30 30 30 31 43 30 30 31 03 44 44 // 查询PLC 当前状态:暂停\运行
PLC: 02 30 41 03 37 34 // '0A'PLC 暂停;'09'PLC 运行
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 30 30 45 30 32 30 32 03 36 43 // 查询PLC 类型:FX1N\FX1S
PLC: 02 36 32 36 36 03 44 37 // '6266'PLC型号 FX1N;'C256'PLC型号 FX1S.
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 30 31 38 30 30 30 32 45 03 45 38 // 查询PLC [存储容量]等信息
PLC: 02 30 32 30 30 44 45 43 // 当前为[存储容量]为2K的FX1N PLC回复
PLC: 42 30 30 30 30 30 30 30
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 32 30 32
PLC: 30 32 30 32 30 03 44 46
PC : 02 45 30 31 38 30 32 45 32 45 03 46 46 // 未知查询实为何意.暂且定位为固定通讯协议.
PLC: 02 32 30 32 30 46 34 30 // 未知回复实为何意.暂且定位为固定通讯协议.
PLC: 39 46 46 30 42 46 34 30
PLC: 31 45 37 30 33 36 34 30
PLC: 45 43 37 30 45 44 43 30
PLC: 45 46 46 30 45 39 30 30
PLC: 31 46 45 30 33 30 30 30
PLC: 30 30 30 30 30 30 30 30
PLC: 30 30 30 30 30 30 30 30
PLC: 30 30 30 30 30 30 30 30
PLC: 30 30 30 30 30 30 30 30
PLC: 30 30 30 30 30 30 30 30
PLC: 30 30 30 30 30 03 45 35
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 30 30 30 45 30 36 30 32 03 45 35 // 未知查询实为何意.暂且定位为固定通讯协议.
PLC: 02 30 38 30 30 03 43 42 // 未知回复实为何意.暂且定位为固定通讯协议.
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 30 31 38 30 35 43 34 30 03 45 44 // 查询0x805c 地址开始的数据
PLC: xx xx ...
PC : 02 45 30 31 38 30 39 43 33 43 03 30 33
PLC: xx xx ...
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 37 37 36 30 45 03 36 31
PLC: 06 // PLC 接收正确响应
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 31 31 38 30 35 43 34 30 xx xx ... 03 xx xx // 开始从0x805c 地址开始写数据
PLC: 06 // PLC 接收正确响应
PC : 02 45 31 31 38 30 39 43 34 30 xx xx ... 03 xx xx // 0x809c 依次写
PLC: 06 // PLC 接收正确响应
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 38 37 36 30 45 03 36 32 // 未知查询实为何意.暂且定位为固定通讯协议.
PLC: 06 // PLC 接收正确响应
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 42 03 34 35 // 未知查询实为何意.暂且定位为固定通讯协议.
PLC: 06 // PLC 接收正确响应
PC : 05 // ENQ 请求
PLC: 06 // PLC 接收正确响应
PC : 02 45 30 31 38 30 35 43 34 30 03 45 44 // 开始从0x805c 地址开始校验写的数据
PLC: xx xx ...
PC : 02 45 30 31 38 30 39 43 34 30 03 xx xx // 0x809c 依次校验
PLC: xx xx ... // 校验到最后 OVER 完成下载
这里面需要注意的有3:
1.PLC[存储容量],[存储容量]不同的PLC,在回复过程中,略有不同[程序中已总结].本PLC采用32K存储空间,可存储8000步的程序.
2.PLC中所谓的0x805c地址与实际MCU地址的对应关系.例如: PLC(0x805c地址)--相对(0x0000地址)--MCU[IAP地址](0x7c00)[程序中已明确说明]
3.[未知查询语句]的处理[将已发现的有实际意义的语句定义在IAP空间].
[仿三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.1版本]源码如下:
点击此处下载 ourdev_480484.rar(文件大小:74K) (原文件名:MPC82G516 FX1NPLCCom V1.0.1.rar)
简易型PLC PCBProj
点击此处下载 ourdev_480485.rar(文件大小:631K) (原文件名:简易型PLC PCBProj.rar)
8051_Writer_U1_v1.16
点击此处下载 ourdev_480486.rar(文件大小:1.50M) (原文件名:8051_Writer_U1_v1.16.rar)
8051_OCD_ICE_v2.10
点击此处下载 ourdev_480487.rar(文件大小:5.49M) (原文件名:8051_OCD_ICE_v2.10.rar)
8051_COM_port_ISP_v1.04
点击此处下载 ourdev_480488.rar(文件大小:1.89M) (原文件名:8051_COM_port_ISP_v1.04.rar)
FXGPWIN
点击此处下载 ourdev_480489.rar(文件大小:771K) (原文件名:FXGPWIN.rar)
实验用PLC FIREWORKS[截图中]
点击此处下载 ourdev_480490.rar(文件大小:893字节) (原文件名:PLCFIREWORKS.rar)
然后,图文说明使用及验证方法.
-1.KEIL编译通过:
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480493.jpg)
(原文件名:-1.KEIL编译通过.jpg)
0.8051 Writer U1 下载HEX成功[此截图为中文版本的软件,如您使用的软件为英文版本请一一对应即可],此步骤可能在大家领取简易PLC套件的时候已经做了处理,主要目的有四,一是插入COMPortISP V1.04版本的ISP代码,二是设置ISP空间为1K.三是设置IAP空间为32K.四是如图设置熔丝位(FUSE)[可以选中LOCK.SB.]
如果您是新购买的MPC82G516A,那需要一台8051 Writer U1 如图下载HEX(要插入COMPortISP V1.04版本的ISP代码,今后就可以用串口下载程序了).否则无法使用.[即开发基于MPC82G516A的简易PLC第0步是必不可少的]
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480491.jpg)
(原文件名:0.8051 Writer U1 下载HEX成功.jpg)
使用串口下载MPC82G516A请参见第1.2.3.4.步骤
1.1.COMPortISP MCU选型
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480492.jpg)
(原文件名:1.COMPortISP MCU选型.jpg)
2.COMPortISP 加载HEX文件
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480494.jpg)
(原文件名:2.COMPortISP 加载HEX文件.jpg)
3.COMPortISP 加载HEX后
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480495.jpg)
(原文件名:3.COMPortISP 加载HEX后.jpg)
4.COMPortISP 下载HEX成功
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480496.jpg)
(原文件名:4.COMPortISP 下载HEX成功.jpg)
使用FXGPWIN软件下载PLCFireworks-PMW梯形图文件至PLC.请参见第5步至最后
5.打开FXGPWIN软件
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480497.jpg)
(原文件名:5.打开FXGPWIN软件.jpg)
6.用FXGPWIN软件打开PLCFireworks
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480498.jpg)
(原文件名:6.用FXGPWIN软件打开PLCFireworks.jpg)
7.PLCFireworks类型为FX1N--确定
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480499.jpg)
(原文件名:7.PLCFireworks类型为FX1N--确定.jpg)
8.PLCFireworks-PWM梯形图
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480500.jpg)
(原文件名:8.PLCFireworks-PMW梯形图.jpg)
9.依次点击菜单栏PLC--传送--写出
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480501.jpg)
(原文件名:9.依次点击菜单栏PLC--传送--写出.jpg)
10.如果是第一次使用[PLC存储容量--2K]请选择[所有范围]而后单击[确定]
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480502.jpg)
(原文件名:10.如果是第一次使用[PLC存储容量--2K]请选择[所有范围]而后单击确定.jpg)
11.正在写入界面
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480503.jpg)
(原文件名:11.正在写入界面.jpg)
12.正在校验界面
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480504.jpg)
(原文件名:12.正在校验界面.jpg)
13.[范围设置]0~41这样下载速度飞快
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480505.jpg)
(原文件名:13.[范围设置]0~41这样下载速度飞快.jpg)
请注意:
A.第8步的截图下方的PLC存储容量为2K.本次研制的PLC默认初始存储容量为8K.下面介绍正确下载当前梯形图的两种方式:
AA.采用第10步的方法,写出设置中,选择[所有范围]而后单击[确定],采用这种方法会改变PLC存储容量.由8K,变为2K.
AB.选项--参数设置--修改[PLC存储容量]默认为8K,改成8K.请参见以下两张截图.
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480506.jpg)
(原文件名:14.选项--参数设置--修改[PLC存储容量]默认为8K.jpg)
![](http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480507.jpg)
(原文件名:15.设置为8K后梯形图界面.jpg)
B.若PLC存储容量为8K,要下载一个存储容量为2K,41步的PMW梯形图文件,只有在使用AA的方法之后,才可以使用第13步的截图[即范围设置为0~41].否则下载会出错.[实际的FX1N PLC亦是如此.]
最后,请各位针对当前版本下载通讯的程序,提出宝贵意见.不断升级、改进Our PLC的性能.升级版本将陆续在AVR单片机.STM32单片机上实现.详情敬请关注儍娃PLC.
另,再次感谢网友OSTE提供FX1N PLC一台,供实验,提取可靠的通信数据.
卢明君
2009.09.13
以下蓝色文字由版主:yy888 于:2009-09-26,08:07:29 加入。 更新后的 三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.4版本
以下内容为三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.4版本
点击此处下载 ourdev_485313.rar(文件大小:85K) (原文件名:MPC82G516 FX1NPLCCom V1.0.4.rar)
编译后截图如下:
![](http://cache.amobbs.com/bbs_upload782111/files_19/ourdev_485315.jpg)
(原文件名:-1.KEIL编译通过.jpg)
当前版本,改进内容如下:
(摘自【58楼】 yy888 许意义)
三菱PLC一些主要的功能如下:
1. 传送--->读入(写出) 已完成,传送--->核对 功能.(完整实现) ................ ok!
2. 是否可加入 参数设置--->文件寄存器 选项。
即需加入 寄存器数据--->读入(写出,核对) 功能.(请问.寄存器的数据量很大.大概32K.存哪?如何处理.下载协议已经在侦听后分析出来了.只要有地方存取.即可实现.) ................ 文件寄存器 实际上是将部分多余的程序寄存器划出,如程序寄存器空间设定4K, 划出2K文件寄存器,则程序寄存器空间只有2K了。
3. PLC存储器清除 功能..(仅能实现[清除PLC存储空间].[清除数据元件存储空间和[清除位元件存储空间]本来就没有.^_^]) ................ 只要求实现[清除PLC存储空间]。
4. 还有 遥控运行/停止 功能,开始监控 功能. (侦听了很多数据.尚需要理论支撑.希望能够提供一些相关资料) ................ 可晚一步做。
以下蓝色文字由 yy888 于:2009-09-17,06:32:38 加入。
--------------------------------------------------------------------------------
关于 第2条,你可分下面几步走:
1. 先在 参数设置--->文件寄存器 选项 中选择设置一小部分文件寄存器。
2. 调通 传送--->读入(写出,核对) 功能(和不划分文件寄存器时有点异同)。
3. 调通 寄存器数据--->读入(写出,核对) 功能。
--------------------------------------------------------------------------------
修改后:
[文件寄存器(r)]和[注释区(m)]都已经做到PLC当中.
【注意】:仅支持文件寄存器,不支持数据寄存器。数据寄存器的相关内容第三点也有说到,有待于今后升级再考虑。
(摘自【64楼】 oldtom )
重构的几个建议:
0. void FX1NProcessing(void) 这个函数也太庞大了。通信的过程应该是解码,处理,编码的过程,建议还是分开处理可能会好点。
1.检验校验判断单独做一个函数! 检验应该不是CRC校验吧?是和校验吧?
2. 像类似 else if((UartReceiveBuffer[1]==0x45)\
&(UartReceiveBuffer[2] ==0x31)\
&(UartReceiveBuffer[3] ==0x31))
我猜测着可能是功能码吧?建议用宏来定义实现.
--------------------------------------------------------------------------------
修改后:
0.FX1NProcessing是否有必要做成几个分立函数,和如何去做,有待于论证.待功能稳定后的版本问世后会调整这个函数模块.
1.是"和校验"已经将CRC字样改为SUM字样.
2.目前这个功能码究竟是何含义尚不明朗.不是所有的功能码我都能说出其含义.所以有待于最后敲定.敲定后就会在头文件中申明.
3.已经添加了"您在例子中对函数前面加入的函数说明".
4.在[IAP.C]中的IAPFlashProgremMode函数中,加入了.在写字节之前先读取字节.将读取的字节与带写入的字节进行判断,判断不相等后,再写入,相等就不必写入重新写入了.
5.去掉了调试函数FX1NDebug.即下载期间不会再有指示灯指示.
6.RAM控制在(xdata)238+(data)17.0 如果需要今后升级可考虑再节约.
实现节约RAM办法:
在IAP的过程中,原来用256个字节的RAM.现在改为用3个字节的RAM.一个整型循环变量i,一个倒数用的临时变量tempdata,再加一页IAP缓存备份空间.用暂存在IAP内的方法使得RAM的占用量大大减小. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|