//============================================================================================//
// 写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 : 寄存器类型
这两天把程序/参数/注释/文件寄存器下载上传全做好了,RAM的读写和强制也好了。完全仿2N资源,除了D少点外。
现在主要的问题是监控机制没有完全搞明白。
FX2N-48MR 捕获的串口通讯记录ourdev_536513.rar(文件大小:21K)(原文件名:FX_常用命令通讯记录.rar)
地址分配问题基本上是搞清楚了,地址搞清楚了,很多监控到得指令的意义就清楚了。
比如读0E02,就是读D8001,因为特殊寄存器的D8000-8255的地址是0x0E00,地址是字节为单位的,每个D单元占两字节,因此我们可以得到下表:
单元名称 地址 十六进制值 意义 十进制值 D单元名称 读入
D8000 0E00 00C8 监控定时器 200 8000 C800
D8001 0E02 5EF6 PLC型号和系统版本号 24310 8001 F65E
D8002 0E04 0008 内存容量 8 8002 0800
D8003 0E06 0010 内存类型 16 8003 1000
D8004 0E08 1F7C PLC错误时的特M的号码 8060 8004 7C1F
D8005 0E0A 0025 电池电压值 37 8005 2500
D8006 0E0C 001E 电池电压降低的检测值 30 8006 1E00
D8007 0E0E 0000 瞬时停止检测次数 0 8007 0000
D8008 0E10 000A 停电检测时间 10 8008 0A00
D8009 0E12 0000 24V DC故障模块号码 0 8009 0000
D8010 0E14 0000 当前扫描值 0 8010 0000
D8011 0E16 0000 最小扫描时间 0 8011 0000
D8012 0E18 0000 最大扫描时间, 0 8012 0000
D8013 0E1A 002A 秒 42 8013 2A00
D8014 0E1C 0034 分 52 8014 3400
D8015 0E1E 000A 小时 10 8015 0A00
D8016 0E20 0002 日 2 8016 0200
D8017 0E22 0003 月 3 8017 0300
D8018 0E24 000A 年 10 8018 0A00
D8019 0E26 0002 星期 2 8019 0200
D8020 0E28 000A 输入滤波设定 10 8020 0A00
D8021 0E2A 0000 输入滤波设定 0 8021 0000
D8022 0E2C 0000 0 8022 0000
D8023 0E2E 0000 0 8023 0000
D8024 0E30 0000 0 8024 0000
D8025 0E32 0000 0 8025 0000
D8026 0E34 0000 0 8026 0000
D8027 0E36 0000 0 8027 0000
D8028 0E38 0000 Z(Z0) 寄存器内容 0 8028 0000
D8029 0E3A 0000 V(V0) 寄存器内容 0 8029 0000
D8030 0E3C 003D No1 模拟容量值 61 8030 3D00
D8031 0E3E 001C No2 模拟容量值 28 8031 1C00
D8032 0E40 0000 0 8032 0000
D8033 0E42 0000 0 8033 0000
D8034 0E44 0014 ? 20 8034 1400
D8035 0E46 00FF ? 255 8035 FF00
D8036 0E48 03D7 ? 983 8036 D703
D8037 0E4A 0000 0 8037 0000
D8038 0E4C 0000 0 8038 0000
D8039 0E4E 0000 恒定扫描时间 0 8039 0000
D8040 0E50 FFFF 第1个活动STL状态号 65535 8040 FFFF
D8041 0E52 FFFF 第2个活动STL状态号 65535 8041 FFFF
D8042 0E54 FFFF 第3个活动STL状态号 65535 8042 FFFF
D8043 0E56 FFFF 第4个活动STL状态号 65535 8043 FFFF
D8044 0E58 FFFF 第5个活动STL状态号 65535 8044 FFFF
D8045 0E5A FFFF 第6个活动STL状态号 65535 8045 FFFF
D8046 0E5C FFFF 第7个活动STL状态号 65535 8046 FFFF
D8047 0E5E FFFF 第8个活动STL状态号 65535 8047 FFFF
D8048 0E60 0000 0 8048 0000
D8049 0E62 FFFF 最小的活动状态 65535 8049 FFFF
D8050 0E64 0000 0 8050 0000
D8051 0E66 0000 0 8051 0000
D8052 0E68 0000 0 8052 0000
D8053 0E6A 0000 0 8053 0000
D8054 0E6C 0000 0 8054 0000
D8055 0E6E 0000 0 8055 0000
D8056 0E70 0000 0 8056 0000
D8057 0E72 0000 0 8057 0000
D8058 0E74 0000 0 8058 0000
D8059 0E76 0000 0 8059 0000
D8060 0E78 0406 I/O配置错误 1030 8060 0604
D8061 0E7A 0000 PLC硬件错误 0 8061 0000
D8062 0E7C 0000 PLC硬件错误 0 8062 0000
D8063 0E7E 0000 串行口通讯错误[Ch1] 0 8063 0000
D8064 0E80 0000 参数错误 0 8064 0000
D8065 0E82 0000 语法错误 0 8065 0000
D8066 0E84 0000 回路错误 0 8066 0000
D8067 0E86 0000 操作错误 0 8067 0000
D8068 0E88 0000 操作错误步号 0 8068 0000
D8069 0E8A 0000 错误M8065至M8067的步 0 8069 0000
D8070 0E8C 01F4 并行链接错误判定时间 500 8070 F401
D8071 0E8E 0000 0 8071 0000
D8072 0E90 0000 0 8072 0000
D8073 0E92 0000 0 8073 0000
D8074 0E94 0000 剩余取样次数 0 8074 0000
D8075 0E96 0000 取样次数设定 0 8075 0000
D8076 0E98 0000 取样周期 0 8076 0000
D8077 0E9A 0000 触发指定 0 8077 0000
D8078 0E9C 0000 触发条件设置 0 8078 0000
D8079 0E9E 0000 取样数据指针 0 8079 0000
D8080 0EA0 0000 位设备号码No.0 0 8080 0000
D8081 0EA2 0000 位设备号码No.1 0 8081 0000
D8082 0EA4 0000 位设备号码No.2 0 8082 0000
D8083 0EA6 0000 位设备号码No.3 0 8083 0000
D8084 0EA8 0000 位设备号码No.4 0 8084 0000
D8085 0EAA 0000 位设备号码No.5 0 8085 0000
D8086 0EAC 0000 位设备号码No.6 0 8086 0000
D8087 0EAE 0000 位设备号码No.7 0 8087 0000
D8088 0EB0 0000 位设备号码No.8 0 8088 0000
D8089 0EB2 0000 位设备号码No.9 0 8089 0000
D8090 0EB4 0000 位设备号码No.10 0 8090 0000
D8091 0EB6 0000 位设备号码No.11 0 8091 0000
D8092 0EB8 0000 位设备号码No.12 0 8092 0000
D8093 0EBA 0000 位设备号码No.13 0 8093 0000
D8094 0EBC 0000 位设备号码No.14 0 8094 0000
D8095 0EBE 0000 位设备号码No.15 0 8095 0000
D8096 0EC0 0000 字设备号码No.0 0 8096 0000
D8097 0EC2 0000 字设备号码No.1 0 8097 0000
D8098 0EC4 0000 字设备号码No.2 0 8098 0000
D8099 0EC6 0000 高速循环计数器 0 8099 0000
D8100 0EC8 0064 100 8100 6400
D8101 0ECA 5EF6 序列器机种名/版本 24310 8101 F65E
D8102 0ECC 0008 内存容量 8 8102 0800
D8103 0ECE 0000 0 8103 0000
D8104 0ED0 0000 功能扩展存储种类代码 0 8104 0000
D8105 0ED2 0000 功能扩展存储器的版本 0 8105 0000
D8106 0ED4 0000 0 8106 0000
D8107 0ED6 0000 设备注释登记数 0 8107 0000
D8108 0ED8 0000 特殊模块连接台数 0 8108 0000
D8109 0EDA 0000 输出刷新错误 0 8109 0000
D8110 0EDC 0000 0 8110 0000
D8111 0EDE 0000 0 8111 0000
D8112 0EE0 0000 Ch1数字值(FX1N-2AD-BD) 0 8112 0000
D8113 0EE2 0000 Ch2数字值(FX1N-2AD-BD) 0 8113 0000
D8114 0EE4 0000 Ch1数字值(FX1N-1AD-BD) 0 8114 0000
D8115 0EE6 0000 0 8115 0000
D8116 0EE8 BAB7 47799 8116 B7BA
D8117 0EEA 6892 26770 8117 9268
D8118 0EEC 0000 0 8118 0000
D8119 0EEE 0000 0 8119 0000
D8120 0EF0 0000 FNC80(RS) 计算机链接[Ch1]通讯格式设置 0 8120 0000
D8121 0EF2 0000 计算机连接[Ch1]本地站号设置 0 8121 0000
D8122 0EF4 0000 FNC80(RS)发送数据的残余量 0 8122 0000
D8123 0EF6 0000 FNC80(RS)收信份数监视器 0 8123 0000
D8124 0EF8 0002 FNC 80(RS)标题 2 8124 0200
D8125 0EFA 0003 FNC 80(RS)终端 3 8125 0300
D8126 0EFC 0000 0 8126 0000
D8127 0EFE 0000 计算机链接[Ch1]根据需求先头号码指定 0 8127 0000
同理整理出PLC参数区数据:
参数 地址 十六进制值 十进制值 意义
0 0x8000 0008 8 程序总步数
1 0x8002 B658 46680
2 0x8004 0000 0
3 0x8006 0000 0
4 0x8008 2020 PLC密码
5 0x800A 2020
6 0x800C 2020
7 0x800E 2020
8 0x8010 2020 PLC名-标题
9 0x8012 2020
10 0x8014 2020
11 0x8016 2020
12 0x8018 2020
13 0x801A 2020
14 0x801C 2020
15 0x801E 2020
16 0x8020 2020
17 0x8022 2020
18 0x8024 2020
19 0x8026 2020
20 0x8028 2020
21 0x802A 2020
22 0x802C 2020
23 0x802E 2020
24 0x8030 09F4 2548 M锁存起始:M500
25 0x8032 0BFF 3071 M锁存结束:M1023
26 0x8034 01F4 500 S锁存起始:M500
27 0x8036 03E7 999 S锁存结束:M999
28 0x8038 0E64 3684 C锁存起始:C100
29 0x803A 0EC7 3783 C锁存结束:C199
30 0x803C 0EDC 3804 C锁存起始:C220
31 0x803E 0EFF 3839 C锁存结束:C255
32 0x8040 0190 400 D锁存起始:D200
33 0x8042 03FE 1022 D锁存结束:D511
34 0x8044 0000 0
35 0x8046 0000 0
36 0x8048 0000 0 文件寄存器起始地址:1096/2096/3096…
37 0x804A 0000 0 文件寄存器容量块数:一块=500点=1000字节
38 0x804C 0000 0 注释起始地址:1096/2096/3096...
39 0x804E 0000 0 注释容量块数:一块=50点=1000字节
40 0x8050 0000 0
41 0x8052 0000 0
42 0x8054 0000 0
43 0x8056 0000 0
44 0x8058 0000 0
45 0x805A 0000 0
另外发现,2N的波特率竟然是可以自适应的,虽然只有两个9600和19.2K,波特率升高时,先向0EEC就是写4字节,就是写D8118和D8119,感觉是些了两个随机数,然后发一个A1命令,然后就用新的波特率通讯了。波特率降低时,上位机没用发送特别的指令。
| |
|
| |
|