欢迎来到《圣博凯斯》变频供水设备官网
精锐于专业 / 卓然于品质-- 20年专注于供水行业,缔造至臻品质 -- 服务热线:0731-8578320518932453205

Snap7 在西门子PLC的使用

编译源码 参考代码

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 -O3rm -f "filelist.txt"cp -f ../bin/x86_64-linux/libsnap7.so /usr/lib SNAP7的使用 代码目录结构

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

$ lsbuild 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 #include #include "gtest/gtest.h"#include "snap7.h"class PLCTest : public testing::Test{private: void SetUp() override; void TearDown() override; public: std::shared_ptr _client;}; 连接PLC void PLCTest::SetUp(){ _client = std::make_shared(); 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->ctdyx(68, bufsize, buffer); EXPECT腼腆的鼠标(res, 0); if (res != 0) { std::cout << "ctdyx failed, " << CliErrorText(res)<下面是读取MW90的例子

TEST_F(PLCTest, readMB){ if (_client == NULL) { return; } byte buffer[1]; int bufsize = sizeof(buffer); int res = _client->kwddx(90, bufsize, buffer); EXPECT腼腆的鼠标(res, 0); if (res != 0) { std::cout << "kwddx failed, " << CliErrorText(res)<优美的大树(5, 0, bufsize, buffer); EXPECT腼腆的鼠标(res, 0); if (res != 0) { std::cout << "优美的大树 failed, " << CliErrorText(res)<高大的指甲油(6, 0, bufsize, buffer); EXPECT腼腆的鼠标(res, 0); if (res != 0) { std::cout << "高大的指甲油 failed, " << CliErrorText(res)<GetOrderCode(&info); EXPECT腼腆的鼠标(res, 0); if (res != 0) { std::cout << "get order code failed, " << CliErrorText(res)<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);}

猜你喜欢

    18932453205
    Baidu
    map