| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- <MacroInfo xmlns="http://schemas.flexem.com/fs/model/1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><AddressCollection><MacroAddressInfo><AddressIndex>1</AddressIndex><BitAddress><Abbreviation>LB0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><DataTypeIsVisible>true</DataTypeIsVisible><DeviceAndAbbreviation>LOCAL:[本地寄存器]:LB0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>91d6efce-90c6-44a8-98ca-3d5b301a78d5</Id><RegisterId>254</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></BitAddress><Name>LB0</Name><ReferenceCount>24</ReferenceCount><WordAddress><Abbreviation>LW0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><AddressType>Word</AddressType><DeviceAndAbbreviation>LOCAL:[本地寄存器]:LW0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>b781c462-c60c-473f-8cbb-b7f90a273df2</Id><RegisterId>65791</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCount>1</WordCount><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></WordAddress></MacroAddressInfo><MacroAddressInfo><AddressIndex>2</AddressIndex><AddressType>Word</AddressType><BitAddress><Abbreviation>LB0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><DataTypeIsVisible>true</DataTypeIsVisible><DeviceAndAbbreviation>LOCAL:[本地寄存器]:LB0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>fe46d884-2838-4b27-b7fc-f07098631817</Id><RegisterId>254</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></BitAddress><Name>LW0</Name><ReferenceCount>38</ReferenceCount><WordAddress><Abbreviation>LW0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><AddressType>Word</AddressType><DeviceAndAbbreviation>LOCAL:[本地寄存器]:LW0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>67b03913-90d2-4405-ae7f-941a191446cd</Id><RegisterId>65791</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCount>1</WordCount><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></WordAddress></MacroAddressInfo><MacroAddressInfo><AddressIndex>3</AddressIndex><AddressType>Word</AddressType><BitAddress><Abbreviation>LB0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><DataTypeIsVisible>true</DataTypeIsVisible><DeviceAndAbbreviation>LOCAL:[本地寄存器]:LB0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>71515339-861e-4335-9744-b7cabb9ead0f</Id><RegisterId>254</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></BitAddress><Name>RW0</Name><ReferenceCount>6</ReferenceCount><WordAddress><Abbreviation>RW0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><AddressType>Word</AddressType><DeviceAndAbbreviation>LOCAL:[本地寄存器]:RW0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>96e581ea-bc9c-4cd1-b094-d6e621fbf3e3</Id><RegisterId>65789</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCount>1</WordCount><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></WordAddress></MacroAddressInfo><MacroAddressInfo><AddressIndex>4</AddressIndex><AddressType>Word</AddressType><BitAddress><Abbreviation>SRBR0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><DataTypeIsVisible>true</DataTypeIsVisible><DeviceAndAbbreviation>LOCAL:[本地寄存器]:SRBR0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>73d53d96-5dd4-494d-8e98-ba41396bdcd0</Id><RegisterId>251</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></BitAddress><Name>SRW0</Name><ReferenceCount>1</ReferenceCount><WordAddress><Abbreviation>SRW0</Abbreviation><AddressLabelIsVisible>true</AddressLabelIsVisible><AddressType>Word</AddressType><DeviceAndAbbreviation>LOCAL:[本地寄存器]:SRW0</DeviceAndAbbreviation><DeviceId>5942dc1f-588b-4485-88a4-8a07f240b2f8</DeviceId><Id>ad5c5ee5-f442-4058-8bae-78cbecc5e5b6</Id><RegisterId>65792</RegisterId><SpeedIsVisible>true</SpeedIsVisible><SysRegIsEnabled>true</SysRegIsEnabled><SysRegIsVisible>true</SysRegIsVisible><UseStationReferenceIsVisible>true</UseStationReferenceIsVisible><WordCount>1</WordCount><WordCountIsVisible>true</WordCountIsVisible><Version>4</Version><TagName/><NewSubAddressIndexType>Constant</NewSubAddressIndexType></WordAddress></MacroAddressInfo></AddressCollection><Description/><Name>Test</Name><NameWithSuffix>Test.c</NameWithSuffix><NeedRebuild>true</NeedRebuild><SourceCode>#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]) + 7);
- SetMem(humidityStr[i+12], @LW0@, 100 + i * 100 + 50, strlen(humidityStr[i+12]) + 7);
- 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]) + 7);
- SetMem(humidityStr[i], @LW0@, 100 + i * 100 + 50, strlen(humidityStr[i]) + 7);
- 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;
- }</SourceCode><UniqueId>dac4c744-389f-4d60-a8b6-9530018c8644</UniqueId><Version>1</Version></MacroInfo>
|