1LB0truetrueLOCAL:[本地寄存器]:LB05942dc1f-588b-4485-88a4-8a07f240b2f891d6efce-90c6-44a8-98ca-3d5b301a78d5254truetruetruetruetrue4ConstantLB024LW0trueWordLOCAL:[本地寄存器]:LW05942dc1f-588b-4485-88a4-8a07f240b2f8b781c462-c60c-473f-8cbb-b7f90a273df265791truetruetruetrue1true4Constant2WordLB0truetrueLOCAL:[本地寄存器]:LB05942dc1f-588b-4485-88a4-8a07f240b2f8fe46d884-2838-4b27-b7fc-f07098631817254truetruetruetruetrue4ConstantLW038LW0trueWordLOCAL:[本地寄存器]:LW05942dc1f-588b-4485-88a4-8a07f240b2f867b03913-90d2-4405-ae7f-941a191446cd65791truetruetruetrue1true4Constant3WordLB0truetrueLOCAL:[本地寄存器]:LB05942dc1f-588b-4485-88a4-8a07f240b2f871515339-861e-4335-9744-b7cabb9ead0f254truetruetruetruetrue4ConstantRW06RW0trueWordLOCAL:[本地寄存器]:RW05942dc1f-588b-4485-88a4-8a07f240b2f896e581ea-bc9c-4cd1-b094-d6e621fbf3e365789truetruetruetrue1true4Constant4WordSRBR0truetrueLOCAL:[本地寄存器]:SRBR05942dc1f-588b-4485-88a4-8a07f240b2f873d53d96-5dd4-494d-8e98-ba41396bdcd0251truetruetruetruetrue4ConstantSRW01SRW0trueWordLOCAL:[本地寄存器]:SRW05942dc1f-588b-4485-88a4-8a07f240b2f8ad5c5ee5-f442-4058-8bae-78cbecc5e5b665792truetruetruetrue1true4ConstantTestTest.ctrue#include <macro.h> #include <string.h> #include <stdio.h> // 定义常量 #define MAX_ROOMS 24 #define BUFFER_SIZE 4096 #define NAME_BUFFER_LEN 100 #define VALUE_BUFFER_LEN 20 int MacroMain() { //显示加载图片 //SetBit(@LB0@,5000,1); // 数据缓冲区 unsigned char httpRequest[BUFFER_SIZE] = {0}; unsigned char recvBuffer[BUFFER_SIZE] = {0}; // 房间信息 unsigned char nameBuffers[MAX_ROOMS][NAME_BUFFER_LEN]; unsigned short nameBuffersUtf16[MAX_ROOMS][NAME_BUFFER_LEN]; unsigned char tempStr[MAX_ROOMS][VALUE_BUFFER_LEN]; // 改为字符串 unsigned char humidityStr[MAX_ROOMS][VALUE_BUFFER_LEN]; // 改为字符串 unsigned char statusStr[MAX_ROOMS][2]; unsigned char alarmStr[MAX_ROOMS][2]; unsigned char number[7][4] = {"一","二","三","四","五","六","七"}; unsigned int week = GetDWord(@SRW0@,7); // 网络信息 unsigned char host[50] = {0}; unsigned short port = 0; unsigned int floor = 0; unsigned int NONO = 0; unsigned int KK = 0, LL = 0; int i = 0; // 设置楼层 if (GetBit(@LB0@, 1)) { floor = 1; //信标总数 SetDWord(@LW0@,1999,10); //基站总数 SetDWord(@LW0@,2000,8); //基站在线数 SetDWord(@LW0@,2001,8); //基站离线数 SetDWord(@LW0@,2002,0); //断电监测在线数 SetDWord(@LW0@,2003,12); //断电监测离线数 SetDWord(@LW0@,2004,0); } else if (GetBit(@LB0@, 2)) { floor = 2; SetDWord(@LW0@,1999,18); SetDWord(@LW0@,2000,4); //基站在线数 SetDWord(@LW0@,2001,4); //基站离线数 SetDWord(@LW0@,2002,0); //断电监测在线数 SetDWord(@LW0@,2003,17); //断电监测离线数 SetDWord(@LW0@,2004,0); } else if (GetBit(@LB0@, 3)) { floor = 3; SetDWord(@LW0@,1999,16); SetDWord(@LW0@,2000,4); //基站在线数 SetDWord(@LW0@,2001,4); //基站离线数 SetDWord(@LW0@,2002,0); //断电监测在线数 SetDWord(@LW0@,2003,10); //断电监测离线数 SetDWord(@LW0@,2004,0); } else if (GetBit(@LB0@, 4)) { floor = 4; SetDWord(@LW0@,1999,19); SetDWord(@LW0@,2000,4); //基站在线数 SetDWord(@LW0@,2001,4); //基站离线数 SetDWord(@LW0@,2002,0); //断电监测在线数 SetDWord(@LW0@,2003,8); //断电监测离线数 SetDWord(@LW0@,2004,0); } // 初始化寄存器数据 SetWord(@LW0@, 0, 0); SetWord(@LW0@, 1, 0); SetWord(@LW0@, 2, 0); // 初始化服务器地址和端口 if (GetDWord(@RW0@, 100) == 0) { const unsigned char YS1[] = "124.221.147.225"; SetMem(YS1, @RW0@, 100, strlen(YS1)); SetWord(@RW0@, 120, 58888); SetDWord(@RW0@, 122, floor); } // 获取服务器地址和端口 GetMem(host, @RW0@, 100, 40); port = GetWord(@RW0@, 120); // 构建 HTTP 请求 snprintf(httpRequest, sizeof(httpRequest), "GET /coldchain/hmi/roomMonitor?floor=%d&createOrg=1947099553009520642 HTTP/1.1\r\n" "Accept: application/json, text/plain, */*\r\n" "Accept-Language: zh-CN,zh;q=0.9\r\n" "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0\r\n" "Accept-Encoding: gzip, deflate, br, zstd\r\n" "Host: 124.221.147.225:58888\r\n" "Token: SZrN75oijJZLCgXg3K98zW4fbXT2soio\r\n" "Connection: Keep-Alive\r\n" "\r\n", floor); // 建立连接并发送请求 NONO = OpenSocket(host, port, 1); SetWord(@LW0@, 0, NONO); // 保存句柄 if (NONO >= 1000) { Debug(0, "socket opened\n"); KK = SendSocket(NONO, httpRequest, strlen(httpRequest)); SetWord(@LW0@, 1, KK); // 发送字节数 Delay(500); LL = RecvSocket(NONO, recvBuffer, sizeof(recvBuffer), 2000); SetWord(@LW0@, 20, LL); // 接收字节数 Debug(0, "Request: %s", httpRequest); Debug(0, "Response: %s", recvBuffer); for(i=0;i<MAX_ROOMS;i++){ strcpy(nameBuffers[i]," "); strcpy(tempStr[i]," "); strcpy(humidityStr[i]," "); } // 解析 JSON 数据 int index = 0; unsigned char *pos = recvBuffer; while (index < MAX_ROOMS && (pos = strstr(pos, "\"monitorName\":\"")) != NULL) { int offset = pos - recvBuffer + strlen("\"monitorName\":\""); int j = 0; unsigned char nameBuffer[NAME_BUFFER_LEN]; // 提取 roomName while (recvBuffer[offset + j] != '"' && j < NAME_BUFFER_LEN - 1) { nameBuffer[j] = recvBuffer[offset + j]; j++; } nameBuffer[j] = '\0'; strncpy(nameBuffers[index], nameBuffer, NAME_BUFFER_LEN - 1); nameBuffers[index][NAME_BUFFER_LEN - 1] = '\0'; // 转换为 UTF-16 //Utf8Str2Utf16Str(nameBuffers[index], nameBuffersUtf16[index]); // 提取 temp unsigned char *tempPos = strstr(pos, "\"temp\":"); if (tempPos) { int k = 0; int start = tempPos - recvBuffer + strlen("\"temp\":\""); while (recvBuffer[start + k] != '"'&&recvBuffer[start + k] != ',' && recvBuffer[start + k] != '}' && k < VALUE_BUFFER_LEN - 1) { tempStr[index][k] = recvBuffer[start + k]; k++; } tempStr[index][k] = '\0'; } else { strcpy(tempStr[index], "0"); } // 提取 humidity unsigned char *humidPos = strstr(pos, "\"humidity\":"); if (humidPos) { int k = 0; int start = humidPos - recvBuffer + strlen("\"humidity\":\""); while (recvBuffer[start + k] != '"'&&recvBuffer[start + k] != ',' && recvBuffer[start + k] != '}' && k < VALUE_BUFFER_LEN - 1) { humidityStr[index][k] = recvBuffer[start + k]; k++; } humidityStr[index][k] = '\0'; } else { strcpy(humidityStr[index], "0"); } // 提取 status unsigned char *statusPos = strstr(pos, "\"status\":"); if (statusPos) { int k = 0; int start = statusPos - recvBuffer + strlen("\"status\":"); while (recvBuffer[start + k] != ',' && recvBuffer[start + k] != '}' && k < VALUE_BUFFER_LEN - 1) { statusStr[index][k] = recvBuffer[start + k]; k++; } statusStr[index][k] = '\0'; } else { strcpy(statusStr[index], "1"); } // 提取 alarm unsigned char *alarmPos = strstr(pos, "\"alarm\":"); if (alarmPos) { int k = 0; int start = alarmPos - recvBuffer + strlen("\"alarm\":"); while (recvBuffer[start + k] != ',' && recvBuffer[start + k] != '}' && k < VALUE_BUFFER_LEN - 1) { alarmStr[index][k] = recvBuffer[start + k]; k++; } alarmStr[index][k] = '\0'; } else { strcpy(alarmStr[index], "0"); } index++; // 移动 pos 到当前字段结束位置,继续查找下一个 "monitorName" pos = pos + strlen("\"monitorName\":\"") + j + 1; // +1 是跳过结尾的引号 } if(index>12){ SetBit(@LB0@,2222,1); }else{ SetBit(@LB0@,2222,0); } // 写入寄存器 for (i = 0; i < 12; i++) { // 转换为 UTF-16 if(GetBit(@LB0@,10)&&index>12){ if(i+12<index){ SetBit(@LB0@,100 + i*100 + 75,1); SetBit(@LB0@,100 + i*100 + 85,1); }else{ SetBit(@LB0@,100 + i*100 + 75,0); SetBit(@LB0@,100 + i*100 + 85,0); } Utf8Str2Utf16Str(nameBuffers[i+12], nameBuffersUtf16[i+12]); SetMem(nameBuffersUtf16[i+12], @LW0@, 100 + i * 100, NAME_BUFFER_LEN / 2); SetMem(tempStr[i+12], @LW0@, 100 + i * 100 + 30, strlen(tempStr[i+12]) + 5); SetMem(humidityStr[i+12], @LW0@, 100 + i * 100 + 50, strlen(humidityStr[i+12]) + 5); if(strcmp(statusStr[i+12],"1") == 0){ SetBit(@LB0@,100 + i*100 + 70,0); }else{ SetBit(@LB0@,100 + i*100 + 70,1); } if(strcmp(alarmStr[i+12],"0") == 0){ SetBit(@LB0@,100 + i*100 + 80,0); }else{ SetBit(@LB0@,100 + i*100 + 80,1); } }else{ if(i<index){ SetBit(@LB0@,100 + i*100 + 75,1); SetBit(@LB0@,100 + i*100 + 85,1); }else{ SetBit(@LB0@,100 + i*100 + 75,0); SetBit(@LB0@,100 + i*100 + 85,0); } Utf8Str2Utf16Str(nameBuffers[i], nameBuffersUtf16[i]); SetMem(nameBuffersUtf16[i], @LW0@, 100 + i * 100, NAME_BUFFER_LEN / 2); SetMem(tempStr[i], @LW0@, 100 + i * 100 + 30, strlen(tempStr[i]) + 5); SetMem(humidityStr[i], @LW0@, 100 + i * 100 + 50, strlen(humidityStr[i]) + 5); if(strcmp(statusStr[i],"1") == 0){ SetBit(@LB0@,100 + i*100 + 70,0); }else{ SetBit(@LB0@,100 + i*100 + 70,1); } if(strcmp(alarmStr[i],"0") == 0){ SetBit(@LB0@,100 + i*100 + 80,0); }else{ SetBit(@LB0@,100 + i*100 + 80,1); } } } } SetString(@LW0@,12,UNICODE,number[floor-1]); SetString(@LW0@,7,UNICODE,number[week-1]); //关闭加载图片 SetBit(@LB0@,5000,0); // 关闭连接(建议取消注释) if (NONO >= 1000) CloseSocket(NONO); return 0; }dac4c744-389f-4d60-a8b6-9530018c86441