西门子PLC s7-1200学习之路「建议收藏」

西门子PLC s7-1200学习之路「建议收藏」1Introduction最近因为一个项目需要使用西门子PLC,买了一个入门级的PLCs7-1200,并完成了一个PLC和PC通过TCP进行通信的小程序,为了防止活干完了,内容就全忘了,所以用一个笔记进行梳理和总结。入门一种语言,需要回答新手的几个问题,这个笔记按照回答的方式梳理。2问题2.1PLC是什么,什么时候用,要怎么选?根据[1],PLC可以替代继电器功能并完成复杂的控制功能。个人感觉功能上来看,PLC、DSP、单片机和FPGA之间的界限越来越小,只是各有侧重。PLC因为基于梯形图


Jetbrains全系列IDE稳定放心使用

1 Introduction

最近因为一个项目需要使用西门子PLC,买了一个入门级的PLC s7-1200,并完成了一个PLC和PC通过TCP进行通信的小程序,为了防止活干完了,内容就全忘了,所以用一个笔记进行梳理和总结。入门一种语言,需要回答新手的几个问题,这个笔记按照回答的方式梳理。

2 问题

2.1 PLC是什么,什么时候用,要怎么选?

根据[1],PLC可以替代继电器功能并完成复杂的控制功能。个人感觉功能上来看,PLC、DSP、单片机和FPGA之间的界限越来越小,只是各有侧重。
PLC因为基于梯形图这种数据流编程,安全稳定、开发难度低,点位多并且拓展灵活,适合大型的电气系统开发。主要还是开发简单,现场调试也方便。
S7-1200和smart 200的集成度较高,也更便宜。s7-1200存储区更大、集成了网口。其他的那些大家伙太贵了。

2.2 PLC的开发环境?

按照[2]搭建开发环境,开始第一个程序。接下来2倍加速把[5]过一遍,观其大略。

2.3 硬件和程序怎么交互?

PLC做好了数据块和硬件IO的映射。
在这里插入图片描述
具体可以在设备组态中查看和配置。
在这里插入图片描述

2.4 梯形图编程

  • 问题1:梯形图上传递的是什么?类似的LabVIEW图形化语言的区别是什么?
    树干上只传递0,1变量,和电路类似也有并联和串联。LabVIEW数据流上是啥都可以传递。
    在这里插入图片描述
  • 问题2:一般变量怎么修改?
    既然梯形图不是真正的数据流编程,那一般变量只能通过函数进行修改。
  • 问题3: 一般变量怎么创建?有全局变量、局部变量之分吗?
    我们来看看函数中的变量,main函数中的变量和普通函数变量,只差了一个static,这不就是c语言中的静态变量嘛。那么c语言中的局部变量,常量都可以在梯形图编程中找到对应的变量了。
    在这里插入图片描述
    在这里插入图片描述
    PLC个人理解是典型的面向过程编程,那么显然少不了全局变量啊。
    除 了 I O 映 射 的 数 据 之 外 , 我 在 学 习 P L C 的 时 候 , 视 频 老 师 经 常 用 一 个 中 间 寄 存 器 M 10.0 , M 100.0 \color{red}{除了IO映射的数据之外,我在学习PLC的时候,视频老师经常用一个中间寄存器M10.0,M100.0} 除了IO映射的数据之外,我在学习PLC的时候,视频老师经常用一个中间寄存器M10.0,M100.0
    从c语言的角度出发,这么干非常危险, 最 好 不 要 去 这 么 直 接 操 作 内 存 啊 \color{red}{最好不要去这么直接操作内存啊} 最好不要去这么直接操作内存啊,可以用全局变量。
    再结合PLC的在线工具,可以像KEIL 编程一样,查看和改写全局变量的数据。
    在这里插入图片描述
    到这里,我们发现梯形图和开发嵌入式单片机差不多嘛。
  • 问题4: 如何创建函数?
    有三种函数:OB、FB、FC。
    在这里插入图片描述
    FB和FC的差距,差在有没有static。FB有static变量,每个FB的function内部的static 变量都有单独的存储空间,互不干涉。
    在这里插入图片描述
    F C 类 似 c 语 言 中 的 功 能 函 数 ; F B 可 以 从 电 气 模 块 化 设 计 的 角 度 理 解 。 \color{red}{FC类似c语言中的功能函数;FB可以从电气模块化设计的角度理解。} FC类似c语言中的功能函数;FB可以从电气模块化设计的角度理解。
    根据[3],OB类似于c语言中的线程(thread),所以梯形图虽小,也是五脏俱全。搞清楚梯形图编程的主干,编程完全是一个熟练度的问题了。

OB块主要用于程序循环、启动、延时中断、循环中断、硬件中断、HSC中断、诊断错误和时间错误八大事件。
OB块还有两个属性是编号和优先级,优先级越高,中断级别越高。在同样的优先级别,OB编号越小,越优先执行。

  • 问题5:数据结构有哪些?
    在这里插入图片描述
  • 问题6:库函数的能力?
    一个编程语言的强大,和官方的库函数以及社区的强大分不开。梯形图编程更贴近硬件,编程特点决定了,只使用官方库基本上满足需求。更复杂的需求估计只能换工控机这类设备了。
    常见电气项目中的主要功能使用起来非常方便。
    在这里插入图片描述
    – 问题7:数据怎么读写?如何进行数据读写保护?
    数据读写,两种方法:1)在梯形图主干上,通过触点(常开触点、常闭触点等)作为输入,用线圈作为输出;
    2)使用函数,进行数据操作;
    对于普通的数据类型,因为梯形图限定了程序是单线程,不会出现读写死锁的问题;
    对于IO输出,如果出现在不同的地方写入,就是PLC中的双线圈问题[4]。
    解决的方法就是两个支路进行并联,结合一些中间变量(寄存器)。
    在这里插入图片描述

2.5 怎么在线查看?

在线查看重点关注两个方面的内容:变量的变化?过程编程中具体过程状况?
通过梯形图,可以看到从上至下,从左到右的(0,1)执行变化,反应程序的过程状态,以及中间变量数值。可视化程度很高,和嵌入式开发很接近。
在这里插入图片描述
在数据DB区可以看到全部变量的变化情况,很方便。
在这里插入图片描述

References

[1] PLC原理及应用.刘星平 https://e.jd.com/30690778.html
[2] S7-1200零基础入门到精通 侯俊霞 https://www.bilibili.com/video/BV11A411u7n2?p=7
[3] https://www.zhihu.com/search?type=content&q=%E8%A5%BF%E9%97%A8%E5%AD%90%20OB
[4] https://www.zhihu.com/search?type=content&q=plc%20%E5%8F%8C%E7%BA%BF%E5%9C%88%20
[5] https://www.bilibili.com/video/BV11D4y1U7GU?p=26&t=1899

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180563.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • datax(24):远程调试datax

    datax(24):远程调试datax一、datax开启远程debug1、环境本地:win10,idea专业版2020.3,datax3.0远程:CentOS6.5,datax3.02、效果3、步骤3.1远程开启debug/apps/datax/bin/datax.py/apps/datax/job/job.json-d即在后面添加-d即可,默认端口为9999,也可以自行修改datax.py文件第35行REMOTE_DEBUG_CONFIG=”-Xdebug-Xrunjdwp:transport=dt

    2022年5月17日
  • awk 数组学习

    awk 数组学习awk是Linux一个必不可少的文本处理工具,其编程简单,功能强大。其中awk处理文本的几块比较常用:1、行分隔;2、正则表达式匹配;3、字符串处理;4、awk数组。接下来主要介绍一下awk数组的相关内容。awk数组特点:(1)、是一种关联数组(AssociativeArrays),下表可以是数字也可以是字符串,(2)、数组名和元素无需提前声明,(3)、无需指定数…

    2022年7月19日
  • Java线程池参数配置

    Java线程池参数配置在线程池的实际使用中,参数的配置总让人难以把握。在网上搜了一下,主要有以下的方案。跟大家分享。1.基本概念1.1ThreadPoolExecutor的重要参数corePoolSize:核心线程数核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,

    2022年5月23日
  • 配置sshd_config中的PermitRootLogin设置root登录或者禁止root登录

    配置sshd_config中的PermitRootLogin设置root登录或者禁止root登录在etc的sshd_config文件中,默认有PermitRootLoginno的配置,这个的意思是禁止root用户登录,如果想要允许root登录,需要suroot用户到sshd_config下进

    2022年6月30日
  • java面试题高级_Java高级面试题整理(附答案)[通俗易懂]

    java面试题高级_Java高级面试题整理(附答案)[通俗易懂]javajava8java开发Java高级面试题整理(附答案)这是我收集的10道高级Java面试问题列表。这些问题主要来自Java核心部分,不涉及JavaEE相关问题。你可能知道这些棘手的Java问题的答案,或者觉得这些不足以挑战你的Java知识,但这些问题都是容易在各种Java面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1…

    2022年7月18日
  • 香农编码的matlab实现总结_matlab简单代码实例

    香农编码的matlab实现总结_matlab简单代码实例用MATLAB编程实现香农编码实验四、用MATLAB编程实现香农编码⒈实验目的和要求(1)了解信源变长码的编码方法(2)掌握香农编码方法(3)掌握MATLAB的编程⒉实验主要内容使用MATLAB语言和excel对以下信源进行香农编码,并求出平均码长和编码效率。3.实验原理Ⅰ.香农编码方法将信源发出的N个消息符号按其概率的递减次序排列按下式计算第个消息的二进制代码组的码长,并取整计算第个消息的累加概…

    2022年9月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号