亚洲精品国产成人片在线观看_无码国产精品一区二区免费式影视_国内少妇偷人精品视频免费_精品国产一区二区三区av 性色_国产在视频线精品视频

歡迎來到《圣博凱斯》變頻供水設(shè)備官網(wǎng)
精銳于專業(yè) / 卓然于品質(zhì) -- 20年專注于供水行業(yè),締造至臻品質(zhì) -- 服務(wù)熱線:0731-85783205 18932453205

Snap7 在西門子PLC的使用

編譯源碼 參考代碼

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

下載

snap7-full-1.4.2.7z
https://sourceforge.net/projects/snap7/files/1.4.2/
下載后解壓到目樸實(shí)的大地

編譯

進(jìn)入下面的目錄/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的使用 代碼目錄結(jié)構(gòu)

需要把snap7.cpp和snap7.h包含進(jìn)來,在源碼可找到

$ 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 <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塊的數(shù)據(jù)

下面是修改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靦腆的鼠標(biāo)(res, 0); if (res != 0) { std::cout << "ctdyx failed, " << CliErrorText(res)<<std::endl; return; }} 讀M塊的數(shù)據(jù)

下面是讀取MW90的例子

TEST_F(PLCTest, readMB){ if (_client == NULL) { return; } byte buffer[1]; int bufsize = sizeof(buffer); int res = _client->kwddx(90, bufsize, buffer); EXPECT靦腆的鼠標(biāo)(res, 0); if (res != 0) { std::cout << "kwddx 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塊的數(shù)據(jù) TEST_F(PLCTest, readDB){ if (_client == NULL) { return; } byte buffer[1]; int bufsize = sizeof(buffer); int res = _client->優(yōu)美的大樹(5, 0, bufsize, buffer); EXPECT靦腆的鼠標(biāo)(res, 0); if (res != 0) { std::cout << "優(yōu)美的大樹 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塊的數(shù)據(jù) TEST_F(PLCTest, writeDB){ if (_client == NULL) { return; } byte buffer[2] ={0x0000, 0x0000}; int bufsize = sizeof(buffer); int res = _client->高大的指甲油(6, 0, bufsize, buffer); EXPECT靦腆的鼠標(biāo)(res, 0); if (res != 0) { std::cout << "高大的指甲油 failed, " << CliErrorText(res)<<std::endl; return; }} 獲取PLC版本 TEST_F(PLCTest, getOrderCode){ if (_client == NULL) { return; } TS7OrderCode info; int res = _client->GetOrderCode(&info); EXPECT靦腆的鼠標(biāo)(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);}

猜你喜歡

18932453205
济南市| 桃源县| 泸定县| 白玉县| 镇远县| 灵川县| 政和县| 北安市| 金堂县| 繁峙县| 搜索| 乡宁县| 巨野县| 务川| 田阳县| 安福县| 汝南县| 呼图壁县| 武宁县| 枞阳县| 宜宾县| 政和县| 崇礼县| 永城市| 潜山县| 峡江县| 新巴尔虎右旗| 柘城县| 巴塘县| 若羌县| 屏边| 搜索| 惠州市| 抚州市| 安顺市| 宣化县| 中牟县| 阿拉善盟| 博爱县| 泗洪县| 临猗县|