添加客户端类等

This commit is contained in:
wangxx1809 2024-04-10 16:15:33 +08:00
parent abb3d9959b
commit 8facf6ed53
31 changed files with 4117 additions and 3998 deletions

View File

@ -1,4 +1,5 @@
#include "DataHandle.h"
#include "../config/ConfigManager.h"
void DataHandle::DataCallBackProc(void* pthis, const ReadData& msg) {
DataHandle* p = (DataHandle*)pthis;
@ -47,7 +48,7 @@ void DataHandle::DataCallBackHandle(const ReadData& msg) {
param.sysParamI->SetValue(atoi(val.c_str()));
break;
case iFLOAT:
param.sysParamB->SetValue(atof(val.c_str()));
param.sysParamF->SetValue(atof(val.c_str()));
break;
default: break;
}
@ -57,6 +58,9 @@ void DataHandle::DataCallBackHandle(const ReadData& msg) {
case VERSIONRSP:
m_version = msg.strValue;
break;
case IOSIGNALRSP: //io信号返回
ConfigManager::Instance()->GetIoCfgWrapper()->Update(msg);
break;
default:break;

View File

@ -41,8 +41,7 @@ public:
}
}
string GetVersion()const {
return m_version;}
string GetVersion()const {return m_version;}
private:
DataHandle();
virtual ~DataHandle();

View File

@ -0,0 +1,92 @@
#pragma once
//#include <iostream>
#include <string>
enum READTYPE {
ProcReadPLC0 = 0, //snap7 数据
ProcReadPLC1,
ProcReadPLC2,
ProcReadPLC3,
ProcReadPLC4,
ProcReadPLC5,
ProcReadPLC6,
ProcReadPLCData0 = 100,
ALARM, //报警
RESPOND, //回应
TIMEDATA, //定时数据
INITERRORINFOSRSP, //返回初始化错误信息
VERSIONRSP, //返回版本信息
IOSIGNALRSP, //io信号返回数据
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT
};
struct ReadData {
READTYPE dataType;
bool result;
std::string nameKey; //参数key 空格隔开
std::string strValue; //value 空格隔开
DATATYPE valueType; //数据类型
};
enum WRITETYPE {
GET = 0,
SET,
LOAD, //载入
LOADOUT, //载出
SUPPLYAXLEAFTER, //供粉轴后移
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONTSTART, //供粉轴后移连续开始
SUPPLYAXLEAFTERCONTSTOP, //供粉轴后移连续停止
SUPPLYAXLEFRONTCONTSTART, //供粉轴前移连续开始
SUPPLYAXLEFRONTCONTSTOP, //供粉轴前移连续停止
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONTSTART, //铺粉臂前移连续
PAVEAXLEFRONTCONTSTOP, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONTSTART, //铺粉臂后移连续开始
PAVEAXLEAFTERCONTSTOP, //铺粉臂后移连续停止
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONTSTART, //成型缸连续上升开始
PRINTAXLEUPCONTSTOP, //成型缸连续上升停止
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONTSTART, //成型缸连续下降开始
PRINTAXLEDOWNCONTSTOP, //成型缸连续下降停止
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移载轴左移
TRANSFERAXIELEFTCONTSTART, //移载轴连续左移开始
TRANSFERAXIELEFTCONTSTOP, //移载轴连续左移停止
TRANSFERAXIERIGHT, //移载轴右移
TRANSFERAXIERIGHTCONTSTART, //移载轴连续右移开始
TRANSFERAXIERIGHTCONTSTOP, //移载轴连续右移停止
TRANSFERAXIECLEAR, //移载轴清零
SCANERSTART, //开始扫描
SCANERSTOP, //停止扫描
STARTHEATINGSCANNERTEST, //开始振镜预热测试
STOPHEATINGSCANNERTEST, //停止振镜预热
INITERRORINFOSREQ, //初始化错误信息
VERSIONREQ, //获取版本信息
IOSIGNAL, //io 信号
};
struct WriteData {
WRITETYPE dataType;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType;
};

View File

@ -5,6 +5,7 @@
#include <thread>
#include <grpcpp/grpcpp.h>
#include "../protobuf/stream.grpc.pb.h"
#include "RWData.h"
using grpc::Channel;
using grpc::ClientContext;
@ -13,93 +14,6 @@ using stream::Stream;
using stream::RequestInfo;
using stream::ResponseInfo;
enum READTYPE {
ProcReadPLC0 = 0, //snap7 数据
ProcReadPLC1,
ProcReadPLC2,
ProcReadPLC3,
ProcReadPLC4,
ProcReadPLC5,
ProcReadPLC6,
ProcReadPLCData0 = 100,
ALARM, //报警
RESPOND, //回应
TIMEDATA, //定时数据
INITERRORINFOSRSP, //返回初始化错误信息
VERSIONRSP, //返回版本信息
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT
};
struct ReadData {
READTYPE dataType;
bool result;
std::string nameKey; //参数key 空格隔开
std::string strValue; //value 空格隔开
DATATYPE valueType; //数据类型
};
enum WRITETYPE {
GET = 0,
SET,
LOAD, //载入
LOADOUT, //载出
SUPPLYAXLEAFTER, //供粉轴后移
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONTSTART, //供粉轴后移连续开始
SUPPLYAXLEAFTERCONTSTOP, //供粉轴后移连续停止
SUPPLYAXLEFRONTCONTSTART, //供粉轴前移连续开始
SUPPLYAXLEFRONTCONTSTOP, //供粉轴前移连续停止
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONTSTART, //铺粉臂前移连续
PAVEAXLEFRONTCONTSTOP, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONTSTART, //铺粉臂后移连续开始
PAVEAXLEAFTERCONTSTOP, //铺粉臂后移连续停止
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONTSTART, //成型缸连续上升开始
PRINTAXLEUPCONTSTOP, //成型缸连续上升停止
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONTSTART, //成型缸连续下降开始
PRINTAXLEDOWNCONTSTOP, //成型缸连续下降停止
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移载轴左移
TRANSFERAXIELEFTCONTSTART, //移载轴连续左移开始
TRANSFERAXIELEFTCONTSTOP, //移载轴连续左移停止
TRANSFERAXIERIGHT, //移载轴右移
TRANSFERAXIERIGHTCONTSTART, //移载轴连续右移开始
TRANSFERAXIERIGHTCONTSTOP, //移载轴连续右移停止
TRANSFERAXIECLEAR, //移载轴清零
SCANERSTART, //开始扫描
SCANERSTOP, //停止扫描
STARTHEATINGSCANNERTEST, //开始振镜预热测试
STOPHEATINGSCANNERTEST, //停止振镜预热
INITERRORINFOSREQ, //初始化错误信息
VERSIONREQ, //获取版本信息
IOSIGNAL, //io 信号
};
struct WriteData {
WRITETYPE dataType;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType;
};
class StreamClient {
typedef void (*DataCallBack)(void* pthis, const ReadData& msg);

View File

@ -232,6 +232,7 @@
<ClInclude Include="config\bean\SystemBase.h" />
<ClInclude Include="config\ConfigManager.h" />
<ClInclude Include="DataManage\DataHandle.h" />
<ClInclude Include="DataManage\RWData.h" />
<ClInclude Include="DataManage\StreamClient.h" />
<ClInclude Include="external\i18n\Entry.h" />
<ClInclude Include="external\i18n\I18nDefine.h" />

View File

@ -612,6 +612,9 @@
<ClInclude Include="config\bean\BaseConfig.h">
<Filter>config\bean</Filter>
</ClInclude>
<ClInclude Include="DataManage\RWData.h">
<Filter>DataManage</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="protobuf\stream.proto">

View File

@ -22,8 +22,8 @@ public:
private:
ConfigManager();
virtual ~ConfigManager();
ConfigManager(const ConfigManager& cfg) {};
ConfigManager& operator= (const ConfigManager& cfg) {};
ConfigManager(const ConfigManager& cfg) = delete;
ConfigManager& operator= (const ConfigManager& cfg) = delete;
private:
Machine* m_Machine;

View File

@ -17,6 +17,7 @@
#include "../../DataManage/DataHandle.h"
#include "../ConfigManager.h"
IOCfg::IOCfg()
{

View File

@ -8,6 +8,8 @@
#include "RunCfg.h"
#include <condition_variable>
#include <shared_mutex>
#include "../DataManage/RWData.h"
#include <sstream>
using namespace std;
@ -1760,6 +1762,24 @@ public:
Unlock();
}
void Update(const ReadData& rd) {
Lock();
std::istringstream issKey(rd.nameKey), issVal(rd.strValue);
string keyStr, valStr;
while (issKey >> keyStr && issVal >> valStr) {
size_t pos = valStr.find("_");
if (m_IOCfgMap.find(keyStr) != m_IOCfgMap.end() && pos != string::npos) {
DATATYPE valType = (DATATYPE)atoi(valStr.substr(pos + 1).c_str()); //值类型
if (valType != iBOOL) continue;
string val = valStr.substr(0, pos); //值
m_IOCfgMap[keyStr]->m_IsActive = atoi(val.c_str());
}
}
Unlock();
}
bool IsSafeDoorClose() {
bool rel = false;
Lock();

View File

@ -9,11 +9,7 @@
#include "SystemInfo.h"
#include "Logger.h"
#include "Toast.h"
#include <iostream>
#include <map>
#include "PLC/SysParam.h"
#include "Machine/Machine.h"
#include "Machine/HBD1000.h"
#include "LanguageManager.h"
#include "ChartletManager.h"
@ -31,17 +27,16 @@ SystemInfo* g_SystemInfo;
class HBDSystem {
public:
HBDSystem():m_win(nullptr)
{}
HBDSystem():m_win(nullptr), m_controller(nullptr){}
~HBDSystem()
{
~HBDSystem(){
//ConfigManager::GetInstance()->SaveConfig();
DELP(g_log);
DELP(g_Toast);
DELP(g_SystemInfo);
DELP(g_LngManager);
DELP(m_controller);
DELP(m_win);
}
bool init(){

View File

@ -1,19 +1,19 @@
#include "Controler.h"
#include "Controller.h"
Controler::Controler()
Controller::Controller()
: m_Machine(nullptr)
, m_CoreCommunication(nullptr)
, m_Axis(nullptr)
, m_StateCtrlWrapper(nullptr)
, m_SysParamWrapper(nullptr)
, m_AxisRecordWrapper(nullptr)
, m_SignalStateWrapper(nullptr) {
, m_SignalStateWrapper(nullptr){
}
Controler::~Controler() {
Controller::~Controller() {
DELP(m_CoreCommunication);
DELP(m_Axis);
DELP(m_StateCtrlWrapper);
@ -22,11 +22,9 @@ Controler::~Controler() {
DELP(m_SignalStateWrapper);
DELP(m_ComServer);
}
void Controler::Init(){
void Controller::Init(){
m_CoreCommunication = new CoreCommunication();
m_CoreCommunication->SetIOCfgWrapper(ConfigManager::GetInstance()->GetIoCfgWrapper());
m_CoreCommunication->SetSysParamWrapper(m_SysParamWrapper);
@ -67,4 +65,6 @@ void Controler::Init(){
//m_ScannerCtrl->SetRemoteClient(m_RemoteClient);
//m_ScannerCtrl->SetMachineCtrl(m_MachineCtrl);
}

View File

@ -7,10 +7,10 @@
#include "../Communication/ComServer.h"
#include "../remote/RemoteClient.h"
class Controler {
class Controller {
public:
Controler();
~Controler();
Controller();
~Controller();
void Init();

View File

@ -0,0 +1,50 @@
#include "ClientInfo.h"
//添加客户端
void ClientWrapper::AddClient(ClientInfo* clientInfo) {
bool isExist = false;
std::lock_guard<std::mutex> lck(m_mux);
for (auto client = m_clientList.begin(); client != m_clientList.end(); ++client) {
if (clientInfo == *client) {
isExist = true; break;
}
}
if (!isExist) m_clientList.emplace_back(clientInfo);
}
//下线检测
void ClientWrapper::OfflineCheck() {
std::lock_guard<std::mutex> lck(m_mux);
auto client = m_clientList.begin();
while (client != m_clientList.end()) {
if (!(*client)->IsConnect()) {
printf("%s 下线了...\n", (*client)->m_clientAddr.c_str());
delete (*client);
client = m_clientList.erase(client);
}
else {
++client;
}
}
}
void ClientWrapper::Clear() {
std::lock_guard<std::mutex> lck(m_mux);
auto client = m_clientList.begin();
while (client != m_clientList.end()) {
if (*client) delete (*client);
++client;
}
m_clientList.clear();
}
void ClientWrapper::PushAllClient(WriteData* wd) {
std::lock_guard<std::mutex> lck(m_mux);
auto client = m_clientList.begin();
while (client != m_clientList.end()) {
(*client)->PushMsg(wd);
++client;
}
}

View File

@ -3,101 +3,13 @@
#include <string>
#include <thread>
#include <list>
#include "RWData.h"
#include "../protobuf/stream.grpc.pb.h"
using grpc::ServerContext;
enum READTYPE {
GET = 0,
SET,
LOAD, //载入
LOADOUT, //载出
SUPPLYAXLEAFTER, //供粉轴后移
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONTSTART, //供粉轴后移连续开始
SUPPLYAXLEAFTERCONTSTOP, //供粉轴后移连续停止
SUPPLYAXLEFRONTCONTSTART, //供粉轴前移连续开始
SUPPLYAXLEFRONTCONTSTOP, //供粉轴前移连续停止
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONTSTART, //铺粉臂前移连续
PAVEAXLEFRONTCONTSTOP, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONTSTART, //铺粉臂后移连续开始
PAVEAXLEAFTERCONTSTOP, //铺粉臂后移连续停止
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONTSTART, //成型缸连续上升开始
PRINTAXLEUPCONTSTOP, //成型缸连续上升停止
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONTSTART, //成型缸连续下降开始
PRINTAXLEDOWNCONTSTOP, //成型缸连续下降停止
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移载轴左移
TRANSFERAXIELEFTCONTSTART, //移载轴连续左移开始
TRANSFERAXIELEFTCONTSTOP, //移载轴连续左移停止
TRANSFERAXIERIGHT, //移载轴右移
TRANSFERAXIERIGHTCONTSTART, //移载轴连续右移开始
TRANSFERAXIERIGHTCONTSTOP, //移载轴连续右移停止
TRANSFERAXIECLEAR, //移载轴清零
SCANERSTART, //开始扫描
SCANERSTOP, //停止扫描
STARTHEATINGSCANNERTEST, //开始振镜预热测试
STOPHEATINGSCANNERTEST, //停止振镜预热
INITERRORINFOSREQ, //初始化错误信息
VERSIONREQ, //获取版本信息
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT,
iSTRING,
iWORD,
};
class ClientInfo;
struct ReadData {
READTYPE dataType;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType;
ClientInfo* clientPtr;
};
enum WRITETYPE {
ProcReadPLC0=0, //snap7 数据
ProcReadPLC1,
ProcReadPLC2,
ProcReadPLC3,
ProcReadPLC4,
ProcReadPLC5,
ProcReadPLC6,
ProcReadPLCData0 = 100,
ALARM , //报警
RESPOND, //回应
TIMEDATA, //定时数据
INITERRORINFOSRSP, //返回初始化错误信息
VERSIONRSP, //返回版本信息
};
struct WriteData {
WRITETYPE dataType;
bool result;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType; //数据类型
};
class ClientInfo {
public:
ClientInfo()
@ -132,7 +44,7 @@ public:
}
}
void SetPushMsg(WriteData* msg) {
void PushMsg(WriteData* msg) {
std::lock_guard<std::mutex> lock(m_msgLock);
m_msgList.push_back(msg);
}
@ -143,8 +55,33 @@ public:
bool m_writeQuitFlag; //写线程退出标致
ServerContext* m_context; //上下文
private:
std::list<WriteData*> m_msgList; //信息缓存区
std::mutex m_msgLock; //信息锁
};
class ClientWrapper {
public:
static ClientWrapper* Instance() {
static ClientWrapper* clientWrapper = new ClientWrapper();
return clientWrapper;
}
void AddClient(ClientInfo* clientInfo); //添加客户端
void OfflineCheck(); //下线检测
void Clear(); //清空客户端
void PushAllClient(WriteData* wd);
private:
ClientWrapper() {}
~ClientWrapper() {}
ClientWrapper(const ClientWrapper& clientWrapper) = delete;
ClientWrapper& operator= (const ClientWrapper& clientWrapper) = delete;
private:
std::mutex m_mux;
std::list<ClientInfo*> m_clientList;
};

View File

@ -12,7 +12,7 @@ DataHandle::DataHandle()
: m_dataCallBack(nullptr)
, m_streamServer(nullptr)
, m_config(nullptr)
, m_controler(nullptr)
, m_controller(nullptr)
, m_testFlag(false){
}
@ -24,7 +24,7 @@ DataHandle::~DataHandle() {
if (m_testTd.joinable()) m_testTd.join();
DELP(m_streamServer);
DELP(m_controler);
DELP(m_controller);
}
@ -38,8 +38,6 @@ void DataHandle::Init() {
m_config->Init();
//WriteData();
m_streamServer = new StreamServer(m_config->GetMachine());
//测试线程
@ -53,7 +51,7 @@ void DataHandle::Init() {
wd->result = true;
wd->valueType = iFLOAT;
if (m_streamServer && m_streamServer->GetClient())
m_streamServer->GetClient()->SetPushMsg(wd);
m_streamServer->GetClient()->PushMsg(wd);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
@ -62,8 +60,8 @@ void DataHandle::Init() {
m_streamServer->SetCallBackFunc(this, &DataHandle::DataCallBackProc);
m_streamServer->Init();
m_controler = new Controler();
m_controler->Init();
m_controller = new Controller();
m_controller->Init();
}
@ -89,135 +87,135 @@ void DataHandle::DataCallBackHandle(const ReadData& msg) {
break;
case SET: break;
case LOAD:
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadIn();
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadIn();
break; //载入
case LOADOUT:
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadOut();
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadOut();
break; //载出
case SUPPLYAXLEAFTER: //供粉轴后移
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK);
break;
case SUPPLYAXLEFRONT: //供粉轴前移
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT);
break;
case SUPPLYAXLEAFTERCONTSTART: //供粉轴后移连续
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK,true,true);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK,true,true);
break;
case SUPPLYAXLEAFTERCONTSTOP:
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK, true, false);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::BACK, true, false);
break; //供粉轴后移连续
case SUPPLYAXLEFRONTCONTSTART: //供粉轴前移连续开始
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, true);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, true);
break;
case SUPPLYAXLEFRONTCONTSTOP: //供粉轴前移连续结束
m_controler->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, false);
m_controller->m_Machine->SupplyAxisMove(AxisConfig::ActiveDirect::FRONT, true, false);
break;
case PAVEAXLEFRONT: //铺粉臂前移
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT);
break;
case PAVEAXLEFRONTCONTSTART: //铺粉臂前移连续
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,true);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,true);
break;
case PAVEAXLEFRONTCONTSTOP: //铺粉臂前移连续
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,false);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::FRONT,true,false);
break;
case PAVEAXLEAFTER: //铺粉臂后移
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK);
break;
case PAVEAXLEAFTERCONTSTART: //铺粉臂后移连续开始
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, true);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, true);
break;
case PAVEAXLEAFTERCONTSTOP: //铺粉臂后移连续停止
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, false);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::BACK, true, false);
break;
case PAVEAXLECLEAR:
m_controler->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::ZERO);
m_controller->m_Machine->ArmAxisMove(AxisConfig::ActiveDirect::ZERO);
break; //铺粉臂清零
case PRINTAXLEUP:
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP);
break; //成型缸上升
case PRINTAXLEUPCONTSTART: //成型缸连续上升开始
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, true);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, true);
break;
case PRINTAXLEUPCONTSTOP: //成型缸连续上升停止
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, false);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::UP, true, false);
break;
case PRINTAXLEDOWN:
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN);
break; //成型缸下降
case PRINTAXLEDOWNCONTSTART:
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN, true, true);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN, true, true);
break; //成型缸连续下降开始
case PRINTAXLEDOWNCONTSTOP: //成型缸连续下降停止
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN,true,false);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::DOWN,true,false);
break;
case PRINTAXLECLEAR: //成型缸清零
m_controler->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::ZERO);
m_controller->m_Machine->PrintAxisMove(AxisConfig::ActiveDirect::ZERO);
break;
case TRANSFERAXIELEFT: //移栽轴左移
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT);
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT);
break;
case TRANSFERAXIELEFTCONTSTART: //移栽轴连续左移开始
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true,true);
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true,true);
break;
case TRANSFERAXIELEFTCONTSTOP: //移栽轴连续左移停止
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true, false);
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::LEFT, true, false);
break;
case TRANSFERAXIERIGHT: //移栽轴右移
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT);
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT);
break;
case TRANSFERAXIERIGHTCONTSTART: //移栽轴连续右移
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT,true,true);
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT,true,true);
break;
case TRANSFERAXIERIGHTCONTSTOP: //移栽轴连续右移
if (!m_controler->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT, true, false);
if (!m_controller->m_ScannerCtrl->IsStandBy() && g_Admin == USER)return;
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::RIGHT, true, false);
break;
case TRANSFERAXIECLEAR: //移栽轴清零
m_controler->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::ZERO);
m_controller->m_Machine->LoadAxisMove(AxisConfig::ActiveDirect::ZERO);
break;
case SCANERSTART: //开始扫描
scanners = m_controler->m_ScannerCtrl->GetScanners();
scanners = m_controller->m_ScannerCtrl->GetScanners();
index = atoi(msg.strValue.c_str());
if (index >= (*scanners).size()) return;
if ((*scanners)[index]) (*scanners)[index]->StartDebugTest();
break;
case SCANERSTOP: //停止扫描
scanners = m_controler->m_ScannerCtrl->GetScanners();
scanners = m_controller->m_ScannerCtrl->GetScanners();
index = atoi(msg.strValue.c_str());
if (index >= (*scanners).size()) return;
if ((*scanners)[index]) (*scanners)[index]->StopDebugTest();
break;
case STARTHEATINGSCANNERTEST: //开始振镜预热测试
scanners = m_controler->m_ScannerCtrl->GetScanners();
scanners = m_controller->m_ScannerCtrl->GetScanners();
index = atoi(msg.strValue.c_str());
if (index >= (*scanners).size()) return;
if((*scanners)[index]) (*scanners)[index]->StartHeatingScannerTest();
break;
case STOPHEATINGSCANNERTEST: //停止振镜预热
scanners = m_controler->m_ScannerCtrl->GetScanners();
scanners = m_controller->m_ScannerCtrl->GetScanners();
index = atoi(msg.strValue.c_str());
if (index >= (*scanners).size()) return;
if ((*scanners)[index]) (*scanners)[index]->StopHeatingScannerTest();
break;
case INITERRORINFOSREQ: //初始化错误信息
wd = new WriteData();
wd->strValue = m_controler->m_ScannerCtrl->GetInitErrorInfos();
wd->strValue = m_controller->m_ScannerCtrl->GetInitErrorInfos();
wd->dataType = INITERRORINFOSRSP;
wd->valueType = iSTRING;
msg.clientPtr->SetPushMsg(wd);
msg.clientPtr->PushMsg(wd);
break;
case VERSIONREQ: //获取版本信息
wd = new WriteData();
wd->strValue = g_SystemInfo->m_ProductVersion;
wd->dataType = VERSIONRSP;
wd->valueType = iSTRING;
msg.clientPtr->SetPushMsg(wd);
msg.clientPtr->PushMsg(wd);
break;
default: break;

View File

@ -2,7 +2,7 @@
#include <string>
#include "StreamServer.h"
#include "../Config/ConfigManager.h"
#include "../Controler/Controler.h"
#include "../Controller/Controller.h"
class DataHandle{
typedef void (*DataCallBack)(void* pthis, const ReadData& msg);
@ -21,7 +21,7 @@ private:
std::thread m_testTd;
ConfigManager* m_config;
Controler* m_controler;
Controller* m_controller;
bool m_testFlag; //测试线程
void DataCallBackHandle(const ReadData& msg);

View File

@ -0,0 +1,94 @@
#pragma once
#include <string>
enum READTYPE {
GET = 0,
SET,
LOAD, //载入
LOADOUT, //载出
SUPPLYAXLEAFTER, //供粉轴后移
SUPPLYAXLEFRONT, //供粉轴前移
SUPPLYAXLEAFTERCONTSTART, //供粉轴后移连续开始
SUPPLYAXLEAFTERCONTSTOP, //供粉轴后移连续停止
SUPPLYAXLEFRONTCONTSTART, //供粉轴前移连续开始
SUPPLYAXLEFRONTCONTSTOP, //供粉轴前移连续停止
PAVEAXLEFRONT, // 铺粉臂前移
PAVEAXLEFRONTCONTSTART, //铺粉臂前移连续
PAVEAXLEFRONTCONTSTOP, //铺粉臂前移连续
PAVEAXLEAFTER, //铺粉臂后移
PAVEAXLEAFTERCONTSTART, //铺粉臂后移连续开始
PAVEAXLEAFTERCONTSTOP, //铺粉臂后移连续停止
PAVEAXLECLEAR, //铺粉臂清零
PRINTAXLEUP, //成型缸上升
PRINTAXLEUPCONTSTART, //成型缸连续上升开始
PRINTAXLEUPCONTSTOP, //成型缸连续上升停止
PRINTAXLEDOWN, //成型缸下降
PRINTAXLEDOWNCONTSTART, //成型缸连续下降开始
PRINTAXLEDOWNCONTSTOP, //成型缸连续下降停止
PRINTAXLECLEAR, //成型缸清零
TRANSFERAXIELEFT, //移载轴左移
TRANSFERAXIELEFTCONTSTART, //移载轴连续左移开始
TRANSFERAXIELEFTCONTSTOP, //移载轴连续左移停止
TRANSFERAXIERIGHT, //移载轴右移
TRANSFERAXIERIGHTCONTSTART, //移载轴连续右移开始
TRANSFERAXIERIGHTCONTSTOP, //移载轴连续右移停止
TRANSFERAXIECLEAR, //移载轴清零
SCANERSTART, //开始扫描
SCANERSTOP, //停止扫描
STARTHEATINGSCANNERTEST, //开始振镜预热测试
STOPHEATINGSCANNERTEST, //停止振镜预热
INITERRORINFOSREQ, //初始化错误信息
VERSIONREQ, //获取版本信息
};
enum DATATYPE {
iBOOL = 0,
iSHORT,
iUSHORT,
iINT,
iUINT,
iFLOAT,
iSTRING,
iWORD,
};
class ClientInfo;
struct ReadData {
READTYPE dataType;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType;
ClientInfo* clientPtr;
};
enum WRITETYPE {
ProcReadPLC0 = 0, //snap7 数据
ProcReadPLC1,
ProcReadPLC2,
ProcReadPLC3,
ProcReadPLC4,
ProcReadPLC5,
ProcReadPLC6,
ProcReadPLCData0 = 100,
ALARM, //报警
RESPOND, //回应
TIMEDATA, //定时数据
INITERRORINFOSRSP, //返回初始化错误信息
VERSIONRSP, //返回版本信息
SYSPARAMDATA, //
};
struct WriteData {
WRITETYPE dataType;
bool result;
std::string nameKey; //参数key
std::string strValue; //value
DATATYPE valueType; //数据类型
WriteData() {}
WriteData(WRITETYPE dt, const std::string& keyStr, const std::string& valStr)
: dataType(dt), nameKey(keyStr),strValue(valStr){}
};

View File

@ -6,7 +6,6 @@ StreamServer::StreamServer(Machine* p)
, m_dataCallBack(nullptr)
, m_machine(p)
, m_handlePtr(nullptr){
}
@ -27,11 +26,8 @@ Status StreamServer::AllStream(ServerContext* context, grpc::ServerReaderWriter<
cinfo->m_clientAddr = context->peer();
cinfo->m_context = context;
{
std::lock_guard<std::mutex> lck(m_clientMutex);
m_clientList.emplace_back(cinfo);
m_machine->UpdateClients(m_clientList);
}
ClientWrapper::Instance()->AddClient(cinfo);
std::thread read([this, &stream, cinfo] {
RequestInfo request;
@ -89,21 +85,7 @@ void StreamServer::Run() {
if (!m_checkCloseTd.joinable()) {
m_checkCloseTd = std::thread([this] {
while (!m_checkQuitFlag) {
{
std::lock_guard<std::mutex> lck(m_clientMutex);
bool ischange = false;
for (auto client = m_clientList.begin(); client != m_clientList.end();) {
if (!(*client)->IsConnect()) {
printf("%s 下线了...\n", (*client)->m_clientAddr.c_str());
delete (*client);
client = m_clientList.erase(client);
ischange = true;
}
else
++client;
}
if (ischange) m_machine->UpdateClients(m_clientList);
}
ClientWrapper::Instance()->OfflineCheck();
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
});

View File

@ -75,10 +75,7 @@ void HBDSystem::GetVersion()
lpTranslate[i].wCodePage);
void* lpBuffer = NULL;
unsigned int dwBytes = 0;
VerQueryValue(InfoBuf,
SubBlock,
&lpBuffer,
&dwBytes);
VerQueryValue(InfoBuf,SubBlock,&lpBuffer,&dwBytes);
string strTemp = (char*)lpBuffer;
strVersion += strTemp;

View File

@ -13073,18 +13073,7 @@ void HBD1000::ProcReadPLCData(void* pobject, Command* pcommand)
CoreCommunication* cc = (CoreCommunication*)machine->m_PLC;
TS7DataItem pSysData = pdataItems[0];
// for (int i = 0; i < itemcount; ++i) {
// WriteData* data = new WriteData();
// data->dataType = WRITETYPE(i + 100);
// data->strValue = (char*)pdataItems[i].pdata;
// data->result = true;
// for (auto& client : machine->m_clientUser) {
// client->SetPushMsg(data);
// }
//
// }
//
//}
std::unique_lock<std::shared_mutex> lock(cc->m_ValueMtx);
if (pSysData.Result == 0) {
unsigned char* arr = (unsigned char*)pSysData.pdata;

File diff suppressed because it is too large Load Diff

View File

@ -84,13 +84,13 @@ public:
void InitSysParam(SysParamWrapper* spw, PLCReveiver* cc);
void InitPLCCommand(vector<S7Command*>& vecs);
//void GetAlarmState(SignalState& signalState);
//bool CheckPrintMoldReady();
bool CheckPrintMoldReady();
private:
static void CheckIO_V0(vector<string>& ins, IOCfgWrapper* iocfgWrapper, string str, int type);
static void ProcReadPLC(void* pobject, Command* pcommand);
static void ProcReadPLCData(void* pobject, Command* pcommand);
void LoadInRun() {}
void LoadOutRun() {}
void LoadInRun();
void LoadOutRun();
bool IsLoadAxisCanMoveLeft();
string GetLoadAxisCanotMoveLeftInfo();
bool IsLoadAxisCanMoveRight();

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -128,10 +128,6 @@ public:
return true;
}
void UpdateClients(const list<ClientInfo*>& clientList) {
m_clientUser = clientList;
}
virtual void LoadAxisMove(AxisConfig::ActiveDirect adr, bool isContinue = false, bool isStart = false); //移栽轴运动
virtual void SupplyAxisMove(AxisConfig::ActiveDirect adr, bool isContinue = false, bool isStart = false); //供粉轴运动
virtual void PrintAxisMove(AxisConfig::ActiveDirect adr, bool isContinue = false, bool isStart = false); //成型缸运动
@ -256,8 +252,6 @@ protected:
vector<string> m_AxisTabs;
list<ClientInfo*> m_clientUser; //连接客户端
std::map<std::string, DValue > m_plcMp;
};

View File

@ -7,9 +7,10 @@
#include <map>
CoreCommunication::CoreCommunication()
:m_Config(NULL)
: m_Config(NULL)
, m_ReadThread(INVALID_HANDLE_VALUE)
,m_WriteThread(INVALID_HANDLE_VALUE)
, m_WriteThread(INVALID_HANDLE_VALUE)
, m_sendTdExitFlag(false)
{
m_IsSmart = true;
m_Invoker = new PLCInvoker();
@ -23,6 +24,9 @@ CoreCommunication::~CoreCommunication()
if (m_S7Client->Connected)m_S7Client->Disconnect();
delete m_S7Client;
}
m_sendTdExitFlag = true;
if (m_sendTd.joinable()) m_sendTd.join();
}
void CoreCommunication::Startup()
@ -32,6 +36,8 @@ void CoreCommunication::Startup()
m_AssistRunFlag = true;
m_ReadThread = AtlCreateThread(ReadProc, this);
m_AssistThread = AtlCreateThread(AssistProc, this);
m_sendTd = std::thread([this] {SendProc(); });
}
void CoreCommunication::Shutdown()
@ -340,58 +346,58 @@ void CoreCommunication::AssistRun()
}
}
//void CoreCommunication::GetAlarmState(SignalState& signalState)
//{
// std::shared_lock<std::shared_mutex> lock(m_ValueMtx);
// ConfigManager::GetInstance()->GetMachine()->GetAlarmState(signalState);
//}
void CoreCommunication::GetAlarmState(SignalState& signalState)
{
std::shared_lock<std::shared_mutex> lock(m_ValueMtx);
//ConfigManager::GetInstance()->GetMachine()->GetAlarmState(signalState);
}
//void CoreCommunication::GetEnvState(EnvState& envState)
//{
// std::shared_lock<std::shared_mutex> lock(m_ValueMtx);
// //ConfigManager::GetInstance()->GetMachine()->GetAlarmState(envState);
//
// envState.m_PrintOxygen1Analog=m_SysParamWrapper->m_PrintOxygen1->GetValue();
// envState.m_PrintOxygen2Analog =m_SysParamWrapper->m_PrintOxygen2->GetValue();
// envState.m_OutsideOxygenAnalog =m_SysParamWrapper->m_OutsideOxygen->GetValue();
//
// envState.m_HighPressureAnalog =m_SysParamWrapper->m_HighPressure->GetValue();
// envState.m_ProtectGasPressureAnalog =m_SysParamWrapper->m_ProtectGasPressure->GetValue();
// envState.m_PrintPressureAnalog =m_SysParamWrapper->m_PrintPressure->GetValue();
// envState.m_MoldMainCurrentPos=m_SysParamWrapper->m_MoldMainCurrentPos->GetValue(); //打印主轴当前位置_R
// envState.m_MoldMainCurrentLoad=m_SysParamWrapper->m_MoldMainCurrentLoad->GetValue(); //打印主轴当前扭矩_R
// envState.m_MoldSlaveCurrentPos=m_SysParamWrapper->m_MoldSlaveCurrentPos->GetValue(); //打印从轴当前位置_R
// envState.m_MoldSlaveCurrentLoad=m_SysParamWrapper->m_MoldSlaveCurrentLoad->GetValue(); //打印从轴当前扭矩_R
// envState.m_CleanMainCurrentPos=m_SysParamWrapper->m_CleanMainCurrentPos->GetValue(); //清粉主轴当前位置_R
// envState.m_CleanMainCurrentLoad=m_SysParamWrapper->m_CleanMainCurrentLoad->GetValue(); //清粉主轴当前扭矩_R
// envState.m_CleanSlaveCurrentPos=m_SysParamWrapper->m_CleanSlaveCurrentPos->GetValue(); //清粉从轴当前位置_R
// envState.m_CleanSlaveCurrentLoad=m_SysParamWrapper->m_CleanSlaveCurrentLoad->GetValue(); //清粉从轴当前扭矩_R
// envState.m_LoadAxisCurrentPos=m_SysParamWrapper->m_LoadAxisCurrentPos->GetValue(); //移载轴当前位置_R
// envState.m_LoadAxisCurrentLoad=m_SysParamWrapper->m_LoadAxisCurrentLoad->GetValue(); //移载轴当前扭矩_R
// envState.m_ArmCurrentPos=m_SysParamWrapper->m_ArmCurrentPos->GetValue(); //铺粉轴当前位置_R
// envState.m_ArmCurrentLoad=m_SysParamWrapper->m_ArmCurrentLoad->GetValue(); //铺粉轴当前扭矩_R
// envState.m_SupplyCurrentPos=m_SysParamWrapper->m_SupplyCurrentPos->GetValue(); //供粉转轴当前位置_R
// envState.m_SupplyCurrentLoad=m_SysParamWrapper->m_SupplyCurrentLoad->GetValue(); //供粉转轴当前扭矩_R
//
// envState.m_IsPrintCabinDoorClose = m_IOCfgWrapper->IsSafeDoorClose();
//
// envState.m_PowderJarCabinPressureVoltage=m_SysParamWrapper->m_PowderJarCabinPressureVoltage->GetValue();
// envState.m_PowderJarCabinPressure=m_SysParamWrapper->m_PowderJarCabinPressureValue->GetValue();
// envState.m_PowderLevelLength = m_SysParamWrapper->m_PowderLevelLength->GetValue();
// envState.m_PowderLevelValue = m_SysParamWrapper->m_PowderLevelValue->GetValue();
//
// envState.m_LinearLayerPos = m_SysParamWrapper->m_LinearEncoderPerLayerRealValue->GetValue();
// envState.m_MoldTheoryDistance = m_SysParamWrapper->m_MoldTheoryDistance->GetValue();
// envState.m_LinearActDistance = m_SysParamWrapper->m_LinearActDistance->GetValue();
// envState.m_LinearActPulse = m_SysParamWrapper->m_LinearActPulse->GetValue();
// envState.m_LineEncPulseEqu = m_SysParamWrapper->m_LineEncPulseEqu->GetValue();
//
// envState.m_PrintCar1RealWeight = m_SysParamWrapper->m_PrintCar1RealWeight->GetValue();
// envState.m_PrintCar2RealWeight = m_SysParamWrapper->m_PrintCar2RealWeight->GetValue();
// envState.m_CleanCar1RealWeight = m_SysParamWrapper->m_CleanCar1RealWeight->GetValue();
// envState.m_CleanCar2RealWeight = m_SysParamWrapper->m_CleanCar2RealWeight->GetValue();
//
//}
void CoreCommunication::GetEnvState(EnvState& envState)
{
std::shared_lock<std::shared_mutex> lock(m_ValueMtx);
//ConfigManager::GetInstance()->GetMachine()->GetAlarmState(envState);
envState.m_PrintOxygen1Analog=m_SysParamWrapper->m_PrintOxygen1->GetValue();
envState.m_PrintOxygen2Analog =m_SysParamWrapper->m_PrintOxygen2->GetValue();
envState.m_OutsideOxygenAnalog =m_SysParamWrapper->m_OutsideOxygen->GetValue();
envState.m_HighPressureAnalog =m_SysParamWrapper->m_HighPressure->GetValue();
envState.m_ProtectGasPressureAnalog =m_SysParamWrapper->m_ProtectGasPressure->GetValue();
envState.m_PrintPressureAnalog =m_SysParamWrapper->m_PrintPressure->GetValue();
envState.m_MoldMainCurrentPos=m_SysParamWrapper->m_MoldMainCurrentPos->GetValue(); //打印主轴当前位置_R
envState.m_MoldMainCurrentLoad=m_SysParamWrapper->m_MoldMainCurrentLoad->GetValue(); //打印主轴当前扭矩_R
envState.m_MoldSlaveCurrentPos=m_SysParamWrapper->m_MoldSlaveCurrentPos->GetValue(); //打印从轴当前位置_R
envState.m_MoldSlaveCurrentLoad=m_SysParamWrapper->m_MoldSlaveCurrentLoad->GetValue(); //打印从轴当前扭矩_R
envState.m_CleanMainCurrentPos=m_SysParamWrapper->m_CleanMainCurrentPos->GetValue(); //清粉主轴当前位置_R
envState.m_CleanMainCurrentLoad=m_SysParamWrapper->m_CleanMainCurrentLoad->GetValue(); //清粉主轴当前扭矩_R
envState.m_CleanSlaveCurrentPos=m_SysParamWrapper->m_CleanSlaveCurrentPos->GetValue(); //清粉从轴当前位置_R
envState.m_CleanSlaveCurrentLoad=m_SysParamWrapper->m_CleanSlaveCurrentLoad->GetValue(); //清粉从轴当前扭矩_R
envState.m_LoadAxisCurrentPos=m_SysParamWrapper->m_LoadAxisCurrentPos->GetValue(); //移载轴当前位置_R
envState.m_LoadAxisCurrentLoad=m_SysParamWrapper->m_LoadAxisCurrentLoad->GetValue(); //移载轴当前扭矩_R
envState.m_ArmCurrentPos=m_SysParamWrapper->m_ArmCurrentPos->GetValue(); //铺粉轴当前位置_R
envState.m_ArmCurrentLoad=m_SysParamWrapper->m_ArmCurrentLoad->GetValue(); //铺粉轴当前扭矩_R
envState.m_SupplyCurrentPos=m_SysParamWrapper->m_SupplyCurrentPos->GetValue(); //供粉转轴当前位置_R
envState.m_SupplyCurrentLoad=m_SysParamWrapper->m_SupplyCurrentLoad->GetValue(); //供粉转轴当前扭矩_R
envState.m_IsPrintCabinDoorClose = m_IOCfgWrapper->IsSafeDoorClose();
envState.m_PowderJarCabinPressureVoltage=m_SysParamWrapper->m_PowderJarCabinPressureVoltage->GetValue();
envState.m_PowderJarCabinPressure=m_SysParamWrapper->m_PowderJarCabinPressureValue->GetValue();
envState.m_PowderLevelLength = m_SysParamWrapper->m_PowderLevelLength->GetValue();
envState.m_PowderLevelValue = m_SysParamWrapper->m_PowderLevelValue->GetValue();
envState.m_LinearLayerPos = m_SysParamWrapper->m_LinearEncoderPerLayerRealValue->GetValue();
envState.m_MoldTheoryDistance = m_SysParamWrapper->m_MoldTheoryDistance->GetValue();
envState.m_LinearActDistance = m_SysParamWrapper->m_LinearActDistance->GetValue();
envState.m_LinearActPulse = m_SysParamWrapper->m_LinearActPulse->GetValue();
envState.m_LineEncPulseEqu = m_SysParamWrapper->m_LineEncPulseEqu->GetValue();
envState.m_PrintCar1RealWeight = m_SysParamWrapper->m_PrintCar1RealWeight->GetValue();
envState.m_PrintCar2RealWeight = m_SysParamWrapper->m_PrintCar2RealWeight->GetValue();
envState.m_CleanCar1RealWeight = m_SysParamWrapper->m_CleanCar1RealWeight->GetValue();
envState.m_CleanCar2RealWeight = m_SysParamWrapper->m_CleanCar2RealWeight->GetValue();
}
/*void CoreCommunication::AddCmd(Command* cmd)
@ -402,3 +408,34 @@ void CoreCommunication::AssistRun()
}*/
void CoreCommunication::SendProc() {
int index = 0;
string keyStr, valStr;
while (!m_sendTdExitFlag) {
index = 0;
std::unique_lock<std::shared_mutex> lock(m_ValueMtx);
keyStr = valStr = "";
auto param = SysParam::m_sysParamMp.begin();
while (param != SysParam::m_sysParamMp.end()) {
keyStr += param->first;
valStr += param->second.GetValue();
++index;
if (index % 30 == 0) {
WriteData* wd = new WriteData();
ClientWrapper::Instance()->PushAllClient(new WriteData(SYSPARAMDATA, keyStr, valStr));
keyStr = valStr = "";
}
++param;
}
if (!keyStr.empty() && !valStr.empty()) {
ClientWrapper::Instance()->PushAllClient(new WriteData(SYSPARAMDATA, keyStr, valStr));
}
index = 0;
keyStr = valStr = "";
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}

View File

@ -39,8 +39,8 @@ public:
void SetSysParamWrapper(SysParamWrapper* param) { m_SysParamWrapper = param; }
void SetPLCAxis(PLCAxis* axis) { m_Axis = axis; }
void SetAlarmStateWrapper(SignalStateWrapper* param) { m_AlarmStateWrapper = param; };
//void GetAlarmState(SignalState& alarmState);
//void GetEnvState(EnvState& envState);
void GetAlarmState(SignalState& alarmState);
void GetEnvState(EnvState& envState);
void SetAxisRecordWrapper(AxisRecordWrapper* record) { m_AxisrecordWrapper = record; }
virtual bool IsServerConnected() {
@ -68,6 +68,7 @@ private:
Command* GetSendCycleCommand();
void UpdateCycleCommands();
void SendProc();
public:
BaseStat m_BaseStat;
bool m_IsSmart;
@ -98,6 +99,12 @@ private:
AxisRecordWrapper* m_AxisrecordWrapper;
PLCInvoker* m_Invoker;
bool m_sendTdExitFlag; //线程退出标记
std::thread m_sendTd; //定时发送客户端线程
static const unsigned int READ_INFO_ITEM_COUNT = 6;
static const unsigned int READ_DATA_ITEM_COUNT = 1;
};

View File

@ -5,6 +5,7 @@
#include <condition_variable>
#include "Command/PLCReceiver.h"
#include <map>
#include "../DataManage/RWData.h"
using namespace std;
struct DValue;
@ -28,6 +29,7 @@ public:
LeaveCriticalSection(&m_ValueCS);
}
static std::map<std::string, DValue > m_sysParamMp; //记录
protected:
int m_Addr;
int m_DBNumber;
@ -167,6 +169,15 @@ struct DValue {
//printf("SysParamFloat init");
}
std::string GetValue() {
if (sysParamB) return std::to_string(sysParamB->GetValue())+"_"+to_string(DATATYPE::iBOOL);
if (sysParamW) return std::to_string(sysParamW->GetValue())+"_"+to_string(iSHORT);
if (sysParamI) return std::to_string(sysParamI->GetValue()) + "_" + to_string(iINT);
if (sysParamF) return std::to_string(sysParamF->GetValue()) + "_" + to_string(iFLOAT);
if (sysParamFU) return std::to_string(sysParamFU->GetValue()) + "_" + to_string(iFLOAT);
if (sysParamWU) return std::to_string(sysParamWU->GetValue()) + "_" + to_string(iSHORT);
return "";
}
SysParamBool* sysParamB;
SysParamWord* sysParamW;

View File

@ -137,7 +137,7 @@
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalLibraryDirectories>./lib;./lib/absl</AdditionalLibraryDirectories>
<AdditionalDependencies>libprotobuf.lib;libprotobuf-lite.lib;libprotoc.lib;address_sorting.lib;cares.lib;gpr.lib;crypto.lib;grpc++.lib;grpc++_alts.lib;grpc++_error_details.lib;grpc++_reflection.lib;grpc++_unsecure.lib;grpc.lib;grpcpp_channelz.lib;grpc_authorization_provider.lib;grpc_plugin_support.lib;grpc_unsecure.lib;upb.lib;upb_collections_lib.lib;upb_json_lib.lib;upb_textformat_lib.lib;utf8_range_lib.lib;re2.lib;ssl.lib;testing.lib;zlib.lib;zlibstatic.lib;absl_bad_any_cast_impl.lib;absl_bad_optional_access.lib;absl_bad_variant_access.lib;absl_base.lib;absl_city.lib;absl_civil_time.lib;absl_cord.lib;absl_cordz_functions.lib;absl_cordz_handle.lib;absl_cordz_info.lib;absl_cordz_sample_token.lib;absl_cord_internal.lib;absl_crc32c.lib;absl_crc_cord_state.lib;absl_crc_cpu_detect.lib;absl_crc_internal.lib;absl_debugging_internal.lib;absl_demangle_internal.lib;absl_die_if_null.lib;absl_examine_stack.lib;absl_exponential_biased.lib;absl_failure_signal_handler.lib;absl_flags.lib;absl_flags_commandlineflag.lib;absl_flags_commandlineflag_internal.lib;absl_flags_config.lib;absl_flags_internal.lib;absl_flags_marshalling.lib;absl_flags_parse.lib;absl_flags_private_handle_accessor.lib;absl_flags_program_name.lib;absl_flags_reflection.lib;absl_flags_usage.lib;absl_flags_usage_internal.lib;absl_graphcycles_internal.lib;absl_hash.lib;absl_hashtablez_sampler.lib;absl_int128.lib;absl_kernel_timeout_internal.lib;absl_leak_check.lib;absl_log_entry.lib;absl_log_flags.lib;absl_log_globals.lib;absl_log_initialize.lib;absl_log_internal_check_op.lib;absl_log_internal_conditions.lib;absl_log_internal_format.lib;absl_log_internal_globals.lib;absl_log_internal_log_sink_set.lib;absl_log_internal_message.lib;absl_log_internal_nullguard.lib;absl_log_internal_proto.lib;absl_log_severity.lib;absl_log_sink.lib;absl_low_level_hash.lib;absl_malloc_internal.lib;absl_periodic_sampler.lib;absl_random_distributions.lib;absl_random_internal_distribution_test_util.lib;absl_random_internal_platform.lib;absl_random_internal_pool_urbg.lib;absl_random_internal_randen.lib;absl_random_internal_randen_hwaes.lib;absl_random_internal_randen_hwaes_impl.lib;absl_random_internal_randen_slow.lib;absl_random_internal_seed_material.lib;absl_random_seed_gen_exception.lib;absl_random_seed_sequences.lib;absl_raw_hash_set.lib;absl_raw_logging_internal.lib;absl_scoped_set_env.lib;absl_spinlock_wait.lib;absl_stacktrace.lib;absl_status.lib;absl_statusor.lib;absl_strerror.lib;absl_strings.lib;absl_strings_internal.lib;absl_string_view.lib;absl_str_format_internal.lib;absl_symbolize.lib;absl_synchronization.lib;absl_throw_delegate.lib;absl_time.lib;absl_time_zone.lib;Ws2_32.lib;utf8_range.lib;utf8_validity.lib;opengl32.lib;sqlite3.lib;Rpcrt4.lib;ws2_32.lib;winmm.lib;dbghelp.lib;version.lib;gdiplus.lib;GxIAPICPPEx.lib;MVSDKmd.lib;jpeg-static.lib;turbojpeg-static.lib;RTC5DLLx64.lib;opencv_world455.lib;expat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreSpecificDefaultLibraries>crypto.lib</IgnoreSpecificDefaultLibraries>
@ -227,8 +227,8 @@
<ClCompile Include="Config\dao\ScannerControlCfgDao.cpp" />
<ClCompile Include="Config\dao\SystemBaseDao.cpp" />
<ClCompile Include="Config\dao\TimePowerCompensateDao.cpp" />
<ClCompile Include="Controler\Controler.cpp" />
<ClCompile Include="DataManage\ClientInfo.h" />
<ClCompile Include="Controller\Controller.cpp" />
<ClCompile Include="DataManage\ClientInfo.cpp" />
<ClCompile Include="DataManage\DataHandle.cpp" />
<ClCompile Include="DataManage\StreamServer.cpp" />
<ClCompile Include="external\clipper\clipper.cpp" />
@ -436,8 +436,10 @@
<ClInclude Include="Config\dao\ScannerControlCfgDao.h" />
<ClInclude Include="Config\dao\SystemBaseDao.h" />
<ClInclude Include="Config\dao\TimePowerCompensateDao.h" />
<ClInclude Include="Controler\Controler.h" />
<ClInclude Include="Controller\Controller.h" />
<ClInclude Include="DataManage\ClientInfo.h" />
<ClInclude Include="DataManage\DataHandle.h" />
<ClInclude Include="DataManage\RWData.h" />
<ClInclude Include="DataManage\StreamServer.h" />
<ClInclude Include="external\clipper\clipper.hpp" />
<ClInclude Include="external\expat\include\ascii.h" />

View File

@ -77,9 +77,6 @@
<Filter Include="external\QRCode">
<UniqueIdentifier>{92e21183-dc80-46b5-ad1d-750bbe59eeca}</UniqueIdentifier>
</Filter>
<Filter Include="Controler">
<UniqueIdentifier>{3144f523-bb18-4add-b886-c19f2f90c72a}</UniqueIdentifier>
</Filter>
<Filter Include="ScannerCtrl">
<UniqueIdentifier>{5b502dd4-fc0d-4177-89fa-babb40b7ab3c}</UniqueIdentifier>
</Filter>
@ -128,6 +125,9 @@
<Filter Include="external\NewFilter1">
<UniqueIdentifier>{b3261719-dd99-4a4b-8621-cb665ae76036}</UniqueIdentifier>
</Filter>
<Filter Include="Controller">
<UniqueIdentifier>{3144f523-bb18-4add-b886-c19f2f90c72a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
@ -518,15 +518,9 @@
<ClCompile Include="external\QRCode\QrSegment.cpp">
<Filter>external\QRCode</Filter>
</ClCompile>
<ClCompile Include="DataManage\ClientInfo.h">
<Filter>DataManage</Filter>
</ClCompile>
<ClCompile Include="Config\ConfigManager.cpp">
<Filter>Config</Filter>
</ClCompile>
<ClCompile Include="Controler\Controler.cpp">
<Filter>Controler</Filter>
</ClCompile>
<ClCompile Include="PLC\SysParam.cpp">
<Filter>PLC</Filter>
</ClCompile>
@ -681,6 +675,12 @@
<Filter>external\minizip</Filter>
</ClCompile>
<ClCompile Include="HBDSystem.cpp" />
<ClCompile Include="Controller\Controller.cpp">
<Filter>Controller</Filter>
</ClCompile>
<ClCompile Include="DataManage\ClientInfo.cpp">
<Filter>DataManage</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="protobuf\stream.proto">
@ -1406,9 +1406,6 @@
<ClInclude Include="Config\ConfigManager.h">
<Filter>Config</Filter>
</ClInclude>
<ClInclude Include="Controler\Controler.h">
<Filter>Controler</Filter>
</ClInclude>
<ClInclude Include="PLC\SysParam.h">
<Filter>PLC</Filter>
</ClInclude>
@ -1738,6 +1735,15 @@
</ClInclude>
<ClInclude Include="resource1.h" />
<ClInclude Include="HBDSystem.h" />
<ClInclude Include="DataManage\RWData.h">
<Filter>DataManage</Filter>
</ClInclude>
<ClInclude Include="Controller\Controller.h">
<Filter>Controller</Filter>
</ClInclude>
<ClInclude Include="DataManage\ClientInfo.h">
<Filter>DataManage</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Text Include="说明.txt" />