七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。

S7-1200 PLC 自学笔记

第二章 数据类型、存储区与寻址方式(I/Q/M/DB 全讲解)

前面看完基础参数,先不急着写程序。咱们先搞懂核心问题:PLC 是怎么运行的、数据存在哪、怎么找到对应数据。把这些吃透,后面写梯形图、SCL 代码都会轻松很多。


一、CPU 三种工作状态(PLC 的三种作息)

把 CPU 比作人,它日常就三种状态,分工很明确。

  1. STOP 停止模式相当于睡觉,完全不执行咱们写的程序,也不会刷新输入输出信号。但可以正常通讯、下载程序。
  2. STARTUP 启动模式 上电 / 从停止切到运行的过渡阶段,就像刚睁眼、赖床整理状态。只执行一次启动 OB(初始化程序),做完初始化再进入运行状态。
  3. RUN 运行模式正常干活状态,循环执行主程序,不停刷新输入、输出信号。

状态切换规则(6 种固定情况)

  1. 上电 → 启动模式(默认暖启动)
  2. 上电直接停在停止模式
  3. 停止 → 启动模式(拨 RUN 档位 / 远程启动)
  4. 启动失败 → 退回停止(启动程序报错就无法开机,必须改程序)
  5. 启动完成 → 进入运行模式
  6. 运行中出错 / 拨 STOP 档位 → 切回停止

重点:暖启动 & 启动 OB

  • 暖启动 :S7-1200 默认启动方式。上电后,普通临时数据清空,勾选了保持性的数据会保留,再执行初始化程序。
  • 启动 OB(OB100 等) :只在开机瞬间执行一次,不会循环跑。一般在这里写初始化代码:计数器清零、设置高速计数器、配置通讯 / 传感器参数等。可以创建多个启动 OB,按编号顺序依次执行。

二、程序结构与各类程序块(模块化编程)

S7-1200 不是从头到尾逐行跑代码,靠各类程序块组合调用,类似搭积木、套娃。

1. 组织块 OB(程序入口,系统自动调用)

  • OB1 循环 OB :相当于 C 语言的main主函数,PLC 运行后一直循环执行,是整个程序的核心入口。
  • 启动 OB:上电 / 启动时只跑一次,负责初始化。
  • 中断 OB:外部紧急信号触发(比如急停),立刻打断当前程序,优先处理紧急任务。

2. FC / FB / DB(功能块、数据仓库)

表格

块名称 通俗解释 核心特点
FC 功能 单纯干活的工具函数 无独立存储,输入计算出结果就结束,不保存中间状态
FB 功能块 带记忆的功能模块 自带专属背景数据块(DB),断电 / 反复调用都能保存状态,比如电机启停、定时状态
DB 数据块 数据存储仓库 分两种:全局 DB(公共数据,所有程序都能用)、背景 DB(专属某个 FB,单独存该模块数据)

3. 块嵌套调用(模块化用法)

主程序 OB1 里可以调用多个 FB、FC,FB 里面还能再调用其他块。同一个 FB 可以多次调用,只要搭配不同的背景 DB,就能实现 "一个功能控制多台设备"(比如用一套电机控制 FB,分别控制 1 号、2 号电机,数据互不干扰)。


三、存储区与寻址(数据存在哪、怎么找)

这是入门重中之重,搞懂内存分区和地址,就不会出现数据冲突、变量丢失的问题。

1. CPU 三类存储器(三种存储特性)

  1. **装载存储器(类似电脑硬盘)**断电数据不丢失,用来存放完整程序、组态、参数。空间不够可以插 SD 卡扩展。
  2. 工作存储器(类似电脑内存条) 只存放当前正在运行 的代码和实时数据,断电全部清空,无法额外扩展。
  3. **保持性存储器(专属保险柜)**专门存放勾选了「保持性」的变量(计数器、关键参数等),断电数据也能保留。

避坑:计数器断电归零,基本都是没开启保持性功能。

2. 五大常用地址区(I/Q/M/DB/L)

(1)I 输入区(耳朵,接收外部信号)

对应 PLC physical 输入端子,接按钮、传感器、接近开关。每个扫描周期一开始,PLC 会把外部端子状态统一读到 I 区,程序运行期间 I 区数据不会临时变动,保证信号稳定。示例:I0.0(第 0 字节第 0 个位,单个开关量)、IW0(16 位字)。

(2)Q 输出区(手脚,控制外部设备)

对应 PLC 输出端子,接指示灯、接触器、继电器。程序只修改 Q 区内部数据,一个扫描周期结束后,统一把数据刷新到外部端子,避免输出频繁抖动。示例:Q0.0、QW0。

(3)M 位存储区(内部中间变量)

没有物理端子,纯程序内部使用,用来做中间状态标记、临时运算。整个程序全局通用,大型项目少用 M 区,容易出现地址冲突。示例:M0.0(位)、MW10(字)、MD20(双字)。

(4)DB 数据块(专属数据仓库)

西门子推荐的主流用法,支持自定义变量、结构体、数组。

  • 全局 DB:公共数据,所有块都能读写;
  • 背景 DB:绑定 FB 使用,只给对应功能块存数据。优点:支持中文 / 自定义变量名(符号寻址),方便阅读和维护。
(5)L 临时存储区(草稿纸)

只在当前程序块(OB/FC/FB) 运行时生效,块执行完毕数据直接清空。只能做临时计算,不能存关键状态。

3. 两种访问端子的方式

  1. **常规访问(I0.0 / Q0.0)**走过程映像区,信号稳定,普通开关、电机控制首选。
  2. **直接物理访问(I0.0:P / Q0.0:P)**跳过映像区,直接读写硬件端子,响应速度极快。只用在高速计数、高速定位等对实时性要求高的场景。

4. 按「位 / 字节 / 字 / 双字」访问(最常用寻址)

按不同大小读取内存,严禁地址重叠(比如用了 MW10,就不要再单独用 MB10、MB11,数据会互相覆盖)

  • 位(Bit):1 个点位,Bool 开关量,例:I0.0、M1.7
  • 字节(B):8 个位组成,例:IB0、MB0
  • 字(W):2 个字节 = 16 位,存普通整数,例:IW0、MW10
  • 双字(D):4 个字节 = 32 位,存大数、小数,例:ID0、MD20

5. 进阶寻址方式

  1. Slice 切片访问把一个字 / 双字拆分成单独的位、字节读取。比如一个 32 位数据里存了 32 路报警信号,可直接单独读取某一位报警,不用复杂运算。
  2. AT 覆盖访问同一块内存,既可以当成整数使用,也可以拆成多个开关量使用,不额外占用内存,灵活转换数据格式。

四、数据类型详解

PLC 里所有变量都要指定数据类型,类型和寻址地址必须匹配。

1. 基础数据类型(必记)

  • Bool 布尔:1 位,只有 0/1,代表开关通断
  • Byte/USInt:8 位,无符号整数,范围 0~255
  • SInt:8 位有符号整数,范围 - 128~127
  • Word/UInt:16 位无符号整数,0~65535
  • Int:16 位有符号整数,最常用整数类型,-32768~32767
  • DWord/UDInt:32 位无符号大数
  • DInt:32 位有符号大数,计数、累计数值优先用它,不容易溢出
  • Real 浮点数:32 位,存带小数点的数值(温度、压力),精度有限
  • LReal 长浮点:64 位,高精度小数,财务、精密计算推荐
  • 时间、日期、字符串:专门用来存时长、日期、文字报错信息

重点提醒:Real 浮点数是二进制近似存储,不要直接判断两个浮点数是否相等

2. 复合数据类型(进阶用法)

  • 数组 Array:一串同类型数据,比如 10 个温度值做成一组数组
  • 结构体 Struct:把不同类型数据打包(比如一台电机:状态、电流、温度放一起)
  • UDT 自定义数据类型:做成通用模板,重复调用,适合多台同类型设备

3. 浮点数比较 3 种正确写法(实战高频问题)

因为存储精度问题,A == B 基本判定失效,推荐三种方案:

  1. **差值容差法(最常用)**计算两个数的差值,只要差值小于极小值,就判定为相等。
  2. 区间判断指令IN_RANGE指令,判断数值是否在误差区间内。
  3. **放大转整数比较(工业现场首选)**把小数乘以倍数转为整数再对比,规避浮点精度问题。

五、本章速记口诀(方便复盘)

  1. 运行状态:STOP 睡觉,STARTUP 初始化(只跑一次),RUN 循环干活;
  2. 程序块:OB 是入口,FB 带记忆配 DB,FC 纯运算无存储,DB 是公共 / 专属数据仓库;
  3. 存储器:装载 = 硬盘,工作 = 内存,保持区 = 断电不丢的保险柜;
  4. 地址区:I 是输入耳朵,Q 是输出手脚,M 是内部临时标记,DB 是主力数据仓库,L 是临时草稿纸;
  5. 寻址:普通控制用映像区,高速场景加:P直连硬件;位 / 字节 / 字 / 双字别重叠地址;
  6. 数据类型:Bool 管开关,Int 管普通整数,大数用 DInt,小数慎用 Real,浮点比较不能直接判相等。
相关推荐
广州浮点FLOATLIC20 小时前
Mentor Graphics浮动许可证管理为什么一到流片节点就失控
java·大数据·数据库·许可证管理·cad 许可证优化
難釋懷20 小时前
Nginx日志
前端·网络·nginx
Loongproxy20 小时前
大规模采集为啥用隧道代理IP?会话保持如何做到无感轮换
java·服务器·网络
老赵的博客20 小时前
工控机之UDP组播
网络·网络协议·udp
上下求索,莫负韶华20 小时前
切面学习笔记
笔记·python·学习
小王C语言20 小时前
MySQL 库的操作:字符集和校验规则、数据库的增删查改、备份和还原
数据库·mysql
小王C语言21 小时前
MySQL 数据类型:数值类型、字符串类型、日期和时间类型、enum 和 set、find_in_set 查询
android·数据库·mysql
测试运维日常笔记21 小时前
Unix/Linux 系统软件包管理笔记
linux·笔记·unix
小疆智控21 小时前
工业跨网通讯实践EtherCAT转TCPIP网关关键技术
网络·网络协议
和煦的糖果21 小时前
项目1: TurtleBot3 自主导航的第一阶段学习
网络