本文整理汇总了C++中AutoHD::at方法的典型用法代码示例。如果您正苦于以下问题:C++ AutoHD::at方法的具体用法?C++ AutoHD::at怎么用?C++ AutoHD::at使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AutoHD
的用法示例。
在下文中一共展示了AutoHD::at方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setValsProc
bool ModVArchEl::setValsProc( TValBuf &buf, int64_t beg, int64_t end )
{
if(needMeta && (needMeta=!readMeta())) return false;
//Check border
if(!buf.vOK(beg,end)) return false;
beg = vmax(beg, buf.begin());
end = vmin(end, buf.end());
beg = (beg/period())*period();
end = (end/period())*period();
//Table struct init
TConfig cfg((archive().valType()==TFld::Real) ? (&mod->vlRealEl()) :
(archive().valType()==TFld::String) ? (&mod->vlStrEl()) : &mod->vlIntEl());
AutoHD<TTable> tbl = SYS->db().at().open(archivator().addr()+"."+archTbl(), true);
if(tbl.freeStat()) return false;
//Write data to table
for(int64_t ctm; beg <= end; beg++) {
switch(archive().valType()) {
case TFld::Boolean: cfg.cfg("VAL").setI(buf.getB(&beg,true)); break;
case TFld::Integer: cfg.cfg("VAL").setI(buf.getI(&beg,true)); break;
case TFld::Real: cfg.cfg("VAL").setR(buf.getR(&beg,true)); break;
case TFld::String: cfg.cfg("VAL").setS(buf.getS(&beg,true)); break;
default: break;
}
ctm = (beg/period())*period();
cfg.cfg("TM").setI(ctm/1000000);
cfg.cfg("TMU").setI(ctm%1000000);
tbl.at().fieldSet(cfg);
//Archive time border update
mBeg = mBeg ? vmin(mBeg,ctm) : ctm;
mEnd = mEnd ? vmax(mEnd,ctm) : ctm;
}
//Archive size limit process
if((mEnd-mBeg) > (int64_t)(archivator().maxSize()*3600e6)) {
int64_t n_end = ((mEnd-(int64_t)(archivator().maxSize()*3600e6))/period())*period();
for(int64_t t_c = vmax(mBeg,n_end-3600ll*period()); t_c < n_end; t_c += period()) {
cfg.cfg("TM").setI(t_c/1000000, true);
cfg.cfg("TMU").setI(t_c%1000000, true);
tbl.at().fieldDel(cfg);
}
mBeg = n_end;
}
tbl.free();
SYS->db().at().close(archivator().addr()+"."+archTbl());
//Update archive info
cfg.setElem(&mod->archEl());
cfg.cfgViewAll(false);
cfg.cfg("TBL").setS(archTbl(), true);
cfg.cfg("BEGIN").setS(ll2s(mBeg), true);
cfg.cfg("END").setS(ll2s(mEnd), true);
cfg.cfg("PRM1").setS(ll2s(mPer), true);
return SYS->db().at().dataSet(archivator().addr()+"."+mod->mainTbl(),"",cfg,false,true);
}
示例2: start
void ModMArch::start( )
{
//Connection to DB and enable status check
string wdb = TBDS::realDBName(addr());
AutoHD<TBD> db = SYS->db().at().nodeAt(wdb, 0, '.');
try { if(!db.at().enableStat()) db.at().enable(); }
catch(TError err) { mess_warning(nodePath().c_str(), _("Enable target DB error: %s"), err.mess.c_str()); }
TMArchivator::start();
}
示例3: start
//!!! Inherited (virtual) start archivator functions.
void ModVArch::start()
{
//> Connection to DB and enable status check
string wdb = TBDS::realDBName(addr());
AutoHD<TBD> db = SYS->db().at().nodeAt(wdb,0,'.');
if( !db.at().enableStat( ) ) db.at().enable();
//> Start getting data cycle
TVArchivator::start();
}
示例4: getHDDTemp
string Hddtemp::getHDDTemp( )
{
string val;
char buf[20];
ResAlloc res(m_res, true);
//Check connect and start
if(!SYS->transport().at().at(t_tr).at().outPresent(n_tr)) SYS->transport().at().at(t_tr).at().outAdd(n_tr);
AutoHD<TTransportOut> tr = SYS->transport().at().at(t_tr).at().outAt(n_tr);
MtxAlloc resN(tr.at().reqRes(), true);
tr.at().setName(_("Parameter Hddtemp"));
tr.at().setAddr("TCP:127.0.0.1:7634");
tr.at().setTimings("5:0.01");
if(tr.at().startStat()) tr.at().stop();
tr.at().start();
//Request
int len;
do {
len = tr.at().messIO(NULL, 0, buf, sizeof(buf));
val.append(buf,len);
}while(len);
tr.at().stop();
return val;
}
示例5: modBusReq
string TMdContr::modBusReq( string &pdu, bool MC, bool broadCast )
{
char buf[1024];
string mbap, rez, err;
try {
//Transport creation for MC and MR busses and connect
AutoHD<TTransportOut> tro = SYS->transport().at().nodeAt(MC?"Serial.out_SMH2Gi_MC":"Serial.out_SMH2Gi_MR", 0, '.', 0, true);
if(tro.freeStat()) {
SYS->transport().at().at("Serial").at().outAdd(MC?"SMH2Gi_MC":"SMH2Gi_MR");
tro = SYS->transport().at().nodeAt(MC?"Serial.out_SMH2Gi_MC":"Serial.out_SMH2Gi_MR", 0, '.', 0, true);
// Typical parameters set
tro.at().setDscr(TSYS::strMess(_("Segnetics SMH2Gi automatic created transport for '%s' bus"),MC?"MC":"MR"));
tro.at().setAddr(MC?(cfg("MC_DEV").getS()+":230400:8N1"):(cfg("MR_DEV").getS()+":230400:8N2"));
}
ResAlloc resN(tro.at().nodeRes(), true);
//Start stoped transport
if(!tro.at().startStat()) tro.at().start();
//Prepare request
mbap.reserve(pdu.size()+2);
mbap += pdu;
uint16_t crc = CRC16(mbap);
mbap += (crc>>8);
mbap += crc;
//Send request
for(int i_tr = 0; i_tr < connTry; i_tr++) {
if(messLev() == TMess::Debug)
mess_debug_(nodePath().c_str(), _("ModBUS REQ -> '%s': %s"), tro.at().id().c_str(), TSYS::strDecode(mbap,TSYS::Bin," ").c_str());
int resp_len = tro.at().messIO(mbap.data(), mbap.size(), (broadCast?NULL:buf), sizeof(buf), 0, true);
if(broadCast) { err = ""; break; }
rez.assign(buf, resp_len);
//Wait tail
while(resp_len) {
try{ resp_len = tro.at().messIO(NULL, 0, buf, sizeof(buf), 0, true); } catch(TError err){ break; }
rez.append(buf, resp_len);
}
if(rez.size() < 2) { err = _("13:Error respond: Too short."); continue; }
if(CRC16(rez.substr(0,rez.size()-2)) != (uint16_t)((rez[rez.size()-2]<<8)+(uint8_t)rez[rez.size()-1]))
{ err = _("13:Error respond: CRC check error."); continue; }
if(messLev() == TMess::Debug)
mess_debug_(nodePath().c_str(), _("ModBUS RESP -> '%s': %s"), tro.at().id().c_str(), TSYS::strDecode(rez,TSYS::Bin," ").c_str());
pdu = rez.substr(0, rez.size()-2);
err = "";
break;
}
}
catch(TError ierr) { err = "10:"+ierr.mess; }
if(messLev() >= TMess::Error && err.size()) mess_err(nodePath().c_str(), "%s", err.c_str());
if(messLev() == TMess::Debug && err.size())
mess_debug_(nodePath().c_str(), _("ModBUS ERR -> %s: %s"), TSYS::strDecode(mbap,TSYS::Bin," ").c_str(), err.c_str());
return err;
}
示例6: put
bool ModMArch::put( vector<TMess::SRec> &mess, bool force )
{
if(needMeta && (needMeta=!readMeta())) return false;
TMArchivator::put(mess, force); //Allow redundancy
if(!runSt) throw TError(nodePath().c_str(), _("The archive is not started!"));
AutoHD<TTable> tbl = SYS->db().at().open(addr()+"."+archTbl(), true);
if(tbl.freeStat()) return false;
TConfig cfg(&reqEl);
int64_t t_cnt = TSYS::curTime();
for(unsigned i_m = 0; i_m < mess.size(); i_m++) {
if(!chkMessOK(mess[i_m].categ,mess[i_m].level)) continue;
//Put record to DB
cfg.cfg("MIN").setI(mess[i_m].time/60);
cfg.cfg("TM").setI(mess[i_m].time);
cfg.cfg("TMU").setI(mess[i_m].utime);
cfg.cfg("CATEG").setS(mess[i_m].categ);
cfg.cfg("MESS").setS(mess[i_m].mess);
cfg.cfg("LEV").setI(mess[i_m].level);
tbl.at().fieldSet(cfg);
//Archive time border update
mBeg = mBeg ? vmin(mBeg,mess[i_m].time) : mess[i_m].time;
mEnd = mEnd ? vmax(mEnd,mess[i_m].time) : mess[i_m].time;
}
//Archive size limit process
if(maxSize() && (mEnd-mBeg) > (time_t)(maxSize()*86400)) {
time_t nEnd = mEnd - (time_t)(maxSize()*86400);
cfg.cfg("TM").setKeyUse(false);
for(int tC = mBeg/60; tC < nEnd/60; tC++) {
cfg.cfg("MIN").setI(tC, true);
tbl.at().fieldDel(cfg);
}
mBeg = nEnd;
}
tbl.free();
//SYS->db().at().close(addr()+"."+archTbl()); //!!! No close the table manually
//Update archive info
cfg.setElem(&mod->archEl());
cfg.cfgViewAll(false);
cfg.cfg("TBL").setS(archTbl(),true);
cfg.cfg("BEGIN").setS(i2s(mBeg),true);
cfg.cfg("END").setS(i2s(mEnd),true);
bool rez = SYS->db().at().dataSet(addr()+"."+mod->mainTbl(),"",cfg,false,true);
tmProc = TSYS::curTime() - t_cnt; tmProcMax = vmax(tmProcMax, tmProc);
return rez;
}
示例7: transCloseCheck
void MBD::transCloseCheck( )
{
if(enableStat()) {
vector<string> t_list;
list(t_list);
for(unsigned i_l = 0; i_l < t_list.size(); i_l++) {
AutoHD<MTable> t = at(t_list[i_l]);
if(t.at().mModify && (SYS->sysTm()-t.at().mModify) > 10) t.at().save();
}
}
}
示例8: discoveryUrls
void TProt::discoveryUrls( vector<string> &ls )
{
ls.clear();
//Get allowed enpoints list
vector<string> epLs;
epList(epLs);
for(unsigned i_ep = 0; i_ep < epLs.size(); i_ep++) {
AutoHD<OPCEndPoint> ep = epAt(epLs[i_ep]);
if(!ep.at().enableStat()) continue;
ls.push_back(ep.at().url());
break;
}
}
示例9: makeActiveDA
void HddStat::makeActiveDA( TMdContr *aCntr )
{
string ap_nm = "Statistic_";
vector<string> list;
dList(list,true);
for(unsigned i_hd = 0; i_hd < list.size(); i_hd++)
{
vector<string> pLs;
// Find propper parameter's object
aCntr->list(pLs);
unsigned i_p;
for(i_p = 0; i_p < pLs.size(); i_p++)
{
AutoHD<TMdPrm> p = aCntr->at(pLs[i_p]);
if(p.at().cfg("TYPE").getS() == id() && p.at().cfg("SUBT").getS() == list[i_hd]) break;
}
if(i_p < pLs.size()) continue;
string hddprm = ap_nm+list[i_hd];
while(aCntr->present(hddprm)) hddprm = TSYS::strLabEnum(hddprm);
aCntr->add(hddprm, 0);
AutoHD<TMdPrm> dprm = aCntr->at(hddprm);
dprm.at().setName(_("HD statistic: ")+list[i_hd]);
dprm.at().autoC(true);
dprm.at().cfg("TYPE").setS(id());
dprm.at().cfg("SUBT").setS(list[i_hd]);
dprm.at().cfg("EN").setB(true);
if(aCntr->enableStat()) dprm.at().enable();
}
}
示例10: makeActiveDA
void Hddtemp::makeActiveDA( TMdContr *aCntr )
{
string ap_nm = "Temperature_hd";
vector<string> list;
dList(list);
try {
for(unsigned i_hd = 0; i_hd < list.size(); i_hd++) {
vector<string> pLs;
// Find propper parameter's object
aCntr->list(pLs);
unsigned i_p;
for(i_p = 0; i_p < pLs.size(); i_p++)
{
AutoHD<TMdPrm> p = aCntr->at(pLs[i_p]);
if(p.at().cfg("TYPE").getS() == id() && p.at().cfg("SUBT").getS() == list[i_hd]) break;
}
if(i_p < pLs.size()) continue;
string hddprm = ap_nm+i2s(i_hd);
while(aCntr->present(hddprm)) hddprm = TSYS::strLabEnum(hddprm);
aCntr->add(hddprm,0);
AutoHD<TMdPrm> dprm = aCntr->at(hddprm);
dprm.at().setName(_("HD temperature: ")+i2s(i_hd));
dprm.at().autoC(true);
dprm.at().cfg("TYPE").setS(id());
dprm.at().cfg("SUBT").setS(list[i_hd]);
dprm.at().cfg("EN").setB(true);
if(aCntr->enableStat()) dprm.at().enable();
}
} catch(TError &err) { /*mess_err(err.cat.c_str(),"%s",err.mess.c_str());*/ }
}
示例11: put
bool ModMArch::put( vector<TMess::SRec> &mess )
{
if(!run_st) throw TError(nodePath().c_str(), _("Archive is not started!"));
AutoHD<TTable> tbl = SYS->db().at().open(addr()+"."+archTbl(), true);
if(tbl.freeStat()) return false;
TConfig cfg(&mod->messEl());
int64_t t_cnt = TSYS::curTime();
for(unsigned i_m = 0; i_m < mess.size(); i_m++) {
if(!chkMessOK(mess[i_m].categ,mess[i_m].level)) continue;
//Put record to DB
cfg.cfg("TM").setI(mess[i_m].time);
cfg.cfg("TMU").setI(mess[i_m].utime);
cfg.cfg("CATEG").setS(mess[i_m].categ);
cfg.cfg("MESS").setS(mess[i_m].mess);
cfg.cfg("LEV").setI(mess[i_m].level);
tbl.at().fieldSet(cfg);
//Archive time border update
mBeg = mBeg ? vmin(mBeg,mess[i_m].time) : mess[i_m].time;
mEnd = mEnd ? vmax(mEnd,mess[i_m].time) : mess[i_m].time;
}
//Archive size limit process
if((mEnd-mBeg) > (time_t)(maxSize()*3600)) {
time_t n_end = mEnd-(time_t)(maxSize()*3600);
for(time_t t_c = vmax(mBeg,n_end-3600); t_c < n_end; t_c++) {
cfg.cfg("TM").setI(t_c,true);
tbl.at().fieldDel(cfg);
}
mBeg = n_end;
}
tbl.free();
SYS->db().at().close(addr()+"."+archTbl());
//Update archive info
cfg.setElem(&mod->archEl());
cfg.cfgViewAll(false);
cfg.cfg("TBL").setS(archTbl(),true);
cfg.cfg("BEGIN").setS(i2s(mBeg),true);
cfg.cfg("END").setS(i2s(mEnd),true);
bool rez = SYS->db().at().dataSet(addr()+"."+mod->mainTbl(),"",cfg,false,true);
tm_calc = 1e-3*(TSYS::curTime()-t_cnt);
return rez;
}
示例12: vlGet
void Prm::vlGet( TVal &val )
{
if(val.name() == "err") {
if(!enableStat()) val.setS(_("1:Parameter is disabled."),0,true);
else if(!owner().startStat()) val.setS(_("2:Controller is stopped."),0,true);
else val.setS("0",0,true);
return;
}
if(owner().redntUse()) return;
try {
//if( !enableStat() ) return;
AutoHD<Block> blk = ((Contr &)owner()).blkAt(TSYS::strSepParse(val.fld().reserve(),0,'.'));
int io_id = blk.at().ioId(TSYS::strSepParse(val.fld().reserve(),1,'.'));
if( io_id < 0 ) disable();
else val.set((enableStat()&&owner().startStat()) ? blk.at().get(io_id) : EVAL_STR, 0, true);
}catch(TError err) { disable(); }
}
示例13: start
void ModMArch::start( )
{
if(!runSt) {
reqEl.fldClear();
reqEl.fldAdd(new TFld("MIN",_("In minutes"),TFld::Integer,TCfg::Key,"15")); //Mostly for fast reading next, by minutes
reqEl.fldAdd(new TFld("TM",_("Time, seconds"),TFld::Integer,TCfg::Key|(tmAsStr()?TFld::DateTimeDec:0),"20"));
reqEl.fldAdd(new TFld("TMU",_("Time, microseconds"),TFld::Integer,TCfg::Key,"6","0"));
reqEl.fldAdd(new TFld("CATEG",_("Category"),TFld::String,TCfg::Key,"100"));
reqEl.fldAdd(new TFld("MESS",_("Message"),TFld::String,TFld::NoFlag/*TCfg::Key*/,"100000"));
reqEl.fldAdd(new TFld("LEV",_("Level"),TFld::Integer,TFld::NoFlag,"2"));
}
//Connection to DB and enable status check
string wdb = TBDS::realDBName(addr());
AutoHD<TBD> db = SYS->db().at().nodeAt(wdb, 0, '.');
try { if(!db.at().enableStat()) db.at().enable(); }
catch(TError &err) { mess_warning(nodePath().c_str(), _("Error enabling the target DB: %s"), err.mess.c_str()); }
TMArchivator::start();
}
示例14: calc
//*************************************************
//* Control request *
//*************************************************
void xmlCntrReq::calc( TValFunc *val )
{
try {
XMLNode req;
AutoHD<XMLNodeObj> xnd = val->getO(1);
if(xnd.freeStat()) { val->setS(0,_("1:Request is not object!")); return; }
xnd.at().toXMLNode(req);
string path = req.attr("path");
if(val->getS(2).empty()) {
req.setAttr("user", val->user());
SYS->cntrCmd(&req);
}
else {
req.setAttr("path", "/"+val->getS(2)+path);
SYS->transport().at().cntrIfCmd(req, "xmlCntrReq");
req.setAttr("path", path);
}
xnd.at().fromXMLNode(req);
val->setS(0, "0");
}catch(TError err){ val->setS(0, TSYS::strMess(_("1:Request error: %s"),err.mess.c_str())); }
}
示例15: vlSet
void Prm::vlSet( TVal &vo, const TVariant &vl, const TVariant &pvl )
{
if(!enableStat() || !owner().startStat()) return;
//Send to active reserve station
if(owner().redntUse()) {
if(vl == pvl) return;
XMLNode req("set");
req.setAttr("path",nodePath(0,true)+"/%2fserv%2fattr")->childAdd("el")->setAttr("id",vo.name())->setText(vl.getS());
SYS->daq().at().rdStRequest(owner().workId(),req);
return;
}
//Direct write
try {
AutoHD<Block> blk = ((Contr &)owner()).blkAt(TSYS::strSepParse(vo.fld().reserve(),0,'.'));
int io_id = blk.at().ioId(TSYS::strSepParse(vo.fld().reserve(),1,'.'));
if(io_id < 0) disable();
else {
MtxAlloc sres(owner().calcRes, true);
blk.at().set(io_id, vl);
}
}catch(TError err) { disable(); }
}