编译源码

参考代码

https://gitee.com/wilson202008/demo-snap7

下载

snap7-full-1.4.2.7z
https://sourceforge.net/projects/snap7/files/1.4.2/
下载后解压到目录下

编译

进入下面的目录/snap7/build/unix

$ sudo make -f x86_64_linux.mk install
g++ -shared -fPIC -o ../bin/x86_64-linux/libsnap7.so @"filelist.txt" -L.  -lpthread -lrt  -O3
rm -f "filelist.txt"
cp -f ../bin/x86_64-linux/libsnap7.so /usr/lib

SNAP7的使用

代码目录结构

需要把snap7.cpp和snap7.h包含进来,在源码可找到

$ ls
build  CMakeLists.txt  Main.cpp  PLCTest.cpp  PLCTest.h  snap7.cpp  snap7.h

CMakeLists.txt的编写

需要包含libsnap7.so
libgtest.a是为了编写测试用例

cmake_minimum_required(VERSION 2.8)project(demo)SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -g -Wall")SET(SNAP7LIB /usr/lib/libsnap7.so)
SET(GTESTLIB /usr/local/lib/libgtest.a)aux_source_directory(. DIRSRCS)add_executable(demo ${DIRSRCS})
target_link_libraries(demo ${SNAP7LIB} ${GTESTLIB})

PLCTest.h的编写

#pragma once#include <memory>
#include <iostream>#include "gtest/gtest.h"
#include "snap7.h"class PLCTest : public testing::Test
{
private:void SetUp() override;void TearDown() override;  public:std::shared_ptr<TS7Client> _client;
};

连接PLC

void PLCTest::SetUp()
{_client = std::make_shared<TS7Client>();int res = _client->ConnectTo("192.168.30.5", 0, 1);std::cout << "connect result: " << res << std::endl;
}

断开连接

void PLCTest::TearDown()
{if (_client != NULL){_client->Disconnect();}
}

写M块的数据

下面是修改MW68为1的例子

TEST_F(PLCTest, writeMB)
{if (_client == NULL){return;}byte buffer[2] ={0x0000, 0x0001};int bufsize = sizeof(buffer);int res = _client->MBWrite(68, bufsize, buffer);EXPECT_EQ(res, 0);if (res != 0){std::cout << "MBWrite failed, " << CliErrorText(res)<<std::endl;return;}
}

读M块的数据

下面是读取MW90的例子

TEST_F(PLCTest, readMB)
{if (_client == NULL){return;}byte buffer[1];int bufsize = sizeof(buffer);int res = _client->MBRead(90, bufsize, buffer);EXPECT_EQ(res, 0);if (res != 0){std::cout << "MBRead failed, " << CliErrorText(res)<<std::endl;return;}std::cout<<"data: ";for (int i = 0; i < bufsize; i++){std::cout<<(int)buffer[i]<<" ";}std::cout<<std::endl;
}

读取DB块的数据

TEST_F(PLCTest, readDB)
{if (_client == NULL){return;}byte buffer[1];int bufsize = sizeof(buffer);int res = _client->DBRead(5, 0, bufsize, buffer);EXPECT_EQ(res, 0);if (res != 0){std::cout << "DBRead failed, " << CliErrorText(res)<<std::endl;return;}std::cout<<"data: ";for (int i = 0; i < bufsize; i++){std::cout<<(int)buffer[i]<<" ";}std::cout<<std::endl;
}

写DB块的数据

TEST_F(PLCTest, writeDB)
{if (_client == NULL){return;}byte buffer[2] ={0x0000, 0x0000};int bufsize = sizeof(buffer);int res = _client->DBWrite(6, 0, bufsize, buffer);EXPECT_EQ(res, 0);if (res != 0){std::cout << "DBWrite failed, " << CliErrorText(res)<<std::endl;return;}
}

获取PLC版本

TEST_F(PLCTest, getOrderCode)
{if (_client == NULL){return;}TS7OrderCode info;int res = _client->GetOrderCode(&info);EXPECT_EQ(res, 0);if (res != 0){std::cout << "get order code failed, " << CliErrorText(res)<<std::endl;return;}std::cout<<"get order code success, Code: "<<info.Code<<", Version: "<<info.V1<<"."<<info.V2<<"."<<info.V3;
}

获取Block信息

TEST_F(PLCTest, listBlock)
{if (_client == NULL){return;}TS7BlocksList List;_client->ListBlocks(&List);printf("  OBCount  : %d\n", List.OBCount);printf("  FBCount  : %d\n", List.FBCount);printf("  FCCount  : %d\n", List.FCCount);printf("  SFBCount : %d\n", List.SFBCount);printf("  SFCCount : %d\n", List.SFCCount);printf("  DBCount  : %d\n", List.DBCount);printf("  SDBCount : %d\n", List.SDBCount);
}

Snap7 在西门子PLC的使用相关推荐

  1. 信捷plc485通信上位机_基于Snap7实现与西门子PLC通信

    如果你对西门子PLC通信或者上位机开发稍微有一点研究的话,应该对Snap7有所耳闻. Snap7是一个基于以太网与西门子S7系列PLC通信的开源库,在世界领域应用很广.但也许是因为资料比较少,而且很多 ...

  2. 西门子标准报文1常用_基于Snap7使用C#编程访问西门子PLC系列教程(2)-S7协议

    本文是Snap7软件包系列教程的第2篇,我们来介绍下S7协议,包括如下几个主题: 1.S7协议简介 2.S7协议命令简介 3.S7协议通信的角色与模式 1.S7协议简介 S7协议是西门子S7系列PLC ...

  3. python实时读plc数据_python snap7读写西门子S系列PLC寄存器的值(PLC的I、Q、M、DB区)...

    西门子 SiemensTCP/IP调试助手工具是利用python 开发的,适用于西门子S7-300.S7-400.S7-1200.S7-1500等具备Ethernet TCP/IP通讯方式的PLC的( ...

  4. jetson nano上编译与使用西门子PLC通讯库snap7

    文章目录 一.西门子snap7介绍 二.西门子S7通讯介绍 三.jetson nano编译snap7库 四.Qt Cmake导入snap7库 五.snap7主要函数说明 1.与PLC建立连接 2.读写 ...

  5. 如何使用 Python 构建 西门子PLC Snap7通信

    如何使用 Python 构建西门子 PLC Snap7通信 PLC(Programmable Logic Controller)即可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制领域中, ...

  6. python连接plc_Python与PLC踩坑实录:成功解决西门子 PLC S7-200_SMART与PC连接时不能同时用Python的snap7包和step7软件同时连接...

    解决西门子 PLC S7-200_SMART与PC连接时不能同时用Python的snap7包和step7软件同时连接 问题描述 在与西门子 PLC(型号S7-200_SMART)进行Python编程操 ...

  7. snap7通过NetToPLCsim工具接入模拟西门子PLC S7-1200步骤简介

    概述 本文主要是设备通过S7协议接入西门子PLC S7-XXXX系列的开发使用文档,主要包括西门子PLC组态工具博途V15,PLC模拟工具S7-PLCSIM,IP地址映射工具NetToPLCsim等使 ...

  8. C# Snap7 实现对西门子PLC的读写(本篇主要对系统诊断缓存区(SSL或SZL)内容进行读取)

    Snap 7 使用C# 实现对西门子PLC的读写 摘要: 本篇主要针对PLC的错误日志进行操作,此目的是方便在没有电气工程师在现场的情况下 快速定位错误位置,帮助节约ShoutDown 时间 提升企业 ...

  9. 西门子PLC与Unity3D通讯丨PROFINET通讯

    Unity3D 与西门子PLC通讯 前言 通讯协议 通讯建立的细节 期间遇到的两个主要问题 总结 前言 想做这样的通讯太久了,从21年二月份陆陆续续到十一月份才正式做好,最开始想西门子1200系列与u ...

  10. 用python编写西门子plc程序_snap7读写西门子plc1200步骤(python)

    本文是利用snap7进行对plc1200进行读写,所用语言是python3,windows7下,plc具体型号为S7-1212DC/DC/DC 1.snap7安装 win+R打开运行串口,输入cmd, ...

最新文章

  1. git add 文件夹_Git的下载安装以及基本操作
  2. open AI 在DOTA 5v5 比赛中战胜职业选手
  3. 安装CentOs 5.5后无法显中文(中文乱码)
  4. TrueSec引导的Linux系统和安全检测工具预览
  5. STL 之随机访问迭代器
  6. CentOS 7 安装nginx
  7. 使用BusyBox制作根文件系统的操作步骤
  8. html中图片响应式怎么写,如何使用 HTML5 的picture元素处理响应式图片
  9. string获取 倒数 下标_NBA球星福克斯沉迷LOL,排名美服倒数98名!胜率太真实了...
  10. 利用python进行数据分析——第11章时间序列
  11. AT5 two-dimensional objects - the torus and genus
  12. 使用VsCode搭建Vue开发环境
  13. 微信公众号开发支付功能调用
  14. mac 思科 链路聚合_思科交换机配置链路聚合的方法
  15. linux进程操作日志文件,我使用过的Linux命令之tailf - 跟踪日志文件/更好的tail -f版本...
  16. ccy_dlx 模块化与全局变量7-8ms
  17. jupyter报错EnvironmentLocationNotFound: Not a conda environment: /root/anaconda3/envs/anaconda3
  18. 依靠双工福禄克测试仪进行MPO电缆认证
  19. PCLVisualizer
  20. saber与matlab,MATLAB与SABER联合仿真(Co-sim)遇到的问题

热门文章

  1. 使用微博提供的API接口发送微博
  2. C语言实现超简单贪吃蛇(代码是抄的),我做一下讲解
  3. 计蒜客-英文金曲大赛
  4. 收敛数列有界的通俗理解
  5. 锁屏界面已由组织隐藏或管理_乐视全系列 官方终结版 完美Root 双排网速 摇晃锁屏 游戏增强 黑域 屏幕助手 高级设置 省电...
  6. 中国大学MOOC创业基础题库及答案
  7. 迅雷赚钱宝变砖TTL修复教程赚钱宝刷机
  8. ac1900 linksys 恢复_把变砖的Linksys-AC1900路由器救活
  9. 大一计算机基础ppt练习题,计算机基础知识PPT练习题及答案DOC
  10. 怎么用计算机编程算术,总算认识怎么用scratch做计算题答题程序