Changeset 153 in tmcsimulator for branches/BasicFEPClient
- Timestamp:
- 10/20/2017 12:46:53 PM (9 years ago)
- Location:
- branches/BasicFEPClient
- Files:
-
- 2 edited
-
DataPacker.cpp (modified) (2 diffs)
-
network_factory.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/BasicFEPClient/DataPacker.cpp
r142 r153 62 62 else 63 63 return -1; 64 64 65 // if we have data (strcmp returns 0 if a string match) 65 66 if (haveData == 0) { 66 67 LOOP *currLoop = station->loops.at(lane); 67 68 vol = currLoop->vol; 68 69 occ = (int) (currLoop->occ * 900 + 0.5); 69 70 cout << "Volume: " << vol << endl; 71 cout << "OCC : " << occ << endl; 70 72 VOLOCC packedVOLOCC = packVOLOCC(vol, occ); 71 73 pos++; … … 73 75 pos++; 74 76 msg[pos - 1] = packedVOLOCC.low; 75 77 76 78 if (packNo == 5) { 77 79 station->MlTotVol += vol; -
branches/BasicFEPClient/network_factory.cpp
r151 r153 37 37 38 38 // Initializes the LOOP dataPack with all necessary static data and default dynamic data 39 void NetworkFactory::init_loop_dataPack(STATION * station)39 void NetworkFactory::init_loop_dataPack(STATION *loop) 40 40 { 41 41 int j; 42 42 // Allocate memory for dataPack 43 station->dataPack = (unsigned char *) calloc(sizeof(unsigned char), station->length);43 loop->dataPack = (unsigned char *) calloc(sizeof(unsigned char), loop->length); 44 44 45 45 // dataPack 5-8: lane config 46 46 char d5 = 0, d6 = 0, d7 = 0, d8 = 0; 47 for (j = 0; j < station->loops.size(); j++)48 { 49 char * currLoc = station->loops[j]->loop_loc;47 for (j = 0; j < loop->loops.size(); j++) 48 { 49 char * currLoc = loop->loops[j]->loop_loc; 50 50 for (int k = 0; k < 8; k++) 51 51 { … … 60 60 } 61 61 } 62 station->dataPack[5-1] = d5;63 station->dataPack[6-1] = d6;64 station->dataPack[7-1] = d7;65 station->dataPack[8-1] = d8;62 loop->dataPack[5-1] = d5; 63 loop->dataPack[6-1] = d6; 64 loop->dataPack[7-1] = d7; 65 loop->dataPack[8-1] = d8; 66 66 67 67 // dataPack 1: Drop number, i.e. station address 68 station->dataPack[1-1] = station->drop;68 loop->dataPack[1-1] = loop->drop; 69 69 70 70 // dataPack2 (2 bytes per loop) 71 station->dataPack[2-1] = station->loops.size() * 2 + Fixed_Byte_To_Checksum;71 loop->dataPack[2-1] = loop->loops.size() * 2 + Fixed_Byte_To_Checksum; 72 72 73 73 // dataPacket 3 (lowbyte: # of mainline loops, highbyte: # of opposite loops) … … 75 75 for (j = 1; j <= 6; j++) 76 76 { 77 low += DataAvail( station->dataPack[5-1], j);78 high += DataAvail( station->dataPack[6-1], j);77 low += DataAvail(loop->dataPack[5-1], j); 78 high += DataAvail(loop->dataPack[6-1], j); 79 79 } 80 80 high = high << 4; 81 station->dataPack[3-1] = high | low;81 loop->dataPack[3-1] = high | low; 82 82 83 83 // dataPack4 (Miscl. flags: samples are: 80, A0, E0, 00) 84 station->dataPack[4-1] = 0xA0;84 loop->dataPack[4-1] = 0xA0; 85 85 86 86 // dataPack 9: initialized as 00 (meaning no metering); need to be updated every 30 sec 87 station->dataPack[9-1] = 0;87 loop->dataPack[9-1] = 0; 88 88 89 89 // datadataPack 10-13: lane malfunction? Assuming all functional 90 station->dataPack[10-1] = 0;91 station->dataPack[11-1] = 0;92 station->dataPack[12-1] = 0;93 station->dataPack[13-1] = 0;90 loop->dataPack[10-1] = 0; 91 loop->dataPack[11-1] = 0; 92 loop->dataPack[12-1] = 0; 93 loop->dataPack[13-1] = 0; 94 94 95 95 // dataPack 14-22: ramp metering data 96 96 // BYTE 16 and 22 need to be updated every 30 sec 97 97 bool found = false; 98 for (j = 0; j < station->loops.size(); j++)99 { 100 if (strcmp( station->loops.at(0)->loop_loc, "DEMAND") == 0)98 for (j = 0; j < loop->loops.size(); j++) 99 { 100 if (strcmp(loop->loops.at(0)->loop_loc, "DEMAND") == 0) 101 101 { 102 102 found = true; … … 107 107 { 108 108 // BYTE 14: mostly 07, some are 05, 03, 00 109 station->dataPack[14-1] = 0x07;109 loop->dataPack[14-1] = 0x07; 110 110 // mostly 06(TOD table 1); some are 0B (No metering) or 05(traffic responsive) 111 station->dataPack[15-1] = 0x06;111 loop->dataPack[15-1] = 0x06; 112 112 // most 00, some are 01 (queue override) or 80(Meter ON sign) 113 station->dataPack[16-1] = 0x00;113 loop->dataPack[16-1] = 0x00; 114 114 // Field Manual Rate 115 station->dataPack[17-1] = 0xFF;115 loop->dataPack[17-1] = 0xFF; 116 116 // TOC Manual Rate 117 station->dataPack[18-1] = 0xFF;117 loop->dataPack[18-1] = 0xFF; 118 118 // PSO Manual Rate 119 station->dataPack[19-1] = 0xFF;119 loop->dataPack[19-1] = 0xFF; 120 120 // CORM Rate 121 station->dataPack[20-1] = 0xFF;121 loop->dataPack[20-1] = 0xFF; 122 122 // Local Responsive Rate. DON'T UNDERSTAND YET 123 station->dataPack[21-1] = 0x00;123 loop->dataPack[21-1] = 0x00; 124 124 // TOD Rate: need to query RAMP plugin! 125 station->dataPack[22-1] = 0x00;125 loop->dataPack[22-1] = 0x00; 126 126 } 127 127 // LDS: NO Metering 128 128 else 129 129 { 130 station->dataPack[14-1] = 0x00;131 station->dataPack[15-1] = 0x0B;132 station->dataPack[16-1] = 0x00;133 station->dataPack[17-1] = 0xFF;134 station->dataPack[18-1] = 0xFF;135 station->dataPack[19-1] = 0xFF;136 station->dataPack[20-1] = 0xFF;137 station->dataPack[21-1] = 0x00;138 station->dataPack[22-1] = 0x00;130 loop->dataPack[14-1] = 0x00; 131 loop->dataPack[15-1] = 0x0B; 132 loop->dataPack[16-1] = 0x00; 133 loop->dataPack[17-1] = 0xFF; 134 loop->dataPack[18-1] = 0xFF; 135 loop->dataPack[19-1] = 0xFF; 136 loop->dataPack[20-1] = 0xFF; 137 loop->dataPack[21-1] = 0x00; 138 loop->dataPack[22-1] = 0x00; 139 139 } 140 140 141 141 // dataPack 23-24: sum of mainline/Oppsite traffic data; need to be updated every 30 sec 142 station->MlTotVol = 0;143 station->OppTotVol = 0;144 station->dataPack[23-1] = station->MlTotVol;145 station->dataPack[24-1] = station->OppTotVol;142 loop->MlTotVol = 0; 143 loop->OppTotVol = 0; 144 loop->dataPack[23-1] = loop->MlTotVol; 145 loop->dataPack[24-1] = loop->OppTotVol; 146 146 147 147 // dataPack 25-26: BYTE 25 is fixed, i.e. 03; BYTE 26 is either 0xA2 or 0x84 148 station->dataPack[25-1] = 0x03;149 station->dataPack[26-1] = 0x84;148 loop->dataPack[25-1] = 0x03; 149 loop->dataPack[26-1] = 0x84; 150 150 151 151 printf("lds=%d (%d), p1=%2X, p2=%2X, p3=%2X, p5=%2X, p6=%X, p7=%X, p8=%2X\n", 152 station->lds, station->length, station->dataPack[1-1], station->dataPack[2-1],153 station->dataPack[3-1], station->dataPack[5-1],154 station->dataPack[6-1], station->dataPack[7-1], station->dataPack[8-1]);155 } 156 157 // TEST DATA : WORKING152 loop->lds, loop->length, loop->dataPack[1-1], loop->dataPack[2-1], 153 loop->dataPack[3-1], loop->dataPack[5-1], 154 loop->dataPack[6-1], loop->dataPack[7-1], loop->dataPack[8-1]); 155 } 156 157 // TEST DATA 158 158 // lds_id line drop sch lineinfo system_key sch_seq glo_seq count freeway Dir ca_pm lds_name 159 159 // 1203103 50 13 13 13 1123005873 24148 1357650 19 55 S 6.88 MACARTHU1 160 161 // SAND CANYON: NOT WORKING162 // 1204813 31 18 5 5 1123005744 26489 1357649 18 5 S 23.5 S OF SAND CNYN163 164 160 FEP_LINE * NetworkFactory::load_lines(int *size, const char * fName) 165 161 { 166 162 FEP_LINE *lines = (FEP_LINE *) calloc(sizeof(FEP_LINE), 1); 167 163 *size = 1; 168 lines[0].lineNum = 31;169 lines[0].lds.push_back(120 4813);164 lines[0].lineNum = 50; 165 lines[0].lds.push_back(1203103); 170 166 lines[0].ldsIndex.push_back(0); 171 lines[0].count = 1 8;172 lines[0].schedule = 5;173 lines[0].globalSeq = 13576 49;174 lines[0].schedleSeq = 2 6489;167 lines[0].count = 19; 168 lines[0].schedule = 13; 169 lines[0].globalSeq = 1357650; 170 lines[0].schedleSeq = 24148; 175 171 return lines; 176 172 } 177 173 178 // TEST DATA : Working (MacAruthur))174 // TEST DATA 179 175 //FWY Dir POSTMI LDS_ID VDS_ID LOOP_ID LOC LANE LOOP_LOC PARAMICS_NAME PARAMICS_LANE 180 176 //55 S 6.88 1203103 1203104 1203105 QU 1 QUEUE 55s6.88ora 0 177 181 178 //55 S 6.88 1203103 1203104 1203106 DM 2 DEMAND 55s6.88ora 0 179 182 180 //55 S 6.88 1203103 1203104 1203107 PA 3 PASSAGE 55s6.88ora 0 181 183 182 //55 S 6.88 1203103 1203108 1203109 HV 1 SD_1 ? 0 183 184 184 //55 S 6.88 1203103 1203110 1203111 ML 1 ML_1 55s6.88ml 4 185 185 186 //55 S 6.88 1203103 1203110 1203112 ML 2 ML_2 55s6.88ml 3 187 186 188 //55 S 6.88 1203103 1203110 1203113 ML 3 ML_3 55s6.88ml 2 189 187 190 //55 S 6.88 1203103 1203110 1203114 ML 4 ML_4 55s6.88ml 1 188 189 // TEST DATA: Not working (Sand canyon)190 //5 S 23.5 1204813 1204814 1204815 HV 1 SD_1 5s23.5hv 1191 //5 S 23.5 1204813 1204816 1204818 ML 2 ML_2 5s23.5ml 5192 //5 S 23.5 1204813 1204816 1204819 ML 3 ML_3 5s23.5ml 4193 //5 S 23.5 1204813 1204816 1204820 ML 4 ML_4 5s23.5ml 3194 //5 S 23.5 1204813 1204816 1204821 ML 5 ML_5 5s23.5ml 2195 //5 S 23.5 1204813 1204816 1204822 ML 6 ML_6 5s23.5ml 1196 //5 N 23.5 1204813 1204823 1204824 OH 1 SD_2 5n23.5hv 1197 //5 N 23.5 1204813 1204825 1204826 OS 1 OS_1 5n23.5ml 6198 //5 N 23.5 1204813 1204825 1204827 OS 2 OS_2 5n23.5ml 5199 //5 N 23.5 1204813 1204825 1204828 OS 3 OS_3 5n23.5ml 4200 //5 N 23.5 1204813 1204825 1204829 OS 4 OS_4 5n23.5ml 3201 //5 N 23.5 1204813 1204825 1204830 OS 5 OS_5 5n23.5ml 2202 //5 N 23.5 1204813 1204825 1204831 OS 6 OS_6 5n23.5ml 1203 204 205 //5 S 23.5 1204813 1204816 1204817 ML 1 ML_1 5s23.5ml 6206 207 191 STATION * NetworkFactory::load_lds(const char * fName) 208 192 { 209 193 /* Read loop meta data */ 210 194 STATION *lds_map = (STATION *) calloc(sizeof(STATION), 1); 211 lds_map[0].lds = 120 4813;212 lds_map[0].line_num = 31;213 lds_map[0].drop = 1 8;195 lds_map[0].lds = 1203103; 196 lds_map[0].line_num = 50; 197 lds_map[0].drop = 13; 214 198 LOOP *loop = new LOOP; 215 loop->loopID = 120 4817;199 loop->loopID = 1203111; 216 200 loop->loop_loc = "ML_1"; 217 loop->occ = 0; 218 loop->vol = 0; 219 201 202 LOOP *looptwo = new LOOP; 203 looptwo->loopID = 1203112; 204 looptwo->loop_loc = "ML_2"; 205 // occ 30 206 // vol 15 makes a speed of 20 RED 207 208 // occ 30 209 // vol 20 makes a speed of 26 YELLOW 210 211 // occ 30 212 // vol 30 makes a speed of 39 GREEN 213 loop->occ = 30; 214 loop->vol = 20; 215 216 looptwo->occ = 30; 217 looptwo->vol = 15; 218 219 // Loop ids 220 long *loopIDs = (long *) calloc(sizeof(long), lds_map[0].loops.size()); 221 loopIDs[0] = 1203113; 222 loopIDs[1] = 1203112; 220 223 lds_map[0].loops.push_back(loop); 221 224 lds_map[0].loops.push_back(looptwo); 225 222 226 // Init Loop dataPack 223 227 lds_map[0].length = lds_map[0].loops.size() * 2 + CONTROL_DATA_LEN;
Note: See TracChangeset
for help on using the changeset viewer.
