■ 仿三菱 FX1N PLC 下载通讯协议 C Code示范程序 V1.0.1版本 正式发布
首先,向大家道个歉,自从加入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(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.如果是第一次使用请选择[所有范围]而后单击[确定]
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480502.jpg
(原文件名:10.如果是第一次使用请选择[所有范围]而后单击确定.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.选项--参数设置--修改默认为8K,改成8K.请参见以下两张截图.
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480506.jpg
(原文件名:14.选项--参数设置--修改默认为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==0x45)\
&(UartReceiveBuffer ==0x31)\
&(UartReceiveBuffer ==0x31))
我猜测着可能是功能码吧?建议用宏来定义实现.
--------------------------------------------------------------------------------
修改后:
0.FX1NProcessing是否有必要做成几个分立函数,和如何去做,有待于论证.待功能稳定后的版本问世后会调整这个函数模块.
1.是"和校验"已经将CRC字样改为SUM字样.
2.目前这个功能码究竟是何含义尚不明朗.不是所有的功能码我都能说出其含义.所以有待于最后敲定.敲定后就会在头文件中申明.
3.已经添加了"您在例子中对函数前面加入的函数说明".
4.在中的IAPFlashProgremMode函数中,加入了.在写字节之前先读取字节.将读取的字节与带写入的字节进行判断,判断不相等后,再写入,相等就不必写入重新写入了.
5.去掉了调试函数FX1NDebug.即下载期间不会再有指示灯指示.
6.RAM控制在(xdata)238+(data)17.0如果需要今后升级可考虑再节约.
实现节约RAM办法:
在IAP的过程中,原来用256个字节的RAM.现在改为用3个字节的RAM.一个整型循环变量i,一个倒数用的临时变量tempdata,再加一页IAP缓存备份空间.用暂存在IAP内的方法使得RAM的占用量大大减小. 支持一下。 【1楼】 rainbow 老陈
谢谢.
------------------------------------------------------
请各位针对当前版本下载通讯的程序,进行验证,提出宝贵意见. 【2楼】 wisebaby 明君
辛苦了,一来就猛料啊!
情大家快来测试一下啊! 辛苦了!猛料.
谢谢。 辛苦了!猛料.
谢谢。 【3楼】 oste
其实这些东西,完全可以在出差前,再给我一些时间就可以搞定.可惜当时实在是太紧了.
总之,耽搁的时间太久了.理应尽快完成. 辛苦了啊,对傻娃PLC来说这是关键性的一步啊! 【7楼】 zxt_tnt 晓晓
傻娃PLC的开发,自当竭尽全力.
届时会适应具体型号来编写. 【8楼】 wisebaby 明君
明君兄弟,我将FX1N的通讯HEX文件下载下去,再到与FXGP三菱PLC软件写入程时,提示通讯错误的?
图:http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480587.jpg
(原文件名:未命名.jpg) 【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 inti=0;
unsigned inttempaddr=0;
unsigned char pbuf;
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经行调整. 在那里可以看到IAP代码空间呢?
一开始写入就提示"通讯错误"的
自己从 从版主那拿到手,只是通过串口下载过程序下去.其他的没有动过.
你说的显示板,是那个变频器面板吗? 【11楼】 cyxavr 又一天
在那里可以看到IAP代码空间呢?
一开始写入就提示"通讯错误"的
自己从 从版主那拿到手,只是通过串口下载过程序下去.其他的没有动过.
====================================================================
IAP代码空间大小需要用8051 Writer U1经行查看.
我相信您在下载的过程中P2.0上的那个指示灯都没有闪烁吧?
初始化没有成功.这个问题等许工上线.问一下发货时IAP空间大小预设的是多少.这个我可以在软件上修改. 我用的是简易型PLC.
下载的过程中P2.0上的那个指示灯都没有闪烁. 那就是我【10楼】的分析结果了.
你的程序死在了初始化上.待许工上线后,询问一下IAP及ISP空间大小后,统一调整,这个很容易,只需要修改一下FX1N.H里面的两个宏与FX1N.C里面的OrderSend3即可. 静候佳音!
同时我自己也试找找问题.
unsigned int i;
unsigned char PLCType=0x01;
unsigned char keyval = 0;
unsigned char PLCTypeArray="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".
{ cool~记号~ 【17楼】 yy888 许意义
许工,您好.可否将您的电话告诉我.方便我们的及时沟通. 目前好像还不能监控plc的状态,是不是没有把这个考虑进去?程序上传下载都正常,但运行不了程序
明白了,这个只是下载通讯协议部分,
呵呵,加油. 【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 inti=0;
unsigned inttempaddr=0;
unsigned char pbuf;
这两个缓冲区占用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的设置为
// 1KISP Code
// 31K IAP Code
// 32K Flash Code
如图所示:
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_480821.jpg
IAP实际空间为31K,而非楼主位的32K。 (原文件名:0.8051 Writer U1 下载HEX成功.jpg)
欢迎大家继续测试,提出宝贵意见。 支持 支持 欢迎大家拿出你们手头的简易型PLC,继续测试,提出宝贵意见。
我先去吃个早饭.^_^ 支持 已试过,可以用FX1N软件通讯。支持。 【29楼】 yy888 许意义
请尽量将串口收发缓冲区压缩或和MPC82G516A的IAP空间的页写缓冲区512字节重迭使用。
===============================================================
可以适当将发送缓冲区的大小调小.
将下载的程序(ASCII码)每二字节转换成一字节HEX码存储在IAP空间中
==============================================================
好的.这样做既可以节约一半的IAP空间.又大大提高PLC程序运行效率. STC12C5410AD或STC12C5A32S2系列可以用吗? 【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字节丢弃.稍后上程序. 【23楼】 wisebaby 明君
写出和读入都正常,核对不行。GX Developer 也不行,应该是还没有做这些功能吧? 【35楼】 oste
是的,核对尚未加入.今后逐个加入.
那今后不如现在,今晚就开工.烦请OSTE帮忙看看都需要加入什么功能.列个清单.我今晚就开始调试.
又麻烦您了.^_^.您是行家,帮忙列一个清单即可. 【37楼】 yy888 许意义
OK.通宵测试.
明天上传DEMO版本. 【36楼】 wisebaby 明君
行家不敢当,不过我和你一样今晚都在加班,不同的是我在写FX2N,你在写内核,呵呵!
明早测试DEMO版,辛苦了。
5.通讯功能,用于连接人机界面等。
6.通讯OK了,监控功能就小儿科了,呵呵!
7.在线修改功能(我用FX2N时经常提示不能超过128步) 【39楼】 oste
5.通讯功能,用于连接人机界面等。
=====================
这个我应该怎么调试?请指点一二,谢谢哈. 【31楼】 yy888 许意义
1. 在原程序设置 8K容量下载时,如收到的程序大于 7K或(7.5K)后的程序请不要存储,作丢弃处理。在检验时,将大于 7K或(7.5K)后的程序以空操作指令(0xffff)发送。
2. 再将程序作进一步修改,将收到的ASCII码格式转换成标准HEX格式存储,并且不用一整页存储,每次只存储半页,IAP浪费掉半页,这样RAM 页写缓冲区只需要 256字节了。
================================================
这两个要求已经满足搞定.RAM控制在500个字节以内.已经把涉及到RAM的部分由水灵灵的葡萄挤成了葡萄干.再挤.再挤也能挤,不过就成葡萄饼了.^_^
接下来【37楼】和【39楼】 需要侦听数据流.分析协议.我得一个一个慢慢来.明天上午上传一个DEMO版本. 不知道这个DEMO版本能不能支持GX Developer编程软件? 【40楼】 wisebaby 明君
用这个软件可以模拟人机和plc通讯
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3418132&bbs_page_no=2&bbs_id=3041
我可以提供测试好的pc端界面你要有三菱FX1N的PLC和下载线就可以了 顶 【40楼】 wisebaby 明君
软件下载中,稍后上传详细说明。 【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)
编译后截图如下:
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481088.jpg
(原文件名:-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) 【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) 打开GT Simulator2仿真器,启动
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481077.JPG
(原文件名:GT1.JPG)
主界面
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481078.JPG
(原文件名:GT2.JPG)
打开 仿真——选项 ,当前是与GX Developer的仿真连接的,可以跟模拟的CPU连接,没硬件的可以这样学触摸屏和PLC。
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481079.JPG
(原文件名:GT3.JPG)
选为跟PLC连接
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481080.JPG
(原文件名:GT4.JPG)
选择要模拟的触摸屏型号,这是例子对应的型号
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481081.JPG
(原文件名:GT5.JPG)
选好后,打开工程,yes
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481082.JPG
(原文件名:GT6.JPG)
ok
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481083.JPG
(原文件名:GT7.JPG)
读取
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481084.JPG
(原文件名:GT8.JPG)
成功连接
http://cache.amobbs.com/bbs_upload782111/files_18/ourdev_481085.JPG
(原文件名:GT9.JPG) 【48楼】 oste
这个软件的大小够我在公司这下载一天的.^_^.多谢你的教程.晚上我会抽时间研究一下. 这个要顶!学习 好 狂顶啊狂顶
学习,希望能改个STC的出来 顶一下,做个记号 【53楼】 kingtiger
STC的是否有必要改,请许工定夺. 【56楼】 yy888 许意义
许工您好,我【47楼】的发言,如下问题有待于解决.
-----------------------------------------------
三菱PLC一些主要的功能如下:
1. 传送--->读入(写出) 已完成,传送--->核对 功能.(完整实现)
2. 是否可加入参数设置--->文件寄存器选项。
即需加入 寄存器数据--->读入(写出,核对) 功能.(请问.寄存器的数据量很大.大概32K.存哪?如何处理.下载协议已经在侦听后分析出来了.只要有地方存取.即可实现.)
3. PLC存储器清除 功能..(仅能实现[清除PLC存储空间].[清除数据元件存储空间和[清除位元件存储空间]本来就没有.^_^])
4. 还有 遥控运行/停止 功能,开始监控 功能. (侦听了很多数据.尚需要理论支撑.希望能够提供一些相关资料)
------------------------------------------------
如果您有时间,帮忙分析一下.我也会利用业余时间继续学习相关资料.为Our PLC 增光添彩. 中肯的建议:
代码组织的不是很好,尤其是在FX1N.C里面,建议不要在一个函数里面把所有事情干完,每个的功能由独立的函数去做,这样方便今后功能的扩展,另外,建议有些常量多用宏定义吧,方便阅读。
不太了解这个开源活动的软件设计思想,而且对3菱PLC不熟悉,加上对所选用的MCU也不熟悉,所以程序没有敢乱改,只是有些地方觉得再调整优化下可能会更好点儿。 【58楼】 yy888 许意义
---------------------
明白了.周末动手.
【59楼】 oldtom
----------------------
请问您指的哪个版本.
多谢您的建议.如果能给的更详细一些,那就更好了.
随着版本的升级,一定尽力改进. LZ,请问
用STC12C5410AD或STC12C5A32S2等STC系列时,程序需作哪部分修改?
只修改头文件可以吗?
还需要修改那些地方?
--------------请指教!-------------------------------- 和LS的同问 【61楼】 xiaotian
【62楼】 lenyufh
--------------------------
1.IAP空间(EEPROM)的大小.需要至少31K.要么就在和内.修改存储代码和相应头文件,否则无法实现8000步的程序.
我下载了STC12C5410AD(2K)和STC12C5A32S2(28K)的DS看了一下.这个空间都不够大.如果一定要用.就用STC12C5A32S2(28K),再改一下初始化代码.不过我手头没有芯片.
2.将头文件修改成对应的STC头文件.注意同时修改部分寄存器的名称.
其他都不用动.
-------------------------
由于我手头没有芯片.无法编写DEMO程序.如二位想做.我可以协助二位.所有问题,请跟帖跟进,我会尽快回复. 重构的几个建议:
0. void FX1NProcessing(void) 这个函数也太庞大了。通信的过程应该是解码,处理,编码的过程,建议还是分开处理可能会好点。
1.检验校验判断单独做一个函数! 检验应该不是CRC校验吧?是和校验吧?
2. 像类似 else if((UartReceiveBuffer==0x45)\
&(UartReceiveBuffer ==0x31)\
&(UartReceiveBuffer ==0x31))
我猜测着可能是功能码吧?建议用宏来定义实现.
本来想改一下,呵呵,实在是太多了,改了一点点,仅供参考.
点击此处下载 ourdev_482415.rar(文件大小:5K) (原文件名:复件 FX1N.rar) 这个要顶 Mark/////////////// 如此好文,应该留个记号 MARK 高手还是很多呀! 【64楼】 oldtom
-----------------------
非常感谢您的提议.
接受意见.
=======================
另外这两天,爱人病了.陪护点滴了两天.升级程序需周一起(延期2日)编写. mark lz,是否是文件已经坏了,下载不了。 【72楼】 pengshipower
--------------------------
文件都没有坏,都可以下载,只不过都很慢,最近本站是这样的.下载其他资料也是如此.
可能在升级或者维护网站吧.如果是这样过段时间就会好. 【74楼】 jiancongai
您好,请进入"版主PLC"分论坛,在置顶的帖子当中有
■ 开个帖子,讨论《 DIY“傻娃”PLC 》硬件设计!
傻娃PLC及扩展电路的原理图在这里. mark! 厉害,学习了 【73楼】 wisebaby 明君
谢谢,现在可以下载了。文档很规范,辛苦了。 以下内容为三菱 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==0x45)\
&(UartReceiveBuffer ==0x31)\
&(UartReceiveBuffer ==0x31))
我猜测着可能是功能码吧?建议用宏来定义实现.
--------------------------------------------------------------------------------
修改后:
0.FX1NProcessing是否有必要做成几个分立函数,和如何去做,有待于论证.待功能稳定后的版本问世后会调整这个函数模块.
1.是"和校验"已经将CRC字样改为SUM字样.
2.目前这个功能码究竟是何含义尚不明朗.不是所有的功能码我都能说出其含义.所以有待于最后敲定.敲定后就会在头文件中申明.
3.已经添加了"您在例子中对函数前面加入的函数说明".
4.在中的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的同志.利用十一期间多多练习.寻找问题,共同进步.
预祝大家十一过的愉快.出门见喜. 非常感谢楼主的教导。在下有问题请教,还请不吝赐教,谢谢!问题如下:能否用单片机清除PLC的程序?? 【79楼】 csc_tg
可以.
在FXGPWIN软件环境下,操作顺序如下:
PLC--PLC存储器清除--在弹出的对话框中,选中,单击[(O)确定]即可. 接下来,为了编写[监控功能]代码,先将【39楼】 oste 的要求慢慢实现.
5.通讯功能,用于连接人机界面等。
6.通讯OK了,监控功能就小儿科了,呵呵!
7.在线修改功能(我用FX2N时经常提示不能超过128步)
今晚试一试软件. 【82楼】 yy888 许工,你好:
【81楼】 wisebaby 明君,你好:
用STC12C5A32S2(28K)的单片机,可写FLASH容量只有28K, 要改那些内容?
修改一下FX1N.H里面的两个宏与FX1N.C里面的 OrderSend3,
OrderSend3改什么地方? 【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地址,即更改到[您所使用的单片机的IAP空间的首地址]上.举例说明:
例如,本次设计采用MPC82G516A单片机. 发货时已经初始化为 AP FLASH DATA 32K;IAP FLASH DATA 31K;ISP FLASH DATA 1K.故而PLC的0x8000地址,正好对应单片机的IAP空间的0x8000地址.所以我在程序中是直接使用的0x8000地址.即绝对地址,今后升级版本,会考虑改为相对地址.那样方便大家使用不同类型的MCU.
3.OrderSend3不要动.已经整理好了. 同问!
我手上有STC12C5A60S2 和 STC12C5A32S2的单片机,想用她试一下,但无从下手
谢谢! 【85楼】 Ar135
请参照【84楼】所述尝试修改.
按照【84楼】的思路,今后我也会同大家一起,将这个简易PLC升级到其他STC系MCU上. 谢谢,【86楼】 wisebaby 明君.
我先按你说的改一下,因为硬件板子要过几天才做好,到时真正测试才能开始. 好的...谢谢 wisebaby 明君 wisebaby 明君 你好:
通讯功能(用于连接人机界面)和监控功能(用于调试),什么时候能提供测试?
辛苦你了!谢谢! 不好意思,最近实在比较忙.尚需几日.
但具体几天我说不好. 期待! 升级版本会陆续在【★ 简易PLC 梯型图 解释型监控 示范程序 测试版(51)----直接使用三菱FXGPWIN软件!】一帖中推出,链接地址如下:
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3608835
这两周赶一个项目,忙的早出晚归。
希望周末能有点时间,到时再继续升级之旅。期间给大家带来的不便,敬请谅解。 都是业余,时间长短快慢,大家应该都能理解和支持! 顶起来! 确实不错的总结 【49楼】 oste
OSTE,您好.有段时间没有联系您了.
我在这个软件的使用方面有些疑问,并且在PLC的个别使用问题上想请教您一下.
您给我邮寄PLC时,盒子上您的电话看不清了.我需要与您取得沟通.请告之我您的电话.或直接致电于我.15010725918. GX Designer这个软件比较FXGPWIN 来说方便很多,协议上可能有少许区别。
还可以SIM,
楼上可以把问题贴出来,我想有许多人会用这个软件的,。。。。。
本人用的不多,略知一二。看能帮得上不。。。。 【97楼】 z7001
我已经与OSTE取得联系.
多谢各位支持.
如果有必要,我也会发帖求教的.在此先谢过几位. 【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) 【103楼】 jiancongai
哈哈.
你好.我有几天没有过来了.公司的活太忙了.
您看,公司的活我都忙不过来,何况网站的开源项目也在等着我.排队也做不了您的这个活,不好意思,另请高明吧,如果有小问题,我能帮上忙的,很乐意帮助,本着助人为乐的精神,报酬免谈. ding 厉害。我什么时候也可以参与学习一下! 学习呀。。。 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==0X45)if(v==0X31)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X32)
if(v==0X45)if(v==0X30)if(v==0X38)if(v==0X30)
if(v==0X30)//if(v==0X32)if(v==0X35)if(v==0X36)
if(v==0X44)if(v==0X30)if(v==0X30)if(v==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==0X45)if(v==0X31)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X32)if(v==0X45)if(v==0X32)
if(v==0X45)if(v==0X32)if(v==0X30)if(v==0X32)
if(v==0X30)if(v==0X46)if(v==0X34)if(v==0X30)
if(v==0X39)if(v==0X46)if(v==0X46)if(v==0X30)
{wait();UDR0=0X06;}
这样默认下载8000步就不会出错了。 【108楼】 biscuit2 叶工
多谢您指出,软件不足之处.
只是
1.您补充的这两组通信协议.我在监听的过程中,的确没有遇到过.
2.您指出的【9楼】 cyxavr 又一天 网友的问题,已经在【28楼】 cyxavr 又一天 中得到解决.而我也并没有在程序中添加您所谓的那"两组协议".
不过还是多谢您对开源项目的关心和支持.再次表示感谢. 当FX1N PLC的梯形图为8000步的格式,下载的时候不指定步数,就会出现上面的数据。 MPC82G516A的编程器那里有买? 都是牛人啊,自愧不如阿 【110楼】 biscuit2 叶工
当FX1N PLC的梯形图为8000步的格式,下载的时候不指定步数,就会出现上面的数据。
============================================================================
您好.如果我没有理解错的话,您说的[不指定步数],即在下载的是很选择[所有范围],对吗?
如果[是],那我手头的三菱 FX1N PLC 没有检测到.而且从未检测到过.
如果[否],那麻烦您在说的具体点.谢谢. 好东东!
页:
[1]
2