一. 需求
集成snap7库,对西门子plc进行访问。
二. 步骤
- 下载snap7 库,之后取build/bin/win64 下的 dll 和lib 直接使用。
Snap7 - Browse /1.4.2 at SourceForge.net
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,常用操作