第38课 · 把数据存到卡上:SD 卡读写

信捷指令讲堂 · 6 段 · 共 3:40 · 正文 1128 字 · 完全免费

设备跑出来的数据留在 PLC 里,关机就没了。这节课教你怎么读写 SD 卡,并讲清那个让人抓狂的规则:行号是从"数据行"开始数的,不是从文件第一行。

完整课程 · 智慧屏 + 数字人讲师加载较慢?先看下面的图文
正在加载数字人讲师 …
首次打开约需 30~60 秒(3D 模型较大,只在电脑上加载)
加载期间可以先往下看图文讲解
这台设备暂时跑不了完整课程需要支持 WebGL 的浏览器(多数电脑浏览器都支持)
下面是同一节课的图文讲解 + 音频,内容完全一样

📱 手机上看不到完整课程(数字人讲师需要电脑浏览器的 3D 支持)。下面是这节课的图文讲解 + 音频,内容完全一样,手机上也能完整学完。想体验完整课程,用电脑打开这一页即可。
仍然在手机上试试完整课程

1/6

卡上得先有东西

0:36

卡上得先有东西

  • 它是什么PLC 卡槽里的小存储卡
  • 三条硬规定32G 内、FAT32、以太网型不支持
  • 文件怎么放data001~data999.csv,放根目录
  • 表格从第一行开始第一行是类型申明
把数据存到卡上:SD 卡读写 · 卡上得先有东西 梯形图 读第 1 列第 2 行,D20 拿到数

读第 1 列第 2 行,D20 拿到数

SD 卡是插在 PLC 卡槽里的一张小存储卡,程序能读它也能写它。用之前记三条:容量不能大于 32G,必须先格式化成 FAT32,以太网型 PLC 不支持。卡上的文件名是固定的,从 data001.csv 到 data999.csv,而且要放在根目录下。文件内容就是一张表格,第一行写数据类型,第二行开始才是数据。这张卡上已经放好一个文件,画面里 M0 一合上,程序就把第一列第二行读了出来。

2/6

表格长什么样

0:35

表格长什么样

  • 第一行不是数据是类型申明
  • 四种类型W / DW / F / S
  • ★ 定宽不够宽就在左边补空格
  • 双字占两个寄存器第二列读进来是两个数
把数据存到卡上:SD 卡读写 · 表格长什么样 梯形图 第二列是双字,占两个寄存器

第二列是双字,占两个寄存器

打开这个文件,它其实就是一张表格。第一行不是数据,是类型申明,写这一列用哪种类型。一共四种:单字 W 占六个字符,双字 DW 占十一个字符,浮点 F 后面跟整数位和小数位,字符 S 后面跟的是占用几个字。每种都按固定宽度排好,数不够宽就在左边补空格,列与列之间用逗号隔开。所以第二列的双字,读进来要占两个寄存器。画面里 M0 一合上,读出来的就是两个字。

3/6

读的三个地址

0:39

读的三个地址

  • 第一个操作数参数首地址,连带 D0~D2
  • D0~D2 各放什么索引号 / 列号 / 行号
  • 第二个操作数要读几个字
  • ★ 行号怎么算第一行 = 类型下面那行
把数据存到卡上:SD 卡读写 · 读的三个地址 梯形图 手册读例:D20 读出 -32765

手册读例:D20 读出 -32765

读卡用 READSD 这条指令,后面跟三个操作数。第一个是参数首地址 D0,它连着占三个寄存器:D0 放文件索引号,D1 放列号,D2 放行号。第二个操作数是 D10,写要读几个字。第三个是 D20,读到的数据就放在它开始的寄存器里。行号从数据行开始算,第一行就是类型申明下面那一行。手册的例子是索引 1、第一列、第二行,取一个字,读出来正好是 -32765。画面里 M0 一合上就能看到。

4/6

把数写回卡上

0:38

把数写回卡上

  • 操作数排法和读几乎一样
  • 第三个操作数数据从哪来
  • 参数块可共用读出来改完再写回去
  • ★ 行数超了会扩展扩展很慢,别这么用
把数据存到卡上:SD 卡读写 · 把数写回卡上 梯形图 写进第三行,再读回来对照

写进第三行,再读回来对照

写卡用 WRITESD,操作数的排法和读几乎一样。第一个还是参数首地址,里面照样是索引号、列号、行号;第二个是要写几个字;第三个换成了数据来源的首地址。参数块可以跟读共用一套,读出来的数改完就能原样写回去。要注意:行号超过卡上实际行数,文件会被自动扩展。手册叮嘱过,扩展很慢,会影响扫描周期,别这么用。画面里 M0 一合上,先把 D50 写进第三行再读回来,D20 和 D50 就对上了。

5/6

出错看哪一个

0:38

出错看哪一个

  • 错误写在哪特殊寄存器 SD453
  • 常见的几个码0 成功 / 4 文件不存在
  • ★ 一笔不能只读一半字数对不上就报 28
  • 看画面读不存在的文件 → 4
把数据存到卡上:SD 卡读写 · 出错看哪一个 梯形图 读不存在的文件,状态字报 4

读不存在的文件,状态字报 4

读写出错不会停机,它把结果写进特殊寄存器 SD453。零是成功,四是文件不存在,二十四是文件索引号不合法,索引只能从一到九九九;二十五是列号超出了文件的列数;二十六是行号小于一,或者超过了实际行数;二十七和二十八都跟要读几个字有关。手册还叮嘱一条:一笔数据不能只读取其中一部分,字数跟类型对不上就要报二十八。画面里故意去读一个不存在的文件,状态字立刻变成四,D20 一动没动。

6/6

一批数据一起搬

0:35

一批数据一起搬

  • 列号写 0第二个操作数变成行数
  • 整行怎么放按列顺序排进寄存器
  • 写回去也一样从左到右、从上到下
  • 看画面一行三个格子一次读完
把数据存到卡上:SD 卡读写 · 一批数据一起搬 梯形图 列写 0,一整行三个格一起读

列写 0,一整行三个格一起读

最后说一个巧办法:如果列号写零,那第二个操作数就不再是字数,而是行数,一次把整行搬走。比方说索引一、列号零、行号一、字数一,意思是从第一行开始读一行;这一行有几列、每列占几个字,它自己算好,按列的顺序放到 D20 开始的寄存器里。手册里写进去的顺序也是这个路子:先第一列第一行,再第二列第一行,从左到右、从上到下。画面里列号写零,一行三个格子一次就读完了。

想亲手试一下?

这门课的电路,已经给你摆好了。不用装软件,点开就能按按钮、看线圈亮。