代码拉取完成,页面将自动刷新
同步操作将从 看江山如画/QtSnap7 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "plc_siemens.h"
PLC_Siemens::PLC_Siemens(QString ipAddress)
{
MyS7Client = new TS7Client();
this->ipAddress = ipAddress;
connect();
}
PLC_Siemens::PLC_Siemens(QString ipAddress, int DB_No, int DB_Length)
{
MyS7Client = new TS7Client();
this->ipAddress = ipAddress;
this->DB_No= DB_No;
this->DB_Length = DB_Length;
connect();
}
bool PLC_Siemens::connect()
{
if ( !MyS7Client->Connected() )
{
return MyS7Client->ConnectTo(ipAddress.toStdString().c_str() ,0,0);
}
else {
return MyS7Client->Connected();
}
}
void PLC_Siemens::ReadCycle()
{
int res;
res = MyS7Client->DBRead(1, 0, 30, &DB_Buffer);
if (res!=0)
{
qDebug()<< "Error read from DB:" << "1 "<<QString::number(res);
}
//qDebug()<< "Read from DB:" << "1 "<<QString::number(res);
}
bool PLC_Siemens::WriteVal(dataType typ, int dbNum, int offset, int val)
{
QMutexLocker locker(&mutex);
if (MyS7Client->Connected())
{
if (typ == eByte )
{
int res = MyS7Client->DBWrite(dbNum, offset,1,&val);
qDebug()<< "Write to DB" << dbNum <<".DBB"<<offset << ", res= " <<QString::number(res);
return res;
}
else
{
return false;
}
}
else
{
//connect();
return false;
}
}
uint PLC_Siemens::getUInt16(int Pos)
{
return getUInt16(DB_Buffer,Pos);
}
uint PLC_Siemens::getUInt16(byte *Buffer, int Pos)
{
return ((Buffer[Pos] << 8) | Buffer[Pos + 1]);
}
int PLC_Siemens::getInt16(byte *Buffer, int Pos)
{
return ((Buffer[Pos] << 8) | Buffer[Pos + 1]);
}
int PLC_Siemens::getUInt32(int Pos)
{
return PLC_Siemens::getUInt32(DB_Buffer, Pos);
}
uint PLC_Siemens::getUInt32(byte* Buffer, int Pos)
{
uint Result;
Result = Buffer[Pos]; Result <<= 8;
Result |= Buffer[Pos + 1]; Result <<= 8;
Result |= Buffer[Pos + 2]; Result <<= 8;
Result |= Buffer[Pos + 3];
return Result;
}
int PLC_Siemens::getInt32(byte *Buffer, int Pos)
{
int Result;
Result = Buffer[Pos]; Result <<= 8;
Result += Buffer[Pos + 1]; Result <<= 8;
Result += Buffer[Pos + 2]; Result <<= 8;
Result += Buffer[Pos + 3];
return Result;
}
double PLC_Siemens::getReal(byte *Buffer, int Pos)
{
uint dw = getUInt32(Buffer,Pos);
return *(pfloat(&dw));
}
void PLC_Siemens::run()
{
while(true)
{
if (MyS7Client->Connected())
{
QMutexLocker locker(&mutex);
ReadCycle();
}
else {
connect();
}
this->sleep(ulong(0.1*10e-6));// 100000us=100ms
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。