赞
踩
一. 需求
集成snap7库,对西门子plc进行访问。
二. 步骤
2. 把examples/cpp 下的 snap7.h 和cpp 加到工程里。
3. 封装一个单例 来使用 这个库。
- #ifndef PLCMANAGER_H
- #define PLCMANAGER_H
-
- #include <QObject>
- #include <snap7.h>
-
- class PLCManager : public QObject
- {
- Q_OBJECT
- public:
- static PLCManager& getInstance() {
- static PLCManager instance;
- return instance;
- }
- PLCManager(const PLCManager&) = delete;
- PLCManager& operator=(const PLCManager&) = delete;
-
- //连接plc
- int connect(QString ip);
- //设置转台角度
- int setTurntableAngle(float value);
-
- private:
- explicit PLCManager(QObject *parent = nullptr);
- ~PLCManager();
-
- signals:
-
- private:
- std::shared_ptr<TS7Client> client;
- bool bConnected{false};
- };
-
- #endif // PLCMANAGER_H
- #include "plcmanager.h"
-
- PLCManager::PLCManager(QObject *parent)
- : QObject{parent}
- {
- client = std::make_shared<TS7Client>();
- }
-
- PLCManager::~PLCManager()
- {
-
- }
-
- int PLCManager::connect(QString ip)
- {
- int ret = client->ConnectTo(ip.toStdString().data(),0,1);
- if(ret==0){
- bConnected=true;
- }else{
- bConnected=false;
- }
- return ret;
- }
-
- int PLCManager::setTurntableAngle(float value)
- {
- if(!bConnected)
- return -1;
-
- //测试
- byte bufferWrite[1]={1};
-
- client->MBWrite(100,1,&bufferWrite);
- }
4. 使用的时候 直接调用业务函数。
- PLCManager::getInstance().connect("127.0.0.1");
- PLCManager::getInstance().setTurntableAngle(0);
5. 用Hsl工具测试下,这里再M100 位置 写入了一个byte ,值为1。
6,常用操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。