Index: DCON_client.cpp =================================================================== --- DCON_client.cpp (revision 1975) +++ DCON_client.cpp (working copy) @@ -124,8 +124,8 @@ "Engineer (+04.000 +20.000);Engineer (+00.000 +10.000);Engineer (-10.000 +10.000);Engineer (+00.000 +05.000);" "Engineer (-05.000 +05.000);Percent (+000.00 +100.00);Hexadecimal (000 FFF)"))); tpPrmAt(t_prm).fldAdd(new TFld("DI_METHOD",_("DI method"),TFld::Integer,TFld::Selected|TCfg::NoVal,"1","0", - "0;3;4;7;8;14;16;101;201", - _("No DI;3DI ($AA6);4DI ($AA6);7DI ($AA6);8DI ($AA6);14DI ($AA6);16DI ($AA6);1DI (@AADI);8DI ($AA6,FF00)")) ); + "0;3;4;7;8;12;14;16;101;201", + _("No DI;3DI ($AA6);4DI ($AA6);7DI ($AA6);8DI ($AA6);12DI ($AA6,adam);14DI ($AA6);16DI ($AA6);1DI (@AADI);8DI ($AA6,FF00)")) ); tpPrmAt(t_prm).fldAdd(new TFld("DO_METHOD",_("DO method"),TFld::Integer,TFld::Selected|TCfg::NoVal,"1","0", "0;2;3;4;5;7;8;12;13;16;102;103;202;204;306;402;504;604;608,704,708,712)", _("No DO;2DO (@AA,0300);3DO (@AA,7);4DO (@AA,F);5DO (@AA,1F);7DO (@AA,7F);8DO (@AA,FF);12DO (@AA,0FFF);" @@ -304,7 +304,7 @@ void *TMdContr::Task( void *icntr ) { string str, pdu, ai_txterr, ao_txterr, di_txterr, do_txterr, ci_txterr; - int n, m, i; + int n, n2, n3, m, i; TMdContr &cntr = *(TMdContr *)icntr; cntr.endrun_req = false; @@ -467,19 +467,22 @@ //DI unsigned int DI = 0; n = 0; + n2 = 0; + n3 = 0; switch(cntr.p_hd[i_p].at().di_method) { case 3: if(!n) n = 3; //3DI ($AA6) case 4: if(!n) n = 4; //4DI ($AA6) case 7: if(!n) n = 7; //7DI ($AA6) case 8: if(!n) n = 8; //8DI ($AA6) + case 12:{if(!n) n = 12; n2=2; n3=4;}//12DI ($AA6,adam) case 14:if(!n) n = 14; //14DI ($AA6) case 16:if(!n) n = 16; //16DI ($AA6) case 201:if(!n) n = 8; //8DI ($AA6,FF00) //> Request with module pdu = TSYS::strMess("$%02X6",cntr.p_hd[i_p].at().mod_addr); - di_txterr = cntr.DCONReq(pdu,cntr.p_hd[i_p].at().crc_ctrl,7,'!'); - if(di_txterr == "0") DI = strtoul(pdu.substr(1,4).c_str(),NULL,16); + di_txterr = cntr.DCONReq(pdu,cntr.p_hd[i_p].at().crc_ctrl,7+n2,'!'); + if(di_txterr == "0") DI = strtoul(pdu.substr(1+n3,4).c_str(),NULL,16); if(cntr.p_hd[i_p].at().di_method == 201) DI = DI>>8; for(int i_n = 0; i_n < n; i_n++) cntr.p_hd[i_p].at().DI[i_n] = (di_txterr == "0") ? ((DI>>i_n)&0x01) : EVAL_BOOL; @@ -835,6 +838,7 @@ case 4: itCnt = 4; break; //4DI ($AA6) case 7: itCnt = 7; break; //7DI ($AA6) case 8: itCnt = 8; break; //8DI ($AA6) + case 12:itCnt = 12; break; //12DI ($AA6,adam) case 14:itCnt = 14; break; //14DI ($AA6) case 16:itCnt = 16; break; //16DI ($AA6) case 101:itCnt = 1; break; //1DI (@AADI)