西门子S7-1500PLC的常用Area地址以及网络读写

一、1500常用 Area 地址(PLC内部存储区地址指针)

存储区 符号 Area 编号 说明
输入映像 I 16# 8100_0000 只读
输出映像 Q 16# 8200_0000 只写
位存储器 M 16# 8300_0000 读写
数据块 DB 16# 8400_0000 读写
外设输入 PI 16# 8500_0000 只读
外设输出 PQ 16# 8600_0000 只写

二、偏移计算公式

1. 位地址:I0.0 / Q0.2 / M1.5 / DB1.DBX3.4
复制代码
Start = 字节地址 × 8 + 位地址

例子:

  • I0.0 → 0×8+0 = 0
  • Q0.2 → 0×8+2 = 2
  • M1.5 → 1×8+5 = 13
  • DB1.DBX3.4 → 3×8+4 = 28
2. 字节地址:IB0 / QB1 / MB2 / DB1.DBB5
复制代码
Start = 字节地址

例子:

  • IB0 → 0
  • QB1 → 1
  • MB2 → 2
  • DB1.DBB5 → 5
3. 字地址:IW0 / QW2 / MW4 / DB1.DBW6
复制代码
Start = 字地址

例子:

  • IW0 → 0
  • QW2 → 2
  • MW4 → 4
  • DB1.DBW6 → 6
4. 双字地址:ID0 / QD4 / MD8 / DB1.DBD12
复制代码
Start = 双字地址
5. DB 块特殊规则

DB 块除了 Area=0x84,还要多传一个参数:DB 编号

例如:

  • DB1.DBX0.0 → DB=1
  • DB5.DBW10 → DB=5

三、套用模板

1. I 区(输入)
  • PLC Area = 0x8100 0000 PLC内部的起始地址
  • S7 Area = 0x81 S7报文中的起始地址
  • Start = 字节 ×8 + 位 偏移量
  • 只读

例:I2.5 Start = 2×8+5 = 21

2. Q 区(输出)
  • PLC Area = 0x8200 0000 PLC内部的起始地址
  • S7 Area = 0x82 S7报文中的起始地址
  • Start = 字节 ×8 + 位 偏移量
  • 读写

例:Q3.1Start = 3×8+1 = 25

3. M 区(位存储)
  • PLC Area = 0x8300 0000 PLC内部的起始地址
  • S7 Area = 0x83 S7报文中的起始地址
  • Start = 字节 ×8 + 位 偏移量
  • 读写

例:M5.4Start = 5×8+4 = 44

4. DB 区(最常用)
  • PLC Area = 0x8400 0000 PLC内部的起始地址
  • S7 Area = 0x84 S7报文中的起始地址
  • DB = 块号
  • Start = 字节 ×8 + 位
  • 读写

例:DB2.DBX10.3 DB=2 Start=10×8+3=83

5. PI 外设输入
  • PLC Area=0x8500 0000 PLC内部的起始地址
  • S7 Area = 0x85 S7报文中的起始地址
  • Start = 字节地址
  • 只读

例:PIW256 Start=256

6. PQ 外设输出
  • PLC Area=0x8600 0000 PLC内部的起始地址
  • S7 Area = 0x86 S7报文中的起始地址
  • Start = 字节地址
  • 读写

四、python的地址计算函数

python 复制代码
def s7_calc(area_str, byte, bit=0, db=1):
    """
    area_str: 'I','Q','M','DB','PI','PQ'
    byte: 字节地址
    bit: 位地址(0-7)
    db: DB号(仅DB区使用)
    return: area, start, db
    """
    area_map = {
        'I': 0x81000000,
        'Q': 0x82000000,
        'M': 0x83000000,
        'DB': 0x84000000,
        'PI': 0x85000000,
        'PQ': 0x86000000
    }

    area = area_map[area_str]
    start = byte * 8 + bit

    if area_str == 'DB':
        return area, start, db
    else:
        return area, start, 0

area, start, db = s7_calc('DB', 10, 5, db=3)
print(hex(area), start, db)  # 0x84000000 85 3

五、使用通信协议访问PLC

1、使用S7协议

如果使用S7协议,就不能直接写PLC的实际内部地址,比如I0.1在PLC内部的实际地址是16#8100 0001,但是S7报文中的Area = **0x81,**而不是8100 0001。使用S7协议的优点是有现成的S7通信库可用,编程方便。

2、不使用S7协议

如果不使用S7协议,可以在报文中直接携带PLC内部实际地址的指针,PLC解包后根据指针执行读写。也可以在上位机发送自定义的功能码和区域码。在PLC程序中再根据通信内容还原出16#81000000这样的地址指针(或将指针定义为变量,使用MOVE指令将area的起始地址传送到变量中,就不用记16#81000000这样的数字了)。不使用S7协议的优点是上位机可以灵活支持不同系列的PLC,而且从创建网络连接到数据收发、断线重连等都是自己一手写的代码,所有过程均可视可控,适合需要长期稳定工作的项目。

相关推荐
AOwhisky19 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
RainCity19 小时前
Java Swing 自定义组件库分享(十一)
java·笔记·后端
try2find20 小时前
Agent学习之补充my_plan_solve_agent
学习
bbaydnog20 小时前
FreeRTOS学习笔记 18:调试方法论——HardFault排查、栈溢出检测、运行时统计,RTOS调试三板斧
笔记·单片机·freertos
想你依然心痛20 小时前
HarmonyOS 6(API 23)实战:打造“光码智学舱“——AI编程学习新范式
学习·ar·ai编程·harmonyos·智能体
Lin_Aries_042121 小时前
ETPNav 复现指南:从环境搭建到连续环境视觉语言导航全流程
笔记·具身智能·datawhale
一口吃俩胖子1 天前
【脉宽调制DCDC功率变换学习笔记023】渐进分析法
笔记·学习
m0_377108141 天前
pid学习
学习
爱喝水的鱼丶1 天前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
智者知已应修善业1 天前
【51单片机2个外部中断切换LED花样】2024-1-3
c++·经验分享·笔记·算法·51单片机