折腾记:C++用开源库Snap7通过S7协议连接西门子PLC
初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
不是教程,是避坑指南。使用了S7-200smart和S7-1200这两款PLC。
目录
什么是snap7
下载
编译
S7-200smart准备
IP要弄清楚
数据准备
使用Snap7采集S7-200smart
S7-1200准备
使用Snap7采集1200
交叉编译
什么是snap7
snap7是个开源库,用来访问西门子PLC的S7协议,支持C/C++以及很多很多别的语言(别的是啥咱不关心)。
下载
搜官网下载啦,很简单的。
编译
下载过来的压缩包打开,进到build目录看,有说明文件,非常简单明了。(以后有闲可以整教程出来,不过真的很简单啊,我重点记录遇到的困难)
S7-200smart准备
IP要弄清楚
设置IP并牢记。Setp7-micro/win smart的搜索功能不好用(这可能是操作系统加强了网络安全的原因)。通过IP能连接到PLC就算正常了。
数据准备
200smart的数据区是V,snap7是不支持的。我的数据放在VB0和VB1,用HSL可以读取(虽然地址示例没有V,但是可以用),snap7没有对应的函数,所以创建了一个数据块。
如何创建数据块:
先连接PLC,底部状态栏显示PLC地址和“已连接”。左侧树,“数据块”,“插入数据页”,右侧下部“数据块”窗口,倒数第三个图标,像个“+R”的,“通过RAM创建数据块”,自动根据内存创建数据块,数据块索引究竟是0还是1不确定,没有地方设置,多尝试几个看看。创建完数据块要下载程序,然后把PLC设置为运行状态,然后就可以用读数据块的函数来读取数据了。
下载程序之后读取数据一直不变,我还以为是静态的,看了一眼PLC发现处于暂停状态,启动之后就一切正常了。因为开始我有两个数据块所以后一个索引是1是可以理解的,但是删除前一个之后仍然是1(这也可以理解啊,固定坑位模式吧),所以这个不能猜,要靠试。
使用Snap7采集S7-200smart
Snap7编译结果只有一个so,没有头文件。C++的包装文件是一对h和cpp,在代码示例里面,相同位置有个client的文件,是客户端的代码,把这三个文件拿去用就可以了。
client.cpp有main函数,改个名就能合在自己的项目里面了。
由于snap7并未明确支持S7-200smart,所以有点麻烦。
实际测试发现参数要用(0,1)(机架号和槽位,下同),以及连接类型要设置为3(示例代码没有设置连接类型),不然可能无法连接。200smart其实是没有机架号和槽位参数的。
HSL的200smart并不需要设置这些。C#就是强些(我现在同时用C++和C#,C#确实舒服很多啊,但是程序太大放不进设备,没办法)。
实测连接类型为3,参数(0,0)和(0,1)正常,(0,5)和(1,0)则无法连接。
实测参数(0,0),连接类型不设置无法连接,连接类型0、1、4无法连接,2、3正常连接。
至于测试代码,除了client的测试,就是用了读数据块的函数。
S7-1200准备
S7-1200连接比较容易,用正确的参数(0、1)直接就连上了(不正确连不上),但是读数据始终出错,HSL也报错,此时PLC里面还是原来的程序,看不太懂。然后下载了我自己的程序,读取指定的数据块,一样报错,这就抓狂了,看各种设置都正确的,却始终无法读取,最后搜到一个帖子说“恢复出厂设置能解决问题”,于是就恢复出厂设置,重新下载程序,一切OK了。
使用Snap7采集1200
我的程序包含一个数据块,索引为2,总长度为26个字节。使用DBRead读取成功,数据都正确,但是要注意,数据块是有范围的,读取位置不能超出范围,否则失败。
实测无需设置连接类型,或者设置为1、2、3(0或4就不行了,文档里说3-10都是“S7 basic”啊,当然0确实不是有效值)。
交叉编译
交叉编译到arm64只需要把common.mk(build/unix下面)里面的指令换一下就可以了,很简单。arm v6、arm v7啥意思我不懂,我还是用的x86_64_linux.mk,实测程序正常运行。
(这里是结束)
相关文章:
折腾记:C++用开源库Snap7通过S7协议连接西门子PLC
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 不是教程,是避坑指…...
Android studio 新版本 NewUI toolbar显示快捷按钮
新版本的Android studio 启用新的界面,以前许多快捷按键位置有变化 文章目录 设置始终显示主菜单设置ToolBar快捷按钮显示设置右下角显示分支 设置始终显示主菜单 原本要点击左上角几个横向才显示的菜单 设置始终显示,View -> Appearance -> Mai…...
辛普森公式求函数的近似积分【通用计算】
利用辛普森公式可以近似求出复杂函数的积分值,公式如下: ∫ a b f ( x ) d x ≈ h 3 [ y 0 y 2 n − 1 4 ( ∑ i 1 n − 1 y 2 i − 1 ) ∑ i 1 n − 1 y 2 i ] \int_{a}^{b} f(x) dx \approx \frac{h}{3}\left[ y_0 y_{2n-1} 4(\sum\limits_{i1…...
即插即用 | YOLOv8热力图可视化方法详解,揭秘AI如何「看」世界!【附完整源码】
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
多线程学习D10 收尾了应该
线程安全集合类概述 重点介绍java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、Concurrent Blocking 大部分实现基于锁,并提供用来阻塞的方法 CopyOnWrite 之类容器修改…...
ai可以做思维导图吗?当然是可以的!
ai可以做思维导图吗?在快节奏的现代生活中,思维导图作为一种高效的信息组织和表达工具,越来越受到人们的青睐。随着人工智能(AI)技术的不断发展,AI思维导图软件也应运而生,它们不仅能够帮助用户…...
景源畅信数字:抖音小店的入住门槛大不大?
近年来,随着短视频平台的崛起,抖音小店逐渐成为了众多商家和创业者关注的焦点。那么,抖音小店的入住门槛究竟大不大呢?本文将从四个方面对这一问题进行详细阐述。 一、注册流程 抖音小店的注册流程相对简单,只需按照官方指引完成…...
鸿蒙开发-ArkTS语言-容器-非线性容器
鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 文章目录 前言 一、非线性容器 1.HashMap 2.HashSet 3.TreeMap 4.TreeSet 5.LightWeightMap 6.LightWeightSet 7.P…...
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、简单介绍Sizeof和Strlen1.1 Sizeof1.2 Strlen函数1.3 Sie…...
【设计模式】单例模式的前世今生
文章目录 引言简介起航!向“确保某个类在系统中只有一个实例”进发 ⛵️Lazy SingletonDouble-checked locking(DCL) SingletonVolatile SingletonAtomic SingletonMeyers Singleton 附:C静态对象的初始化 引言 说起单例模式&…...
厦门网上在线教育系统,线下老师怎么转型到线上网上授课?
现在很多 线下老师都想转到线上做网课,但是在转线上过程中会出现很多问题,很多人都不知道怎么开始,今天小编和大家说一下要注意的。 一、你要有一套适合线上的教学视频 首先你要准备做的课程内容是什么,怎么讲,讲什么&…...
Spring底层入门(九)
boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码: 参数一是当前类的字节码,参数二是main的args参数。 public class StartApplication {public static…...
掌握Android Fragment开发之魂:Fragment的深度解析(下)
在上一篇文章中,我们深入探讨了Fragment 通信,包含Fragment 向 Activity 传递数据、Activity 向 Fragment 传递数据、Fragment 之间的通信方式。感兴趣的朋友,请前往查阅: 掌握Android Fragment开发之魂:Fragment的深度…...
小巧简单实用的Linux端口转发工具Rinetd
Linux下实现端口转发有很多种方法,尤其是在可以联网的情况下,更是容易。最近在资源受限的定制系统中,找到一个方便离线安装和使用的端口转发工具Rinetd,安装包仅几十K,而且有很多版本的Linux发行系统的支持。 1、安装…...
HackBar 新手使用教程(入门)
啥是Hackbar? Hackbar是一个Firefox 的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响。 有网址的载入于访问,联合查询,各种编码,数据加密功能。 这个Hackbar可以帮助你在测试SQL注入,XSS漏洞和网站的安全性,主要是帮助…...
<Linux> 权限
目录 权限人员相对于文件来说的分类更改权限文件的拥有者与所属组umask粘滞位 权限 权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中的每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以…...
Nacos Docker 快速部署----解决nacos鉴权漏洞问题
Nacos Docker 快速部署 1. 说明 1.1 官方文档 官方地址 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html docker启动文件的gitlhub地址 https://github.com/nacos-group/nacos-docker.git 问题: 缺少部分必要配置与说明 1.2 部署最新版本Nacos&…...
存储或读取时转换JSON数据
一、 数据库类型 二、使用Hutool工具 存储时将数据转换为JSON数据 获取时将JSON数据转换为对象 发现问题: 原本数据对象是Address 和 Firend但是转换完成后数据变成了JSONArray和JSONObject 三、自定义TypeHandler继承Mybatis的BaseTypeHandler处理器 package …...
Spring Data JPA的作用和用法
Spring Data JPA 是 Spring 框架的一个模块,它提供了一种数据访问抽象,允许以一种声明式和简洁的方式来处理数据库操作。它基于 Java Persistence API (JPA),是一个行业标准的 ORM(对象关系映射)规范,用于将…...
【go项目01_学习记录08】
学习记录 1 模板文件1.1 articlesStoreHandler() 使用模板文件1.2 统一模板 1 模板文件 重构 articlesCreateHandler() 和 articlesStoreHandler() 函数,将 HTML 抽离并放置于独立的模板文件中。 1.1 articlesStoreHandler() 使用模板文件 . . . func articlesSt…...
开源清理工具OpenClearn:透明可控的数字垃圾管理方案
1. 项目概述:一个开源的“清洁工”如何重塑你的数字生活如果你和我一样,是个在数字世界里摸爬滚打了十几年的老鸟,那你电脑里肯定也有一堆“数字垃圾”。这些垃圾不是指那些过时的文件,而是那些你明明已经删除了,但操作…...
别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表瞬间专业
解锁Matplotlib热力图的5个高阶美学密码:从基础图表到专业可视化 当你第一次用Matplotlib画出热力图时,那种成就感就像解开了数据分析的第一道密码。但随着项目复杂度的提升,那些默认参数生成的图表开始显得单薄——颜色映射不够精准、标注信…...
全栈代码资源聚合库:开发者如何高效利用开源代码示例提升工程能力
1. 项目概述:一个面向开发者的全栈代码资源聚合库最近在GitHub上看到一个挺有意思的项目,叫wuwangzhang1216/claude-code-source-all-in-one。光看这个名字,你大概能猜到这是个什么——没错,这是一个围绕“代码”和“源代码”做文…...
抠图怎么制作?2026年最全工具对比指南,一键搞定透明背景
五一假期,我被朋友们的"抠图需求"整崩溃了。换证件照底色、制作商品图、去掉背景重新合成……各种场景都来了一遍。索性我决定把这几年用过的抠图工具都总结一下,给大家写篇真实体验文章。说实话,抠图这件事看似简单,但…...
Apple Silicon Mac原生Linux游戏体验:Asahi Linux驱动突破与实战指南
1. 项目概述:当Apple Silicon Mac遇见原生Linux游戏如果你和我一样,既是Mac用户,又对在Linux系统上折腾抱有热情,那么最近Asahi Linux项目的进展绝对会让你心跳加速。长久以来,在搭载Apple Silicon(M1、M2、…...
ISAC波束成形优化:通信与感知协同设计
1. ISAC波束成形优化:通信与感知的协同设计在自动驾驶、智能工厂等新兴应用中,无线通信系统不仅需要传输数据,还需具备环境感知能力。传统方案采用独立的通信和雷达系统,导致频谱利用率低下且硬件成本高昂。集成感知与通信(ISAC)技…...
车载网络测试演进:从CAN总线到TSN与SOA的实战解析
1. 项目概述:一场关于“神经”与“体检”的进化史几年前,我和几个同行在路边摊就着麻小和扎啤,聊起车载以太网测试,那时它还是个新鲜玩意儿,大家讨论的焦点更多是“要不要做”和“怎么做”。几年过去,再回头…...
告别“找不同”游戏:STANet的时空注意力如何让AI看懂遥感图中的建筑变化?
告别“找不同”游戏:STANet如何让AI像人类一样理解遥感图中的建筑变化? 想象一下,你面前有两张相隔数月的卫星照片,需要找出其中新建的楼盘或消失的农田。传统方法就像玩“找不同”游戏——逐像素对比颜色差异,稍有不慎…...
如何快速上手网易游戏NPK文件解包工具:新手3步完整教程
如何快速上手网易游戏NPK文件解包工具:新手3步完整教程 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你是否对网易游戏如《阴阳师》、《魔法禁书目录》中的…...
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南
ORT Reporter输出格式全解析:生成SPDX、CycloneDX和静态HTML报告的终极指南 【免费下载链接】ort A suite of tools to automate software compliance checks. 项目地址: https://gitcode.com/gh_mirrors/or/ort ORT(Open Source Review Toolkit&…...
