|
经历了无间道,发现论坛上很久没有有价的值资料了,那就共享出来点吧。
毕竟在论坛里一直是潜水吸血,吸取了很多,却没有付出。
其他的不说,我相信很多人受益于论坛上几个关于三菱plc的帖子。从这点上讲,有些人还是很有功劳的。我衷心感谢他们的付出。
点击此处下载 ourdev_535314.rar(文件大小:30K) (原文件名:FX2N_通讯监控记录.rar)
//============================================================================================//
// 写PLC参数步骤:
//============================================================================================//
1. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
2. 读区扫描时间(D8010-D8012)
3. 读入01C0处1字节 ??
4. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
5. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
6. 读入01C0处1字节 ??
7. 读存储器类型(D8003)
8. 读程序参数区地址0E08处8字节,为一字符串,意义不详
9. 读存储器容量(D8102)
10. 写参数区(0x8000-0x805B),92字节,分2次写入,一次64字节,一次28字节
11. B指令(如果存储器类型是Flash,则增加此操作)
12. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
//============================================================================================//
// 写PLC程序步骤:
//============================================================================================//
1. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
2. 读区扫描时间(D8010-D8012)
3. 读入01C0处1字节 ??
4. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
5. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
6. 读入01C0处1字节 ??
7. 读寄存器类型(D8003)
8. 读程序参数区地址0E08处8字节,为一字符串,意义不详
9. E7760E指令(如果存储器类型是Flash,则增加此操作)
10.写参数区(0x805C-0x881C+10),一次最多写64字节, 2000字节,1000步
11.E8760E指令(如果存储器类型是Flash,则增加此操作)
12.B指令(如果存储器类型是Flash,则增加此操作)
//============================================================================================//
// 写文件寄存器步骤:
//============================================================================================//
1. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
2. 读区扫描时间(D8010-D8012)
3. 读入01C0处1字节 ??
4. 查询PLC型号及硬件版本(D8001), 读入参数区(0x8000-0x805B), 4 8000 0F00 , 读入配置区(D8000-D8127)
5. 读入01C0处1字节 ??
6. 写文件寄存器区(0x8830-0x8BF0+28),一次最多写64字节, 1000字节
PLC参数区已知意义:
__IO uint16_t const PGM_PARA[92/2] __at( FLASH_PAGE_ADR(PAGE_CODE) - 92 ) =
{
0x0002, // 程序总步数 => 2000
0x0000, // ??
0x0000,
0x0000,
0x2020,0x2020,0x2020,0x2020, //
0x2020,0x2020,0x2020,0x2020, // PLC名-标题,最多16个汉字,占32字节
0x2020,0x2020,0x2020,0x2020,
0x2020,0x2020,0x2020,0x2020,
0x2020,0x2020,0x2020,0x2020,
0x09F4, // M锁存起始:M500
0x0BFF, // M锁存结束:M1023
0x01F4, // S锁存起始:M500
0x03E7, // S锁存结束:M999
0x0E64, // C锁存起始:C100
0x0EC7, // C锁存结束:C199
0x0EDC, // C锁存起始:C220
0x0EFF, // C锁存结束:C255
0x0190, // D锁存起始:D200
0x03FE, // D锁存结束:D511
0x0000,
0x0000,
0x0000, // 文件寄存器起始地址:1096/2096/3096...
0x0000, // 文件寄存器容量块数:一块=500点=1000字节
0x0000, // 注释起始地址:1096/2096/3096...
0x0000, // 注释容量块数:一块=50点=1000字节
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
};
关于D8001的意义,就是PLC类型和版本号的解释:
读PLC的D8001后,PLC返回字串"9C5E" ,即是24220,它表示PLC类型是FX2N/FX2NC,版本为2.20。
PLC返回的是用ASCII字符表示的16进制数,它是以字节为单位的,如果要把两字节拼成一个字(Word),则要把,"9C5E"要把它理解为5E9Ch,FX即PLC是以10进制表示它的型号和版本的,5E9Ch=24220。查下表:
10进制数高两位表示PLC类型:
10: FX1
20: FX0,FX0S,FX0N,FX2(C)
24: FX2N,FX2NC
10进制数低三位表示PLC版本:
_D8000_ = 200; // D8000 : 监视定时器 (ms)
_D8001_ = 25210; // D8001 : PLC类型和系统版本号,5位数字,前两位位PLC类型号(22/26/25=>1S/1N/2N)
_D8002_ = 8; // D8002 : 寄存器容量 (2/4/8=>2K/4K/8K步) 16K步时訢8102=16
_D8102_ = 8; // D8002 : 寄存器容量 (2/4/8=>2K/4K/8K步) 16K步时訢8102=16
_D8003_ = 0x02; // D8003 : 寄存器类型 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|