IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> snap7库C++版本对PLC数据的读写 -> 正文阅读

[C++知识库]snap7库C++版本对PLC数据的读写

目录:

1、snap7库的C++版本源码的下载及编译;

2、对西门子S7- 200 smart 数据块的读写;

参考

1、snap7库的C++版本源码的下载及编译

(1)snap7的下载路径如下链接,我这边使用的最新版本的库,最新的也只是到2017年,至于为啥不再维护更新了,咱也不太清楚,对这也没太深入的研究;
https://sourceforge.net/projects/snap7/files/1.4.2/
(2)编译;
这里只是使用snap7的demo作为参考来介绍库的使用,使用的是arm-v7版本,具体路径:
snap7-full-1.4.2/snap7-full-1.4.2/examples/cpp/arm_v7-linux
修改该路径下的makefile文件,将编译器替换成自己的交叉编译器

##
## LINUX barebone makefile for c++ examples : good for all platforms
##
## Simply run make or make clean
##
## Intend this makefile only as a "batch examples updater" after library modification.
##

Libs     := -lsnap7 
Wrapper  :=snap7.cpp

CXX      := arm-linux-gnueabihf-g++
CC       := arm-linux-gnueabihf-gcc
CXXFLAGS :=-O3
CFLAGS   :=


LDFLAGS=-Wl,-rpath=/usr/arm-linux-gnueabihf/lib

.PHONY: all clean

all: 
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o client ../client.cpp ../$(Wrapper) $(Libs) 
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o server ../server.cpp ../$(Wrapper) $(Libs) 
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o srv_resourceless ../srv_resourceless.cpp ../$(Wrapper) $(Libs) 
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o apartner ../apartner.cpp ../$(Wrapper) $(Libs) 
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o ppartner ../ppartner.cpp ../$(Wrapper) $(Libs) 

clean:
	$(RM) client
	$(RM) server
	$(RM) srv_resourceless
	$(RM) apartner
	$(RM) ppartner

修改项介绍:将CXX和CX改为自己设备的交叉编译器,我这边用的是arm-linux-gnueabihf-g++;还有就是修改下编译好的snap7的动态库路径,LDFLAGS=-Wl,-rpath=/usr/arm-linux-gnueabihf/lib
编译指令:

arm-linux-gnueabihf-g++  ../client.cpp ../snap7.cpp  -o client -L ../../../build/bin/arm-linux-gnueabihf-linux/ -lsnap7 -Wl,-rpath=/usr/arm-linux-gnueabihf/lib -lpthread -lrt

将编译完成的可执行文件拷贝到设备,在设备端调试;

2、对西门子S7- 200 smart 数据块的读写

数据块的读写,只是简单测试下I块单byte数据的读取和DB块多byte数据的读取,
在这里插入图片描述
这里使用三方工具HslCommunicationDemo查看I块的数据值,其中I0.4 和I0.6的值都是true;
snap7-full-1.4.2/snap7-full-1.4.2/examples/cpp/client.cpp源码的main函数添加以下代码

byte value1 = 0;
bool temp = false;
Client->EBRead(0,1,&value1 );
int n0, n1, n2, n3, n4, n5, n6, n7;
n0 = (value6 & 0x01) == 0x01 ? 1 : 0;
n1 = (value6 & 0x02) == 0x02 ? 1 : 0;
n2 = (value6 & 0x04) == 0x04 ? 1 : 0;
n3 = (value6 & 0x08) == 0x08 ? 1 : 0;
n4 = (value6 & 0x10) == 0x10 ? 1 : 0;
n5 = (value6 & 0x20) == 0x20 ? 1 : 0;
n6 = (value6 & 0x40) == 0x40 ? 1 : 0;
n7 = (value6 & 0x80) == 0x80 ? 1 : 0;
printf("<<<<< hhhhh 579 n0 = %d, n1 = %d, n2 = %d, n3 = %d, n4= %d, n5= %d, n6=%d, n7= %d\n", n0,n1,n2,n3,n4,n5,n6,n7);

输出打印结果:

在这里插入图片描述

代码中EBRead()接口底层调用的是Cli_EBRead();
在这里插入图片描述
接口及参数说明如上,其中第二个参数就是PLC的偏移地址,比如说IO.4,那偏移地址就是0,如果是I4.2,偏移地址是4,详细的解释如下图所示:第三个参数是要读取数据的大小,最小单位是bytes,所以I0.4位置存放的数据类型是bool型,那就取一个byte就可以了,取出数据之后直接赋值给bool变量即可;
在这里插入图片描述
DB数据块数据的读取,使用的接口是Cli_DBRead(),函数的说明如下
在这里插入图片描述
这个比较容易理解,第二个参数就是DB块的序号,第三个参数是在数据块内的偏移地址,第四个参数是读取数据的大小,最小单位也是byte;

 float value0 = 0;
 byte value1[4]= {0};
 Client->DBRead(1,300,4,value1);
 *((byte*)&value0 + 0) = value1[3];
 *((byte*)&value0 + 1) = value1[2];
 *((byte*)&value0 + 2) = value1[1];
 *((byte*)&value0 + 3) = value1[0];

上面的代码就是要读取DB1.300位置的数据,是个浮点数据,读取出来的数据是要进行数据大端小端的转化才行;

参考:
https://blog.csdn.net/fengshuiyue/article/details/39665421

https://blog.csdn.net/weixin_42292586/article/details/121909746?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121909746-blog-93708694.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121909746-blog-93708694.pc_relevant_paycolumn_v3&utm_relevant_index=2

https://blog.csdn.net/weixin_41320090/article/details/93708694

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:32:27  更:2022-07-03 10:33:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:06:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码