搜索
bottom↓
回复: 155

■ 仿三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.1版本 正式发布

  [复制链接]

出0入0汤圆

发表于 2009-9-13 12:35:02 | 显示全部楼层 |阅读模式
首先,向大家道个歉,自从加入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编译通过:

(原文件名:-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步是必不可少的]

(原文件名:0.8051 Writer U1 下载HEX成功.jpg)
使用串口下载MPC82G516A请参见第1.2.3.4.步骤
1.1.COMPortISP MCU选型

(原文件名:1.COMPortISP MCU选型.jpg)
2.COMPortISP 加载HEX文件

(原文件名:2.COMPortISP 加载HEX文件.jpg)
3.COMPortISP 加载HEX后

(原文件名:3.COMPortISP 加载HEX后.jpg)
4.COMPortISP 下载HEX成功

(原文件名:4.COMPortISP 下载HEX成功.jpg)
使用FXGPWIN软件下载PLCFireworks-PMW梯形图文件至PLC.请参见第5步至最后
5.打开FXGPWIN软件

(原文件名:5.打开FXGPWIN软件.jpg)
6.用FXGPWIN软件打开PLCFireworks

(原文件名:6.用FXGPWIN软件打开PLCFireworks.jpg)
7.PLCFireworks类型为FX1N--确定

(原文件名:7.PLCFireworks类型为FX1N--确定.jpg)
8.PLCFireworks-PWM梯形图

(原文件名:8.PLCFireworks-PMW梯形图.jpg)
9.依次点击菜单栏PLC--传送--写出

(原文件名:9.依次点击菜单栏PLC--传送--写出.jpg)
10.如果是第一次使用[PLC存储容量--2K]请选择[所有范围]而后单击[确定]

(原文件名:10.如果是第一次使用[PLC存储容量--2K]请选择[所有范围]而后单击确定.jpg)
11.正在写入界面

(原文件名:11.正在写入界面.jpg)
12.正在校验界面

(原文件名:12.正在校验界面.jpg)
13.[范围设置]0~41这样下载速度飞快

(原文件名:13.[范围设置]0~41这样下载速度飞快.jpg)
请注意:
A.第8步的截图下方的PLC存储容量为2K.本次研制的PLC默认初始存储容量为8K.下面介绍正确下载当前梯形图的两种方式:
AA.采用第10步的方法,写出设置中,选择[所有范围]而后单击[确定],采用这种方法会改变PLC存储容量.由8K,变为2K.
AB.选项--参数设置--修改[PLC存储容量]默认为8K,改成8K.请参见以下两张截图.

(原文件名:14.选项--参数设置--修改[PLC存储容量]默认为8K.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)

编译后截图如下:

(原文件名:-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周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出10入210汤圆

发表于 2009-9-13 12:37:21 | 显示全部楼层
支持一下。

出0入0汤圆

 楼主| 发表于 2009-9-13 12:48:23 | 显示全部楼层
【1楼】 rainbow 老陈
谢谢.

------------------------------------------------------
请各位针对当前版本下载通讯的程序,进行验证,提出宝贵意见.

出0入0汤圆

发表于 2009-9-13 14:15:08 | 显示全部楼层
【2楼】 wisebaby 明君
辛苦了,一来就猛料啊!

情大家快来测试一下啊!

出0入0汤圆

发表于 2009-9-13 15:01:22 | 显示全部楼层
辛苦了!猛料.
谢谢。

出0入0汤圆

发表于 2009-9-13 15:01:22 | 显示全部楼层
辛苦了!猛料.
谢谢。

出0入0汤圆

 楼主| 发表于 2009-9-13 16:26:58 | 显示全部楼层
【3楼】 oste

其实这些东西,完全可以在出差前,再给我一些时间就可以搞定.可惜当时实在是太紧了.

总之,耽搁的时间太久了.理应尽快完成.

出0入0汤圆

发表于 2009-9-13 16:35:57 | 显示全部楼层
辛苦了啊,对傻娃PLC来说这是关键性的一步啊!

出0入0汤圆

 楼主| 发表于 2009-9-13 16:59:20 | 显示全部楼层
【7楼】 zxt_tnt 晓晓

傻娃PLC的开发,自当竭尽全力.

届时会适应具体型号来编写.

出0入0汤圆

发表于 2009-9-13 17:27:29 | 显示全部楼层
【8楼】 wisebaby 明君
明君兄弟,我将FX1N的通讯HEX文件下载下去,再到与FXGP三菱PLC软件写入程时,提示通讯错误的?

图:
(原文件名:未命名.jpg)

出0入0汤圆

 楼主| 发表于 2009-9-13 17:35:23 | 显示全部楼层
【9楼】 cyxavr 又一天

1.请问您知道您的MPC82G516A的IAP空间的大小吗?
本通讯协议要求:(请参见楼主位第0步的截图==0.8051 Writer U1 下载HEX成功==)
A.1K ISP代码空间
B.32K IAP代码空间
2.请问是写入初期就出错了对吗?
如果是,那说明前期的固定通讯协议就没有通过.这个现象,最有可能的就是您的IAP空间大小不对.导致程序初始化过程无法进行.

请参阅 main.c 中以下代码:
        PLCType=IAPFlashReadMode(PLCTypeAddr);                //        上电,核实 PLC 硬件版本号
        if(PLCType!=0)                                                                //        第一次使用. IAP -- "FX1N PLC\r\n".
        {
                for(i=0;i<MCUIAPFLASHSIZE*1024;i+=512)        //        全部擦除
                {
                        IAPFlashErasureMode(PLCIAPCODEAddr+i);
                }
                for(i=0;i<8000*4;i++)
                {
                        IAPFlashProgremMode(PLCIAPCODEAddr+i,0x46);
                }
                IAPFlashProgremMode(PLCTypeAddr,0);
                WriteFlash(PLCIAPCODEAddr,(unsigned char *)(OrderSend4+1),92);
                WriteFlash(PLCTypeAddr+1,(unsigned char *)PLCTypeArray,PLCTypeArrayLen);
                WriteFlash(PLCIAPCODEAddr+32200,(unsigned char *)(OrderSend3+1),92);
                WriteFlash(PLCIAPCODEAddr+32300,(unsigned char *)(OrderSend4+1),92);
                UartSendString(ArrFirstused);
        }
        else UartSendString(ArrPass);

如果IAP空间不对的话,整个初始化会受影响.不会通过的.会死在IAP.C中,具体参阅以下代码:
void IAPFlashProgremMode(unsigned int codeaddr,unsigned char ucdata)        // 编程模式
{
        unsigned char checkdata=0;
        unsigned char retry=0;
        unsigned int  i=0;
        unsigned int  tempaddr=0;
        unsigned char pbuf[512];
        do
        {
                IAPFlashProgrem(codeaddr,ucdata);
                if(++retry>2)                                                                        //        2次尝试机会
                {
                        tempaddr=codeaddr-codeaddr%512;                                //        计算当前页首地址
                        for(i=0;i<512;i++)
                        {
                                pbuf=IAPFlashReadMode(tempaddr+i);        //        读出当前页所有数据,备份
                        }
                        IAPFlashErasureMode(tempaddr);                                //        擦除当前页
                        for(i=0;i<512;i++)                                                        //        将备份写回
                        {
                                if(i==(codeaddr%512))IAPFlashProgrem(codeaddr,ucdata);
                                else IAPFlashProgrem(tempaddr+i,pbuf);
                        }
                }
                checkdata=IAPFlashReadMode(codeaddr);
                if(retry==5)====================================****这里****====================================
                {
                        while(1)        //        出错了,不写了,显示写错误的地址,请核对是否超出IAP空间大小
                        {
                                Value=codeaddr;
                                Out_EY_BIT();
                        }
                }
        }while(checkdata!=ucdata);
}

在if(retry==5)的时候,出错了,不写了,显示写错误的地址,请核对是否超出IAP空间大小.如果您用的是简易型PLC,请连接上显示板,看看地址是在什么位置.如果现实的是0x7C00地址.那么表明ISP与IAP空间标定大小不正确.需用8051 Writer U1经行调整.

出0入0汤圆

发表于 2009-9-13 17:41:14 | 显示全部楼层
在那里可以看到IAP代码空间呢?

一开始写入就提示"通讯错误"的

自己从 从版主那拿到手,只是通过串口下载过程序下去.其他的没有动过.

你说的显示板,是那个变频器面板吗?

出0入0汤圆

 楼主| 发表于 2009-9-13 17:49:09 | 显示全部楼层
【11楼】 cyxavr 又一天

在那里可以看到IAP代码空间呢?

一开始写入就提示"通讯错误"的

自己从 从版主那拿到手,只是通过串口下载过程序下去.其他的没有动过.

====================================================================
IAP代码空间大小需要用8051 Writer U1经行查看.

我相信您在下载的过程中P2.0上的那个指示灯都没有闪烁吧?

初始化没有成功.这个问题等许工上线.问一下发货时IAP空间大小预设的是多少.这个我可以在软件上修改.

出0入0汤圆

发表于 2009-9-13 17:52:15 | 显示全部楼层
我用的是简易型PLC.

下载的过程中P2.0上的那个指示灯都没有闪烁.

出0入0汤圆

 楼主| 发表于 2009-9-13 17:57:00 | 显示全部楼层
那就是我【10楼】的分析结果了.

你的程序死在了初始化上.待许工上线后,询问一下IAP及ISP空间大小后,统一调整,这个很容易,只需要修改一下FX1N.H里面的[MCUIAPFLASHSIZE][MCUISPFLASHSIZE]两个宏与FX1N.C里面的OrderSend3[PLC默认初始存储容量大小]即可.

出0入0汤圆

发表于 2009-9-13 18:01:17 | 显示全部楼层
静候佳音!
同时我自己也试找找问题.
       
unsigned int i;
        unsigned char PLCType=0x01;
        unsigned char keyval = 0;
        unsigned char PLCTypeArray[PLCTypeArrayLen]="FX1N PLC";        //        PLC类型标识;最长20个字节
        unsigned char code ArrFirstused[]="First used!\0";
        unsigned char code ArrPass[]="PASS!\0";
        PORTInit();
        Timer0Init();
        UartInit();
        InterrutptInit();

        PLCType=IAPFlashReadMode(PLCTypeAddr);                //        上电,核实 PLC 硬件版本号



                            自己加的,   发现灯一直亮,也就是说  PLCType也一直为0  
                   PLCType=IAPFlashReadMode(PLCTypeAddr);       
//////////////////////////////////////////////////////////////////////////////////////
         if(PLCType==0)  LED = 1 ;//P0.0口 的一个LED灯
         else               LED = 0 ;

//////////////////////////////////////////////////////////////////////////////////////



if(PLCType!=0)//        第一次使用. IAP -- "FX1NPLC\r\n".
        {

出0入0汤圆

发表于 2009-9-14 09:50:27 | 显示全部楼层
cool~记号~

出0入0汤圆

 楼主| 发表于 2009-9-14 10:16:39 | 显示全部楼层
【17楼】 yy888 许意义

许工,您好.可否将您的电话告诉我.方便我们的及时沟通.

出0入0汤圆

发表于 2009-9-14 11:45:51 | 显示全部楼层
目前好像还不能监控plc的状态,是不是没有把这个考虑进去?程序上传下载都正常,但运行不了程序

明白了,这个只是下载通讯协议部分,

呵呵,加油.

出0入0汤圆

 楼主| 发表于 2009-9-14 13:01:05 | 显示全部楼层
【21楼】 yy888 许意义
1K RAM占用的太多了,请将下载的程序(ASCII码)每二字节转换成一字节HEX码存储在RAM中,则RAM占用量可减半。
===================================================================
在程序中占用RAM的只有2处,缺一不可.
1.串口收发缓冲区.详见UART.H文件.
#define OutLEN                        256                        //        FIFO 发送缓冲区长度
#define InLEN                        142                        //        超时收 接收缓冲区长度
2.在写MPC82G516A的IAP空间时需要512字节的页写缓冲区.详见IAP.C文件
void IAPFlashProgremMode(unsigned int codeaddr,unsigned char ucdata)        // 编程模式
{
        unsigned char checkdata=0;
        unsigned char retry=0;
        unsigned int  i=0;
        unsigned int  tempaddr=0;
        unsigned char pbuf[512];

这两个缓冲区占用RAM的源头.而【1K RAM占用的太多了,请将下载的程序(ASCII码)每二字节转换成一字节HEX码存储在RAM中,则RAM占用量可减半。】这个,可以说是【将下载的程序(ASCII码)每二字节转换成一字节HEX码存储在IAP空间中】,但是这样又需要一些代码和RAM空间作为支撑。如果需要做,也可以,下班之后处理。不过在写入程序的过程和读取程序的过程,都需要一个ASCII与HEX互相转化的过程,不过,从占用时间的角度、占用代码空间、占用RAM的角度都是一个浪费。是否需要加入,请审核后,给予明确答复。

【22楼】 lenyufh

嗯,这只是一个下载通讯协议部分.

============================================================================================================
以下内容为三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.2版本
点击此处下载 ourdev_480823.rar(文件大小:75K) (原文件名:MPC82G516 FX1NPLCCom V1.0.2.rar)
当前版本,对[存储容量]为2K.4K.8K.完全支持。经过几次验证,都可以正确下载。

由于简易PLC发货时 MPC82G516A 的IAP 容量 我不是很清楚,给大家的前期测试带来不便,对此,深表歉意。

//        默认当前MPC82G516A的设置为
//        1K  ISP Code
//        31K IAP Code
//        32K Flash Code

如图所示:

IAP实际空间为31K,而非楼主位的32K。 (原文件名:0.8051 Writer U1 下载HEX成功.jpg)

欢迎大家继续测试,提出宝贵意见。

出0入0汤圆

发表于 2009-9-14 13:03:02 | 显示全部楼层
支持

出0入0汤圆

发表于 2009-9-14 13:03:28 | 显示全部楼层
支持

出0入0汤圆

 楼主| 发表于 2009-9-14 13:06:34 | 显示全部楼层
欢迎大家拿出你们手头的简易型PLC,继续测试,提出宝贵意见。

我先去吃个早饭.^_^

出0入0汤圆

发表于 2009-9-14 13:09:54 | 显示全部楼层
支持

出0入0汤圆

发表于 2009-9-14 14:04:19 | 显示全部楼层
已试过,可以用FX1N软件通讯。支持。

出0入0汤圆

 楼主| 发表于 2009-9-14 14:45:22 | 显示全部楼层
【29楼】 yy888 许意义

请尽量将  串口收发缓冲区  压缩或和  MPC82G516A的IAP空间的页写缓冲区512字节  重迭使用。
===============================================================
可以适当将发送缓冲区的大小调小.

将下载的程序(ASCII码)每二字节转换成一字节HEX码存储在IAP空间中
==============================================================
好的.这样做既可以节约一半的IAP空间.又大大提高PLC程序运行效率.

出0入0汤圆

发表于 2009-9-14 15:43:38 | 显示全部楼层
STC12C5410AD或STC12C5A32S2系列可以用吗?

出0入0汤圆

 楼主| 发表于 2009-9-14 16:06:02 | 显示全部楼层
【31楼】 yy888 许意义

程序改动时请分二步走。

1. 在原程序设置 8K容量下载时,如收到的程序大于 7K或(7.5K)后的程序请不要存储,作丢弃处理。在检验时,将大于 7K或(7.5K)后的程序以空操作指令(0xffff)发送。

2. 再将程序作进一步修改,将收到的ASCII码格式转换成标准HEX格式存储,并且不用一整页存储,每次只存储半页,IAP浪费掉半页,这样RAM 页写缓冲区只需要 256字节了。
===================================
您好.第一步,已经在【23楼】的V1.0.2版本已经实现.
第二步.为节省RAM,丢弃一半的IAP空间.即IAP每页512字节,实际只存256字节.剩余256字节丢弃.稍后上程序.

出0入0汤圆

发表于 2009-9-14 16:18:40 | 显示全部楼层
【23楼】 wisebaby 明君
写出和读入都正常,核对不行。GX Developer 也不行,应该是还没有做这些功能吧?

出0入0汤圆

 楼主| 发表于 2009-9-14 16:55:46 | 显示全部楼层
【35楼】 oste  
是的,核对尚未加入.今后逐个加入.

那今后不如现在,今晚就开工.烦请OSTE帮忙看看都需要加入什么功能.列个清单.我今晚就开始调试.

又麻烦您了.^_^.您是行家,帮忙列一个清单即可.

出0入0汤圆

 楼主| 发表于 2009-9-14 18:05:34 | 显示全部楼层
【37楼】 yy888 许意义

OK.通宵测试.

明天上传DEMO版本.

出0入0汤圆

发表于 2009-9-14 20:06:08 | 显示全部楼层
【36楼】 wisebaby 明君
行家不敢当,不过我和你一样今晚都在加班,不同的是我在写FX2N,你在写内核,呵呵!
明早测试DEMO版,辛苦了。
5.通讯功能,用于连接人机界面等。
6.通讯OK了,监控功能就小儿科了,呵呵!
7.在线修改功能(我用FX2N时经常提示不能超过128步)

出0入0汤圆

 楼主| 发表于 2009-9-14 21:04:28 | 显示全部楼层
【39楼】 oste
5.通讯功能,用于连接人机界面等。
=====================
这个我应该怎么调试?请指点一二,谢谢哈.

出0入0汤圆

 楼主| 发表于 2009-9-14 21:15:39 | 显示全部楼层
【31楼】 yy888 许意义

1. 在原程序设置 8K容量下载时,如收到的程序大于 7K或(7.5K)后的程序请不要存储,作丢弃处理。在检验时,将大于 7K或(7.5K)后的程序以空操作指令(0xffff)发送。

2. 再将程序作进一步修改,将收到的ASCII码格式转换成标准HEX格式存储,并且不用一整页存储,每次只存储半页,IAP浪费掉半页,这样RAM 页写缓冲区只需要 256字节了。

================================================
这两个要求已经满足搞定.RAM控制在500个字节以内.已经把涉及到RAM的部分由水灵灵的葡萄挤成了葡萄干.再挤.再挤也能挤,不过就成葡萄饼了.^_^

接下来【37楼】和【39楼】 需要侦听数据流.分析协议.我得一个一个慢慢来.明天上午上传一个DEMO版本.

出0入0汤圆

发表于 2009-9-14 22:19:49 | 显示全部楼层
不知道这个DEMO版本能不能支持GX Developer编程软件?

出0入0汤圆

发表于 2009-9-15 08:06:48 | 显示全部楼层
【40楼】 wisebaby 明君
用这个软件可以模拟人机和plc通讯
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3418132&bbs_page_no=2&bbs_id=3041
我可以提供测试好的pc端界面你要有三菱FX1N的PLC和下载线就可以了

出0入4汤圆

发表于 2009-9-15 08:25:45 | 显示全部楼层

出0入0汤圆

发表于 2009-9-15 08:27:49 | 显示全部楼层
【40楼】 wisebaby 明君
软件下载中,稍后上传详细说明。

出0入0汤圆

 楼主| 发表于 2009-9-15 09:26:53 | 显示全部楼层
【42楼】 zxt_tnt 晓晓
不知道这个DEMO版本能不能支持GX Developer编程软件?
=========================================
调试的过程中我没有用过那个软件.抽时间我调试一下.


【44楼】 lenyufh
谢谢.
我抽时间尝试一下.

【46楼】 oste
要是能有您写的说明作为指导.那就事半功倍了.
============================================================================================================
以下内容为三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.3版本
点击此处下载 ourdev_481087.rar(文件大小:80K) (原文件名:MPC82G516 FX1NPLCCom V1.0.3.rar)

编译后截图如下:

(原文件名:-1.KEIL编译通过.jpg)

当前版本,改进内容如下:
1. 在原程序设置 8K容量下载时,如收到的程序大于 7K或(7.5K)后的程序请不要存储,作丢弃处理。在检验时,将大于 7K或(7.5K)后的程序以空操作指令(0xffff)发送。  
2. 再将程序作进一步修改,将收到的ASCII码格式转换成标准HEX格式存储,并且不用一整页存储,每次只存储半页,IAP浪费掉半页,这样RAM 页写缓冲区只需要 256字节了。
(第1.2条摘自【31楼】 yy888 许意义)修改后,RAM控制在500个字节以内.修改后,RAM控制在500个字节以内.
3.将功能扩展至 (摘自【37楼】 yy888 许意义)
三菱PLC一些主要的功能如下:
    1. 传送--->读入(写出) 已完成,传送--->核对 功能.(完整实现)
    2. 是否可加入  参数设置--->文件寄存器  选项。
       即需加入 寄存器数据--->读入(写出,核对) 功能.(请问.寄存器的数据量很大.大概32K.存哪?如何处理.下载协议已经在侦听后分析出来了.只要有地方存取.即可实现.)
    3. PLC存储器清除 功能..(仅能实现[清除PLC存储空间].[清除数据元件存储空间和[清除位元件存储空间]本来就没有.^_^])
    4. 还有 遥控运行/停止 功能,开始监控 功能. (侦听了很多数据.尚需要理论支撑.希望能够提供一些相关资料)

今后将陆续针对如下内容,推出升级版本.
    5.通讯功能,用于连接人机界面等。
    6.通讯OK了,监控功能就小儿科了,呵呵!
    7.在线修改功能(我用FX2N时经常提示不能超过128步)
    8.是否有必要支持GX Developer编程软件,如果有,也会加入.
(第5.6.7条摘自【39楼】 oste)

出0入0汤圆

发表于 2009-9-15 09:53:50 | 显示全部楼层
【47楼】 wisebaby 明君
需要用下面的软件在PC上仿真一个三菱的触摸屏,然后监控其数据就行了。
GT Designer2 进行工程和画面创建、图形绘制、对象配置和设置、公共设置以及数据传输等的软件。
GT Simulator2 在PC机上模拟GOT运行的仿真软件
下载地址:
http://www.mitsubishielectric-automation.cn/download/dwn_idx_softwareDetail.asp?sid=8#

安装序列号:570-986818410

已编好的简单例子
点击此处下载 ourdev_481072.zip(文件大小:7K) (原文件名:未命名1.zip)

出0入0汤圆

发表于 2009-9-15 10:06:27 | 显示全部楼层
打开GT Simulator2仿真器,启动

(原文件名:GT1.JPG)
主界面

(原文件名:GT2.JPG)
打开 仿真——选项 ,当前是与GX Developer的仿真连接的,可以跟模拟的CPU连接,没硬件的可以这样学触摸屏和PLC。

(原文件名:GT3.JPG)
选为跟PLC连接

(原文件名:GT4.JPG)
选择要模拟的触摸屏型号,这是例子对应的型号

(原文件名:GT5.JPG)
选好后,打开工程,yes

(原文件名:GT6.JPG)
ok

(原文件名:GT7.JPG)
读取

(原文件名:GT8.JPG)
成功连接

(原文件名:GT9.JPG)

出0入0汤圆

 楼主| 发表于 2009-9-15 10:23:31 | 显示全部楼层
【48楼】 oste  
这个软件的大小够我在公司这下载一天的.^_^.多谢你的教程.晚上我会抽时间研究一下.

出0入0汤圆

发表于 2009-9-15 10:44:35 | 显示全部楼层
这个要顶!学习

出0入0汤圆

发表于 2009-9-15 11:02:52 | 显示全部楼层

出0入0汤圆

发表于 2009-9-15 14:42:12 | 显示全部楼层
狂顶啊狂顶
学习,希望能改个STC的出来

出0入0汤圆

发表于 2009-9-15 17:25:03 | 显示全部楼层
顶一下,做个记号

出0入0汤圆

 楼主| 发表于 2009-9-16 09:16:59 | 显示全部楼层
【53楼】 kingtiger
STC的是否有必要改,请许工定夺.

出0入0汤圆

 楼主| 发表于 2009-9-16 16:54:45 | 显示全部楼层
【56楼】 yy888 许意义
许工您好,我【47楼】的发言,如下问题有待于解决.
-----------------------------------------------
三菱PLC一些主要的功能如下:  
    1. 传送--->读入(写出) 已完成,传送--->核对 功能.(完整实现)
    2. 是否可加入  参数设置--->文件寄存器  选项。  
       即需加入 寄存器数据--->读入(写出,核对) 功能.(请问.寄存器的数据量很大.大概32K.存哪?如何处理.下载协议已经在侦听后分析出来了.只要有地方存取.即可实现.)
    3. PLC存储器清除 功能..(仅能实现[清除PLC存储空间].[清除数据元件存储空间和[清除位元件存储空间]本来就没有.^_^])
    4. 还有 遥控运行/停止 功能,开始监控 功能. (侦听了很多数据.尚需要理论支撑.希望能够提供一些相关资料)
------------------------------------------------
如果您有时间,帮忙分析一下.我也会利用业余时间继续学习相关资料.为Our PLC 增光添彩.

出0入0汤圆

发表于 2009-9-16 22:26:38 | 显示全部楼层
中肯的建议:
代码组织的不是很好,尤其是在FX1N.C里面,建议不要在一个函数里面把所有事情干完,每个的功能由独立的函数去做,这样方便今后功能的扩展,另外,建议有些常量多用宏定义吧,方便阅读。

不太了解这个开源活动的软件设计思想,而且对3菱PLC不熟悉,加上对所选用的MCU也不熟悉,所以程序没有敢乱改,只是有些地方觉得再调整优化下可能会更好点儿。

出0入0汤圆

 楼主| 发表于 2009-9-17 10:14:54 | 显示全部楼层
【58楼】 yy888 许意义

---------------------
明白了.周末动手.

【59楼】 oldtom

----------------------
请问您指的哪个版本.

多谢您的建议.如果能给的更详细一些,那就更好了.

随着版本的升级,一定尽力改进.

出0入0汤圆

发表于 2009-9-18 12:59:36 | 显示全部楼层
LZ,请问

用STC12C5410AD或STC12C5A32S2等STC系列时,程序需作哪部分修改?

只修改头文件可以吗?

还需要修改那些地方?
  
--------------请指教!--------------------------------

出0入0汤圆

发表于 2009-9-18 13:15:41 | 显示全部楼层
和LS的同问

出0入0汤圆

 楼主| 发表于 2009-9-18 14:03:28 | 显示全部楼层
【61楼】 xiaotian
【62楼】 lenyufh

--------------------------
1.IAP空间(EEPROM)的大小.需要至少31K.要么就在[FX1N.C]和[IAP.C]内.修改存储代码和相应头文件,否则无法实现8000步的程序.
我下载了STC12C5410AD(2K)和STC12C5A32S2(28K)的DS看了一下.这个空间都不够大.如果一定要用.就用STC12C5A32S2(28K),再改一下[main.c]初始化代码.不过我手头没有芯片.
2.将头文件[REG_MPC82G516.H]修改成对应的STC头文件.注意同时修改部分寄存器的名称.

其他都不用动.
-------------------------
由于我手头没有芯片.无法编写DEMO程序.如二位想做.我可以协助二位.所有问题,请跟帖跟进,我会尽快回复.

出0入0汤圆

发表于 2009-9-18 22:46:34 | 显示全部楼层
重构的几个建议:
0. void FX1NProcessing(void) 这个函数也太庞大了。通信的过程应该是解码,处理,编码的过程,建议还是分开处理可能会好点。       
1.检验校验判断单独做一个函数! 检验应该不是CRC校验吧?是和校验吧?
2. 像类似         else if((UartReceiveBuffer[1]==0x45)\
                                &(UartReceiveBuffer[2] ==0x31)\
                                &(UartReceiveBuffer[3] ==0x31))

  我猜测着可能是功能码吧?建议用宏来定义实现.

本来想改一下,呵呵,实在是太多了,改了一点点,仅供参考.
                       


点击此处下载 ourdev_482415.rar(文件大小:5K) (原文件名:复件 FX1N.rar)

出0入0汤圆

发表于 2009-9-18 22:50:36 | 显示全部楼层
这个要顶

出0入0汤圆

发表于 2009-9-18 23:17:22 | 显示全部楼层
Mark///////////////

出0入0汤圆

发表于 2009-9-18 23:21:19 | 显示全部楼层
如此好文,应该留个记号

出0入0汤圆

发表于 2009-9-19 00:29:50 | 显示全部楼层
MARK

出10入95汤圆

发表于 2009-9-20 11:58:43 | 显示全部楼层
高手还是很多呀!

出0入0汤圆

 楼主| 发表于 2009-9-20 16:22:50 | 显示全部楼层
【64楼】 oldtom
-----------------------
非常感谢您的提议.

接受意见.
=======================
另外这两天,爱人病了.陪护点滴了两天.升级程序需周一起(延期2日)编写.

出0入0汤圆

发表于 2009-9-23 19:02:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-24 10:08:00 | 显示全部楼层
lz,是否是文件已经坏了,下载不了。

出0入0汤圆

 楼主| 发表于 2009-9-24 10:45:27 | 显示全部楼层
【72楼】 pengshipower
--------------------------
文件都没有坏,都可以下载,只不过都很慢,最近本站是这样的.下载其他资料也是如此.

可能在升级或者维护网站吧.如果是这样过段时间就会好.

出0入0汤圆

 楼主| 发表于 2009-9-24 14:02:58 | 显示全部楼层
【74楼】 jiancongai

您好,请进入"版主PLC"分论坛,在置顶的帖子当中有

■ 开个帖子,讨论《 DIY“傻娃”PLC 》硬件设计!

傻娃PLC及扩展电路的原理图在这里.

出0入0汤圆

发表于 2009-9-24 23:35:56 | 显示全部楼层
mark! 厉害,学习了

出0入0汤圆

发表于 2009-9-25 12:00:07 | 显示全部楼层
【73楼】 wisebaby 明君
谢谢,现在可以下载了。文档很规范,辛苦了。

出0入0汤圆

 楼主| 发表于 2009-9-25 15:59:47 | 显示全部楼层
以下内容为三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.4版本  
点击此处下载 ourdev_485313.rar(文件大小:85K) (原文件名:MPC82G516 FX1NPLCCom V1.0.4.rar)

编译后截图如下:

(原文件名:-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的占用量大大减小.

=======================================================================================================================
明天去重庆,度假.这几天可给我累坏了.小病了2次.十一之后继续Our PLC 升级之旅.
期望手头有简易PLC的同志.利用十一期间多多练习.寻找问题,共同进步.
预祝大家十一过的愉快.出门见喜.

出0入0汤圆

发表于 2009-9-29 19:12:26 | 显示全部楼层
非常感谢楼主的教导。在下有问题请教,还请不吝赐教,谢谢!问题如下:能否用单片机清除PLC的程序??

出0入0汤圆

 楼主| 发表于 2009-10-7 14:32:52 | 显示全部楼层
【79楼】 csc_tg
可以.

在FXGPWIN软件环境下,操作顺序如下:
PLC--PLC存储器清除--在弹出的对话框中,选中[PLC存储空间(P)],单击[(O)确定]即可.

出0入0汤圆

 楼主| 发表于 2009-10-8 16:16:01 | 显示全部楼层
接下来,为了编写[监控功能]代码,先将【39楼】 oste 的要求慢慢实现.

5.通讯功能,用于连接人机界面等。
6.通讯OK了,监控功能就小儿科了,呵呵!
7.在线修改功能(我用FX2N时经常提示不能超过128步)

今晚试一试[GT Works 2]软件.

出0入0汤圆

发表于 2009-10-8 23:00:22 | 显示全部楼层
【82楼】 yy888 许工,你好:
【81楼】 wisebaby 明君,你好:

用STC12C5A32S2(28K)的单片机,可写FLASH容量只有28K, 要改那些内容?

修改一下FX1N.H里面的[MCUIAPFLASHSIZE][MCUISPFLASHSIZE]两个宏与FX1N.C里面的 OrderSend3[PLC默认初始存储容量大小],

OrderSend3改什么地方?

出0入0汤圆

 楼主| 发表于 2009-10-9 08:33:49 | 显示全部楼层
【82楼】 yy888 许意义
好的.
------------------------------------------------------------------------
【83楼】 DUCH
由于版本升级,请修改如下部分.即可实现原有目的.
1.修改FX1N.H里面的以下三个值:(至于它的ISP code 大小是不是1K.我不清楚.你最好试一下)
#define MCUFLASHSIZE                64*1024                //        64K
#define MCUIAPFLASHSIZE                31*1024                //        31K
#define MCUISPFLASHSIZE                1*1024                //        1K
2.你需要将0x8000地址,即[PLC CODE存储的首地址]更改到[您所使用的单片机的IAP空间的首地址]上.举例说明:
例如,本次设计采用MPC82G516A单片机. 发货时已经初始化为 AP FLASH DATA 32K;IAP FLASH DATA 31K;ISP FLASH DATA 1K.故而PLC的0x8000地址,正好对应单片机的IAP空间的0x8000地址.所以我在程序中是直接使用的0x8000地址.即绝对地址,今后升级版本,会考虑改为相对地址.那样方便大家使用不同类型的MCU.
3.OrderSend3不要动.已经整理好了.

出0入0汤圆

发表于 2009-10-9 08:38:09 | 显示全部楼层
同问!
我手上有STC12C5A60S2 和 STC12C5A32S2的单片机,想用她试一下,但无从下手
谢谢!

出0入0汤圆

 楼主| 发表于 2009-10-9 08:54:48 | 显示全部楼层
【85楼】 Ar135
请参照【84楼】所述尝试修改.

按照【84楼】的思路,今后我也会同大家一起,将这个简易PLC升级到其他STC系MCU上.

出0入0汤圆

发表于 2009-10-9 09:34:13 | 显示全部楼层
谢谢,【86楼】 wisebaby 明君.

我先按你说的改一下,因为硬件板子要过几天才做好,到时真正测试才能开始.

出0入0汤圆

发表于 2009-10-9 12:11:14 | 显示全部楼层
好的...谢谢 wisebaby 明君

出0入0汤圆

发表于 2009-10-11 16:20:29 | 显示全部楼层
wisebaby 明君 你好:

通讯功能(用于连接人机界面)和监控功能(用于调试),什么时候能提供测试?

辛苦你了!谢谢!

出0入0汤圆

 楼主| 发表于 2009-10-12 08:18:15 | 显示全部楼层
不好意思,最近实在比较忙.尚需几日.

但具体几天我说不好.

出0入0汤圆

发表于 2009-10-20 11:19:26 | 显示全部楼层
期待!

出0入0汤圆

 楼主| 发表于 2009-10-20 14:31:41 | 显示全部楼层
升级版本会陆续在【★ 简易PLC 梯型图 解释型监控 示范程序 测试版(51)----直接使用三菱FXGPWIN软件!】一帖中推出,链接地址如下:
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3608835

这两周赶一个项目,忙的早出晚归。

希望周末能有点时间,到时再继续升级之旅。期间给大家带来的不便,敬请谅解。

出0入0汤圆

发表于 2009-10-20 18:44:13 | 显示全部楼层
都是业余,时间长短快慢,大家应该都能理解和支持!

出0入0汤圆

发表于 2009-11-7 09:30:29 | 显示全部楼层
顶起来!

出0入0汤圆

发表于 2009-11-7 19:52:28 | 显示全部楼层
确实不错的总结

出0入0汤圆

 楼主| 发表于 2009-11-9 01:42:55 | 显示全部楼层
【49楼】 oste
OSTE,您好.有段时间没有联系您了.
我在这个[GT Designer2]软件的使用方面有些疑问,并且在PLC的个别使用问题上想请教您一下.

您给我邮寄PLC时,盒子上您的电话看不清了.我需要与您取得沟通.请告之我您的电话.或直接致电于我.15010725918.

出0入0汤圆

发表于 2009-11-9 05:33:52 | 显示全部楼层
GX Designer这个软件比较FXGPWIN 来说方便很多,协议上可能有少许区别。
还可以SIM,
  楼上可以把[GT Designer2]问题贴出来,我想有许多人会用这个软件的,。。。。。
本人用的不多,略知一二。看能帮得上不。。。。

出0入0汤圆

 楼主| 发表于 2009-11-9 09:37:55 | 显示全部楼层
【97楼】 z7001

我已经与OSTE取得联系.
多谢各位支持.

如果有必要,我也会发帖求教的.在此先谢过几位.

出0入0汤圆

发表于 2009-11-9 09:55:01 | 显示全部楼层
【97楼】 z7001
    谢谢大家对简易PLC的支持!但GT Designer2是三菱人机界面的编辑软件,DX Developer是三菱PLC的编辑软件。你说的应该是后者。
【98楼】 wisebaby 明君
    GT Designer2模拟的人机界面与PLC连接时会先读取PLC的类型信息(这个我监控过,不过没有弄懂里面的意思),然后再根据画面的需要读写数据(数据方式见下面)。其他品牌(西门子、威伦、松下)的人机界面没有读取PLC的类型信息,就开始读写数据了。


三菱Fx系列PLC编程口通讯协议
摘自:  http://blog.gongkong.com/blog_detail.asp?id=204111
一、三菱PLC编程口通讯协议
三菱PLC编程口的通讯协议比较简单,只有四个命令,即:
命令                        命令码                   目标设备
DEVICE READ CMD             "0"  30H                 X,Y,M,S,T,C,D
DEVICE WRITE CMD            "1"  31H                 X,Y,M,S,T,C,D
FORCE ON CMD                "7"  37H                 X,Y,M,S,T,C
FORCE OFF CMD               "8"  38H                 X,Y,M,S,T,C
五个标示:
ENQ                        05H             请求
ACK                        06H             PLC正确响应
NAK                        15H             PLC错误响应
STX                        02H             报文开始
ETX                        03H             报文结束
使用累加方式的和校验,帧格式如下:
STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower)
和校验:
SUM= CMD+……+ETX。 如SUM=73H,SUM=“73”。

1、DEVICE READ(读出软设备状态值)
计算机向PLC发送:
始          命令              首地址                          位数             终                 和校验
STX       CMD             GROUP ADDRESS       BYTES         ETX              SUM
PLC 返回
STX 1ST DATA 2ND DATA ..... LAST DATA ETX SUM
2、DEVICE WRITE(向PLC 软设备写入值)
计算机向PLC发送:
始          命令      首地址          位数             数据             终                  和校验
PLC 返回
ACK (06H) 接受正确
NAK (15H) 接受错误
3、位设备强制置位/复位
FORCE ON 置位
始                 命令              地址                     终                 和校验
STX              CMD             ADDRESS            ETX              SUM
02h               37h               address                 03h              sum
FORCE OFF 复位
始                 命令              地址                     终                 和校验
STX              CMD             ADDRESS            ETX              SUM
02h               38h               address                 03h               sum
PLC 返回
ACK(06H) 接受正确
NAK(15H) 接受错误

以上可以看出,协议非常简单,但是由于没有寄存器类型信息,所以地址的计算十分关键,如D100和M100分别对应哪个地址呢?下面就是三菱Fx系列PLC地址对应表:
Public Const PLC_D_Base_AddRess = 4096                                                1000H
Public Const PLC_D_Special_Base_AddRess = 3584                                        e00H
Public Const PLC_Y_Group_Base_AddRess = 160                                                a0H
Public Const PLC_PY_Group_Base_AddRess = 672                                                2a0H
Public Const PLC_T_Group_Base_AddRess = 192                                                c0H
Public Const PLC_OT_Group_Base_AddRess = 704                                                 2c0H
Public Const PLC_RT_Group_Base_AddRess = 1216                                                 4c0H
Public Const PLC_M_SINGLE_Base_AddRess = 2048(命令为7或8时)                                  800H
Public Const PLC_M_Group_Base_AddRess = 256                                                100H
Public Const PLC_PM_Group_Base_AddRess = 768                                                 300H
Public Const PLC_S_Group_Base_AddRess = 0                                                0H
Public Const PLC_X_Group_Base_AddRess = 128                                                80H
Public Const PLC_C_Group_Base_AddRess = 448                                                1c0H
Public Const PLC_OC_Group_Base_AddRess = 960                                                 3c0H
Public Const PLC_RC_Group_Base_AddRess = 1472                                                 5c0H
Public Const PLC_TV_Group_Base_AddRess = 2048                                                 800H
Public Const PLC_CV16_Group_Base_AddRess = 2560                                        a00H
Public Const PLC_CV32_Group_Base_AddRess = 3072                                        c00H
当我们用DEVICE READ命令时,D100地址=100*2+4096;M100地址=100+256;不同的是D类型寄存器存放的是字,M寄存器存放的是位,同样是读两个字节,D100返回的就是PLC中D100地址的值,M类型寄存器返回的是M100到M116的值。所以当我们用FORCE ON 命令时,M100寄存器地址=100+2048;

这也没有什么复杂的,不是吗?可是三菱公司好像不甘于如此,FORCE ON/Off命令中地址排列与DEVICE READ/WRITE不同,是低位在前高位在后。如Y20,地址是0510H,代码中4个字节地址表示为:1005。(注意:Y寄存器为八进制,如Y20地址=16+1280=0510H)

出0入0汤圆

发表于 2009-11-9 18:27:05 | 显示全部楼层

出0入0汤圆

发表于 2009-11-9 18:29:58 | 显示全部楼层

出0入0汤圆

 楼主| 发表于 2009-11-15 19:34:48 | 显示全部楼层
【103楼】 jiancongai


哈哈.
你好.我有几天没有过来了.公司的活太忙了.
您看,公司的活我都忙不过来,何况网站的开源项目也在等着我.排队也做不了您的这个活,不好意思,另请高明吧,如果有小问题,我能帮上忙的,很乐意帮助,本着助人为乐的精神,报酬免谈.

出0入0汤圆

发表于 2009-11-16 23:15:50 | 显示全部楼层
ding

出0入0汤圆

发表于 2009-11-17 13:56:41 | 显示全部楼层
厉害。我什么时候也可以参与学习一下!

出0入0汤圆

发表于 2009-11-17 14:31:04 | 显示全部楼层
学习呀。。。

出0入0汤圆

发表于 2009-11-17 15:07:08 | 显示全部楼层
TO 【9楼】 cyxavr 又一天
积分:334
派别:
等级:------
来自:广东广州
【8楼】 wisebaby 明君
明君兄弟,我将FX1N的通讯HEX文件下载下去,再到与FXGP三菱PLC软件写入程时,提示通讯错误的?

原因是wisebaby 明君 提供的FX1N下载协议不够全面,没有指定步数默认下载的时候,需要补充如下两组协议
我用代码表示
//写8000步固定格式
//02 45 31 31 38 30 30 30 32 45 30 38 30 30 32 35 36 44
//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 39 45
if(v[1]==0X45)if(v[2]==0X31)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X30)if(v[7]==0X30)if(v[8]==0X32)
if(v[9]==0X45)if(v[10]==0X30)if(v[11]==0X38)if(v[12]==0X30)
if(v[13]==0X30)//if(v[14]==0X32)if(v[15]==0X35)if(v[16]==0X36)
if(v[17]==0X44)if(v[18]==0X30)if(v[19]==0X30)if(v[20]==0X30)
{wait();UDR0=0X06;}
//写8000步固定格式
// 02 45 31 31 38
//    30 32 45 32
//    45 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 32
if(v[1]==0X45)if(v[2]==0X31)if(v[3]==0X31)if(v[4]==0X38)
if(v[5]==0X30)if(v[6]==0X32)if(v[7]==0X45)if(v[8]==0X32)
if(v[9]==0X45)if(v[10]==0X32)if(v[11]==0X30)if(v[12]==0X32)
if(v[13]==0X30)if(v[14]==0X46)if(v[15]==0X34)if(v[16]==0X30)
if(v[17]==0X39)if(v[18]==0X46)if(v[19]==0X46)if(v[20]==0X30)
{wait();UDR0=0X06;}

这样默认下载8000步就不会出错了。

出0入0汤圆

 楼主| 发表于 2009-11-17 15:18:54 | 显示全部楼层
【108楼】 biscuit2 叶工
多谢您指出,软件不足之处.
只是
1.您补充的这两组通信协议.我在监听的过程中,的确没有遇到过.
2.您指出的【9楼】 cyxavr 又一天 网友的问题,已经在【28楼】 cyxavr 又一天 中得到解决.而我也并没有在程序中添加您所谓的那"两组协议".

不过还是多谢您对开源项目的关心和支持.再次表示感谢.

出0入0汤圆

发表于 2009-11-17 17:55:04 | 显示全部楼层
当FX1N PLC的梯形图为8000步的格式,下载的时候不指定步数,就会出现上面的数据。

出0入0汤圆

发表于 2009-11-17 19:21:08 | 显示全部楼层
MPC82G516A的编程器那里有买?

出0入0汤圆

发表于 2009-11-18 12:58:32 | 显示全部楼层
都是牛人啊,自愧不如阿

出0入0汤圆

 楼主| 发表于 2009-11-21 21:13:18 | 显示全部楼层
【110楼】 biscuit2 叶工

当FX1N PLC的梯形图为8000步的格式,下载的时候不指定步数,就会出现上面的数据。
============================================================================
您好.如果我没有理解错的话,您说的[不指定步数],即在下载的是很选择[所有范围],对吗?

如果[是],那我手头的三菱 FX1N PLC 没有检测到.而且从未检测到过.
如果[否],那麻烦您在说的具体点.谢谢.

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-25 23:09

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

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