diff --git a/README.md b/README.md index 9d211c7..1683192 100644 --- a/README.md +++ b/README.md @@ -8,100 +8,9 @@ More detail will be added and real time testing is required. To connect to Modbus and read information onto an SD card using an Arduino. -### Hardware needed: +### PM8000 Meter +See the information on the Schneider PowerLogic PM8000 [Source Code](https://git.warky.dev/vivarox/arduino/src/branch/main/firmware/modbus-sd/modbus-sd-pm8000/modbus-sd-pm8000.md). -1. Arduino Board - - Recommended: Arduino MEGA 2560 (for more memory and I/O pins) or Arduino UNO (for simpler). - - - [Arduino MEGA @ R377.20](https://www.robotics.org.za/MEGA-16U2?search=Arduino%20MEGA%202560) - - [UNO R3 with 16U2 USB Interface @ R151.00](https://www.robotics.org.za/UNOR3-16U2?search=%20Arduino%20UNO) - -2. RS485 to TTL Module - - Allows communication between the Arduino and Modbus devices using the RS485 protocol. - - - [RS485 Module (TTL -> RS485) @ R25.30](https://www.robotics.org.za/RS485-MOD) - - [MAX485 Bus Transceiver (4 Pack) @ R16.00](https://www.robotics.org.za/MAX485-DIP?search=MAX485) - -3. SD Card Module - - Allows the Arduino to read from and write data to an SD card. - Standard SD card module that interfaces via SPI (Serial Peripheral Interface). - - - [Micro SD Card Module @ R25.00](https://www.diyelectronics.co.za/store/memory/512-micro-sd-card-module.html?srsltid=AfmBOoptww8c6kx53xbZWiP2_C_qOE3r9xinyoCO-AZHrZkNQiyxU17c) - -4. RTC Module - To keep track of the current date and time, even when the Arduino is powered off. This will allow your Arduino to timestamp the data it reads from Modbus and writes to the SD card. - - - [DS3231 Real Time Clock Module @ R55.20](https://www.robotics.org.za/DS3231-MOD?search=DS3231) - -5. Power Supply / Batteries - - To power the Arduino and connected peripherals (RS485 module and SD card module). - - - [AC Adapter 9V with barrel jack @ R60](https://www.robotics.org.za/AC-9V-2A-2155?search=%20Power%20Supply) - - [Panasonic CR2032 3V 225mAh Coin Cell Battery (5 Pack) @ R43.00](https://www.robotics.org.za/CR2032) - -### Wiring - -#### RS485 Module to Arduino: - -1. RO (Receiver Output) to Arduino RX -2. DI (Driver Input) to Arduino TX -3. DE (Driver Enable) & RE (Receiver Enable) to an Arduino digital pin (control this pin in the code to switch between sending and receiving). -4. VCC to 5V on Arduino -5. GND to GND on Arduino -6. A & B (RS485 differential pair) to Modbus device. - -#### SD Card Module to Arduino: - -1. VCC to 5V on Arduino -2. GND to GND on Arduino -3. MOSI to MOSI (pin 51 on MEGA, pin 11 on UNO) -4. MISO to MISO (pin 50 on MEGA, pin 12 on UNO) -5. SCK to SCK (pin 52 on MEGA, pin 13 on UNO) -6. CS (Chip Select) to any available digital pin (e.g., pin 4). - -#### Wiring the RTC Module - -1. VCC to 5V on the Arduino. -2. GND to GND on the Arduino. -3. SDA to SDA (pin 20 on MEGA, pin A4 on UNO). -4. SCL to SCL (pin 21 on MEGA, pin A5 on UNO). - -### Software - -- Modbus Library: SimpleModbus or ModbusMaster. -- SD Library: The Arduino IDE comes with an SD library for interfacing with the SD card. -- RTC Library: Use the RTClib by Adafruit, which is compatible with both DS3231 and DS1307 modules. - -#### Programming Workflow - -- Initialize Modbus Communication: -- Initialize RTC Module: Set up the RTC to ensure it has the correct time. -- Use the Modbus library to set up communication parameters (e.g., baud rate, parity). -- Read Data from Modbus: -- Use the Modbus library to read the required data from the Modbus registers (e.g., meters, input registers). -- Get the Current Time from the RTC: Get the current date and time for logging. -- Write Data to SD Card: -- Use the SD library to open a file on the SD card, write the Modbus data, and then close the file. - -#### Arduino Source Examples - -[Example Arduino Prototype](https://git.warky.dev/wdevs/vivarox-ems-modbus/src/branch/main/Arduino/basic_read.cpp) - -#### Addition Software Notes - -- Ability to reset and write logs to newly inserted SD card. -- Writing to files stamped by day. - -## Costs - -This estimated cost of the hardware from supplier like Micro Robotics, excluding the labour to assemble: - -R617.00 per unit using the Arduino MEGA -R374,5 per unit using the Arduino UNO ## Raspberry Pi Option: diff --git a/docs/800C GSM Module/AT Command Sets.pdf b/docs/800C GSM Module/AT Command Sets.pdf new file mode 100644 index 0000000..4449ec9 Binary files /dev/null and b/docs/800C GSM Module/AT Command Sets.pdf differ diff --git a/docs/800C GSM Module/SIM800C_Datasheet.pdf b/docs/800C GSM Module/SIM800C_Datasheet.pdf new file mode 100644 index 0000000..8a6b025 Binary files /dev/null and b/docs/800C GSM Module/SIM800C_Datasheet.pdf differ diff --git a/docs/800C GSM Module/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf b/docs/800C GSM Module/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf new file mode 100644 index 0000000..c62b47a --- /dev/null +++ b/docs/800C GSM Module/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf @@ -0,0 +1,2478 @@ +%PDF-1.4 +%ºß¬à +3 0 obj +<> +endobj +4 0 obj +<< +/Length 29664 +>> +stream +0.20 w +0 G +2 J +0 j +100 M +1.00 g +[] 0 d +0.00 827.00 1169.00 -827.00 re +f +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +216.000 806.500 m +216.000 816.500 l +216.000 20.500 m +216.000 10.500 l +412.000 806.500 m +412.000 816.500 l +412.000 20.500 m +412.000 10.500 l +608.000 806.500 m +608.000 816.500 l +608.000 20.500 m +608.000 10.500 l +804.000 806.500 m +804.000 816.500 l +804.000 20.500 m +804.000 10.500 l +1000.000 806.500 m +1000.000 816.500 l +1000.000 20.500 m +1000.000 10.500 l +20.000 610.500 m +10.000 610.500 l +1149.000 610.500 m +1159.000 610.500 l +20.000 414.500 m +10.000 414.500 l +1149.000 414.500 m +1159.000 414.500 l +20.000 218.500 m +10.000 218.500 l +1149.000 218.500 m +1159.000 218.500 l +20.000 22.500 m +10.000 22.500 l +1149.000 22.500 m +1159.000 22.500 l +S +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 708.50 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 708.50 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 512.50 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 512.50 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 316.50 Td +(C) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 316.50 Td +(C) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 120.50 Td +(D) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 120.50 Td +(D) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 808.00 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 12.00 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 808.00 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 12.00 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 808.00 Td +(3) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 12.00 Td +(3) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +706.00 808.00 Td +(4) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +706.00 12.00 Td +(4) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +902.00 808.00 Td +(5) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +902.00 12.00 Td +(5) Tj +ET +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +20.00 806.50 1129.00 -786.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +10.00 816.50 1149.00 -806.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +705.00 100.50 444.00 -80.00 re +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +705.100 61.250 m +1148.630 61.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +809.630 41.250 m +1148.630 41.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +1069.610 100.430 m +1069.630 61.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +1069.630 61.250 m +1069.630 41.250 l +S +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +710.00 87.50 Td +(TITLE:) Tj +ET +10.00 w +BT +/F1 13 Tf +13.00 TL +0.000 0.000 1.000 rg +767.62 74.91 Td +(SIM800C INTERFACED WITH ESP32) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +1074.62 74.25 Td +(REV:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1112.62 74.25 Td +(1.0) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +814.62 25.50 Td +(Date:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +861.62 25.02 Td +(2021-11-16) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +1073.62 45.50 Td +(Sheet:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1118.62 45.02 Td +(1/1) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +953.62 25.25 Td +(Drawn By:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1018.63 25.25 Td +(LUCIENNE SWART) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +814.62 47.25 Td +(Company:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +881.25 47.14 Td +(MICRO ROBOTICS) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +809.630 61.250 m +809.630 21.250 l +S +0.33 0.53 1.00 rg +[] 0 d +760.394 39.065 m +760.535 39.171 760.707 39.223 760.904 39.223 c +761.168 39.223 761.451 39.130 761.752 38.948 c +762.053 38.766 762.342 38.480 762.618 38.087 c +763.687 39.721 l +763.355 40.178 762.944 40.535 762.446 40.787 c +761.948 41.039 761.420 41.162 760.867 41.162 c +760.081 41.162 759.393 40.933 758.815 40.477 c +758.238 40.020 757.949 39.422 757.949 38.696 c +757.949 38.175 758.133 37.677 758.502 37.209 c +758.766 36.875 759.245 36.471 759.933 36.002 c +760.529 35.598 760.898 35.317 761.033 35.159 c +761.168 35.001 761.236 34.848 761.236 34.696 c +761.236 34.509 761.150 34.351 760.972 34.210 c +760.793 34.075 760.560 34.005 760.265 34.005 c +759.522 34.005 758.834 34.398 758.207 35.188 c +756.825 33.654 l +757.439 33.033 757.998 32.600 758.496 32.365 c +758.993 32.131 759.552 32.014 760.161 32.014 c +761.217 32.014 762.022 32.301 762.581 32.875 c +763.140 33.449 763.417 34.064 763.417 34.708 c +763.417 35.200 763.281 35.651 763.011 36.072 c +762.741 36.488 762.176 36.992 761.316 37.578 c +760.775 37.947 760.456 38.193 760.351 38.321 c +760.241 38.450 760.185 38.579 760.185 38.708 c +760.179 38.843 760.253 38.960 760.394 39.065 c +h +f +0.33 0.53 1.00 rg +[] 0 d +745.024 39.475 m +740.699 39.475 l +741.055 41.917 l +741.055 41.917 745.644 41.923 745.669 41.923 c +746.271 41.923 746.762 42.392 746.762 42.966 c +746.762 43.540 746.271 44.008 745.669 44.008 c +745.650 44.008 739.009 44.008 739.009 44.008 c +737.314 32.236 l +744.268 32.236 l +744.268 32.236 l +744.852 32.248 745.325 32.705 745.325 33.261 c +745.325 33.829 744.839 34.292 744.243 34.292 c +744.219 34.292 739.931 34.286 739.931 34.286 c +740.385 37.408 l +740.385 37.408 744.790 37.402 744.827 37.402 c +745.429 37.402 745.921 37.870 745.921 38.444 c +745.933 38.966 745.540 39.393 745.024 39.475 c +h +f +0.33 0.53 1.00 rg +[] 0 d +782.922 44.002 m +782.903 44.002 776.262 44.002 776.262 44.002 c +774.579 32.242 l +781.539 32.242 l +781.539 32.242 l +782.123 32.254 782.596 32.711 782.596 33.267 c +782.596 33.835 782.111 34.298 781.515 34.298 c +781.490 34.298 777.202 34.292 777.202 34.292 c +777.657 37.414 l +777.657 37.414 782.062 37.408 782.105 37.408 c +782.707 37.408 783.198 37.876 783.198 38.450 c +783.198 38.966 782.805 39.393 782.289 39.475 c +777.964 39.475 l +778.320 41.917 l +778.320 41.917 782.909 41.923 782.934 41.923 c +783.536 41.923 784.027 42.392 784.027 42.966 c +784.015 43.534 783.530 44.002 782.922 44.002 c +h +f +0.33 0.53 1.00 rg +[] 0 d +795.350 38.368 m +795.350 39.522 795.067 40.547 794.508 41.431 c +793.949 42.316 793.224 42.966 792.327 43.376 c +791.430 43.791 790.072 43.996 788.236 43.996 c +786.282 43.996 l +784.599 32.236 l +788.432 32.236 l +790.042 32.236 791.301 32.465 792.204 32.922 c +793.107 33.378 793.863 34.105 794.459 35.094 c +795.055 36.090 795.350 37.179 795.350 38.368 c +h +792.315 35.938 m +791.866 35.294 791.277 34.837 790.539 34.573 c +790.011 34.386 789.163 34.292 787.990 34.292 c +787.228 34.292 l +788.315 41.929 l +788.899 41.929 l +789.851 41.929 790.613 41.788 791.184 41.501 c +791.756 41.214 792.198 40.810 792.517 40.283 c +792.831 39.756 792.990 39.106 792.990 38.327 c +792.984 37.384 792.763 36.582 792.315 35.938 c +h +f +0.33 0.53 1.00 rg +[] 0 d +804.472 38.503 m +803.102 37.783 l +802.992 36.834 802.144 36.102 801.124 36.102 c +800.025 36.102 799.134 36.951 799.134 37.999 c +799.134 39.048 800.025 39.897 801.124 39.897 c +801.548 39.897 801.941 39.768 802.261 39.557 c +803.962 40.453 l +803.041 43.979 l +801.094 43.979 l +794.459 32.266 l +796.941 32.266 l +798.341 34.761 l +803.219 34.761 l +803.870 32.266 l +806.106 32.266 l +804.472 38.503 l +h +f +0.33 0.53 1.00 rg +[] 0 d +800.393 38.046 m +800.393 37.642 800.737 37.314 801.161 37.314 c +801.585 37.314 801.929 37.642 801.929 38.046 c +801.929 38.450 801.585 38.778 801.161 38.778 c +800.737 38.778 800.393 38.450 800.393 38.046 c +h +f +0.33 0.53 1.00 rg +[] 0 d +755.056 39.569 m +755.056 39.569 755.056 39.575 755.056 39.569 c +754.288 39.569 l +754.208 39.709 l +753.895 40.184 753.501 40.541 753.028 40.787 c +752.549 41.033 751.793 41.156 751.228 41.156 c +750.387 41.156 749.582 40.939 748.814 40.506 c +748.046 40.072 747.432 39.469 746.977 38.690 c +746.523 37.917 746.289 37.097 746.289 36.242 c +746.289 35.118 746.645 34.134 747.358 33.285 c +748.071 32.436 749.035 32.014 750.245 32.014 c +750.774 32.014 751.247 32.096 751.671 32.272 c +752.095 32.441 752.549 32.740 753.034 33.173 c +753.034 33.173 753.606 32.699 753.612 32.705 c +753.968 32.436 754.411 32.266 754.890 32.236 c +755.111 32.236 l +755.142 32.488 l +755.922 38.749 l +755.916 38.749 755.916 38.749 755.910 38.749 c +755.910 39.200 755.529 39.563 755.056 39.569 c +h +753.262 35.370 m +752.985 34.872 752.641 34.503 752.230 34.269 c +751.818 34.034 751.339 33.917 750.786 33.917 c +750.123 33.917 749.582 34.122 749.158 34.544 c +748.734 34.960 748.525 35.510 748.525 36.190 c +748.525 37.074 748.802 37.794 749.361 38.357 c +749.920 38.919 750.596 39.194 751.394 39.194 c +752.082 39.194 752.635 38.983 753.053 38.567 c +753.471 38.146 753.679 37.595 753.679 36.904 c +753.679 36.383 753.538 35.867 753.262 35.370 c +h +f +0.33 0.53 1.00 rg +[] 0 d +729.837 42.860 m +729.377 44.026 728.627 45.074 727.638 45.923 c +726.121 47.223 724.155 47.944 722.109 47.944 c +720.340 47.944 718.650 47.417 717.225 46.421 c +716.537 45.941 715.941 45.373 715.450 44.728 c +715.143 44.769 714.829 44.793 714.510 44.793 c +712.747 44.793 711.082 44.137 709.835 42.948 c +708.588 41.759 707.900 40.178 707.900 38.491 c +707.900 36.928 708.508 35.428 709.607 34.269 c +710.480 33.349 711.610 32.699 712.857 32.395 c +713.398 30.860 714.921 29.753 716.709 29.753 c +718.951 29.753 720.776 31.493 720.776 33.630 c +720.776 33.753 720.770 33.882 720.758 34.005 c +726.465 36.863 l +725.218 38.925 l +719.762 36.195 l +719.019 37.004 717.925 37.513 716.709 37.513 c +714.946 37.513 713.441 36.436 712.876 34.936 c +711.438 35.540 710.431 36.904 710.431 38.497 c +710.431 40.641 712.255 42.386 714.510 42.386 c +715.302 42.386 716.046 42.169 716.672 41.794 c +717.428 43.967 719.578 45.537 722.109 45.537 c +725.058 45.537 727.478 43.417 727.804 40.693 c +727.908 40.705 728.013 40.711 728.117 40.711 c +729.880 40.711 731.312 39.346 731.312 37.665 c +731.312 36.072 730.028 34.766 728.394 34.632 c +726.569 34.632 l +726.489 34.649 726.403 34.655 726.317 34.655 c +725.611 34.655 725.039 34.111 725.039 33.437 c +725.039 32.799 725.555 32.277 726.213 32.225 c +726.213 32.213 l +728.394 32.213 l +728.504 32.213 l +728.615 32.225 l +730.040 32.342 731.361 32.957 732.332 33.964 c +733.308 34.977 733.849 36.289 733.849 37.665 c +733.849 40.090 732.159 42.163 729.837 42.860 c +h +716.709 35.130 m +717.575 35.130 718.282 34.456 718.282 33.630 c +718.282 32.805 717.575 32.131 716.709 32.131 c +715.843 32.131 715.136 32.805 715.136 33.630 c +715.136 34.456 715.843 35.130 716.709 35.130 c +h +f +0.33 0.53 1.00 rg +[] 0 d +768.810 35.780 m +767.035 40.939 l +764.836 40.939 l +767.404 33.425 l +764.811 29.056 l +767.176 29.056 l +774.346 40.939 l +771.931 40.939 l +f +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +215.00 735.50 Td +(U1) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 527.75 Td +(5V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 531.75 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 530.500 m +155.000 530.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 537.75 Td +(CMD\(GPIO11\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 541.75 Td +(2) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 540.500 m +155.000 540.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 547.75 Td +(SD3\(GPIO10\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 551.75 Td +(3) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 550.500 m +155.000 550.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 557.75 Td +(SD2\(GPIO9\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 561.75 Td +(4) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 560.500 m +155.000 560.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 567.75 Td +(P13) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 571.75 Td +(5) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 570.500 m +155.000 570.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 577.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 581.75 Td +(6) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 580.500 m +155.000 580.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 587.75 Td +(P12) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 591.75 Td +(7) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 590.500 m +155.000 590.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 597.75 Td +(P14) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 601.75 Td +(8) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 600.500 m +155.000 600.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 607.75 Td +(P27) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 611.75 Td +(9) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 610.500 m +155.000 610.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 617.75 Td +(P26) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 621.75 Td +(10) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 620.500 m +155.000 620.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 627.75 Td +(P25) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 631.75 Td +(11) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 630.500 m +155.000 630.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 637.75 Td +(P33) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 641.75 Td +(12) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 640.500 m +155.000 640.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 647.75 Td +(P32) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 651.75 Td +(13) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 650.500 m +155.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 657.75 Td +(P35) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 661.75 Td +(14) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 660.500 m +155.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 667.75 Td +(P34) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 671.75 Td +(15) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 670.500 m +155.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 677.75 Td +(SVN\(GPIO39\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 681.75 Td +(16) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 680.500 m +155.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 687.75 Td +(SVP\(GPIO36\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 691.75 Td +(17) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 690.500 m +155.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 697.75 Td +(EN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 701.75 Td +(18) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 700.500 m +155.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 707.75 Td +(3.3V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 711.75 Td +(19) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 710.500 m +155.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +238.53 527.75 Td +(CLK\(GPIO6\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 531.75 Td +(20) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 530.500 m +295.000 530.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +237.25 537.75 Td +(SD0\(GPIO7\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 541.75 Td +(21) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 540.500 m +295.000 540.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +237.25 547.75 Td +(SD1\(GPIO8\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 551.75 Td +(22) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 550.500 m +295.000 550.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 557.75 Td +(P15) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 561.75 Td +(23) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 560.500 m +295.000 560.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 567.75 Td +(P2) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 571.75 Td +(24) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 570.500 m +295.000 570.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 577.75 Td +(P0) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 581.75 Td +(25) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 580.500 m +295.000 580.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 587.75 Td +(P4) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 591.75 Td +(26) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 590.500 m +295.000 590.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 597.75 Td +(P16) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 601.75 Td +(27) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 600.500 m +295.000 600.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 607.75 Td +(P17) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 611.75 Td +(28) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 610.500 m +295.000 610.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 617.75 Td +(P5) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 621.75 Td +(29) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 620.500 m +295.000 620.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 627.75 Td +(P18) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 631.75 Td +(30) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 630.500 m +295.000 630.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 637.75 Td +(P19) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 641.75 Td +(31) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 640.500 m +295.000 640.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +272.56 647.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 651.75 Td +(32) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 650.500 m +295.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 657.75 Td +(P21) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 661.75 Td +(33) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 660.500 m +295.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +243.62 667.75 Td +(RX\(GPIO3\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 671.75 Td +(34) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 670.500 m +295.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +244.33 677.75 Td +(TX\(GPIO1\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 681.75 Td +(35) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 680.500 m +295.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 687.75 Td +(P22) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 691.75 Td +(36) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 690.500 m +295.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 697.75 Td +(P23) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 701.75 Td +(37) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 700.500 m +295.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +272.56 707.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 711.75 Td +(38) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 710.500 m +295.000 710.500 l +S +2 J +0 j +100 M +1.00 w +0.00 G +[] 0 d +155.00 720.50 140.80 -201.75 re +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +170.00 725.50 Td +(AI-Thinker ESP-32) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +675.55 732.16 Td +(SIM800C) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +689.03 742.63 Td +(U2) Tj +ET +2 J +0 j +100 M +1.00 w +0.00 G +[] 0 d +635.00 730.50 120.00 -90.00 re +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 717.50 Td +(5V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 721.50 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 720.500 m +635.000 720.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 707.50 Td +(V_TTL) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 711.50 Td +(2) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 710.500 m +635.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 697.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 701.50 Td +(3) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 700.500 m +635.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 687.50 Td +(TXD) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 691.50 Td +(4) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 690.500 m +635.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 677.50 Td +(RXD) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 681.50 Td +(5) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 680.500 m +635.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 667.50 Td +(DTR) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 671.50 Td +(6) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 670.500 m +635.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 657.50 Td +(SPKP) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 661.50 Td +(7) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 660.500 m +635.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 647.50 Td +(SPKN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 651.50 Td +(8) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 650.500 m +635.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +728.63 647.50 Td +(MICN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 651.50 Td +(9) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 650.500 m +755.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +729.93 657.50 Td +(MICP) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 661.50 Td +(10) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 660.500 m +755.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +742.97 667.50 Td +(RI) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 671.50 Td +(11) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 670.500 m +755.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +728.77 677.50 Td +(VRTC) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 681.50 Td +(12) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 680.500 m +755.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.36 687.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 691.50 Td +(13) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 690.500 m +755.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.52 697.50 Td +(PWX) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 701.50 Td +(14) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 700.500 m +755.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.36 707.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 711.50 Td +(15) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 710.500 m +755.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +729.00 717.50 Td +(VBAT) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 721.50 Td +(16) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 720.500 m +755.000 720.500 l +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +-0.00 -1.00 1.00 -0.00 690.27 717.81 Tm +(SIM800C) Tj +ET +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 559.58 725.50 Tm +(3V3) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 730.500 m +595.000 725.500 l +580.000 725.500 l +580.000 735.500 l +595.000 735.500 l +600.000 730.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 730.500 m +600.000 710.500 l +615.000 710.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 430.08 735.50 Tm +(5V) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +465.000 740.500 m +460.000 735.500 l +445.000 735.500 l +445.000 745.500 l +460.000 745.500 l +465.000 740.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +465.000 740.500 m +615.000 740.500 l +615.000 720.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 543.44 686.89 Tm +(GPIO16) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 690.500 m +595.000 685.500 l +580.000 685.500 l +580.000 695.500 l +595.000 695.500 l +600.000 690.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 543.44 676.89 Tm +(GPIO17) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 680.500 m +595.000 675.500 l +580.000 675.500 l +580.000 685.500 l +595.000 685.500 l +600.000 680.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 357.50 608.63 Tm +(GPIO17) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +335.000 610.500 m +340.000 615.500 l +355.000 615.500 l +355.000 605.500 l +340.000 605.500 l +335.000 610.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 357.50 598.63 Tm +(GPIO16) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +335.000 600.500 m +340.000 605.500 l +355.000 605.500 l +355.000 595.500 l +340.000 595.500 l +335.000 600.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 600.500 m +335.000 600.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 610.500 m +335.000 610.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 690.500 m +615.000 690.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 680.500 m +615.000 680.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +775.000 690.500 m +785.000 690.500 l +785.000 700.500 l +775.000 700.500 l +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 322.00 684.50 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +335.000 700.500 m +335.000 710.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +326.000 700.500 m +344.000 700.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +329.000 698.500 m +341.000 698.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +332.000 696.500 m +338.000 696.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +334.000 694.500 m +336.000 694.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 710.500 m +335.000 710.500 l +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 415.50 Td +(NOTES) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 400.50 Td +(1. 2A DRAW ON 5V, DO NOT USE ESP32 TO POWER) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 385.50 Td +(2. 100uF and 10uF tantalum capacitors over 5V and GND) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 370.50 Td +(3. For the module to start immediately when switched on, PWX is shorted to GND) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 355.50 Td +(4. V_TTL sets voltage of logic, 3V3 for ESP32 and 5V for Arduino UNO) Tj +ET +2 J +0 j +100 M +1.00 w +0.00 G +[6.000 6.000] 0 d +35.00 790.50 375.00 -335.00 re +S +2 J +0 j +100 M +1.00 w +0.00 G +[6.000 6.000] 0 d +425.00 790.50 370.00 -200.00 re +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 432.00 629.50 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +445.000 645.500 m +445.000 655.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +436.000 645.500 m +454.000 645.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +439.000 643.500 m +451.000 643.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +442.000 641.500 m +448.000 641.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +444.000 639.500 m +446.000 639.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +445.000 655.500 m +445.000 700.500 l +615.000 700.500 l +S +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +487.00 708.31 Td +(100uF) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +487.00 717.17 Td +(C1) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 740.500 m +475.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 700.500 m +475.000 719.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +485.000 723.500 m +465.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 719.500 m +471.43 719.64 467.91 718.58 465.00 716.50 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +485.000 716.500 m +482.09 718.57 478.57 719.62 475.00 719.50 c +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +478.00 728.50 4.00 -0.10 re +B +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +479.90 730.50 0.10 -4.00 re +B +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +542.00 708.13 Td +(10uF) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +542.00 717.28 Td +(C2) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 740.500 m +530.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 700.500 m +530.000 719.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +540.000 723.500 m +520.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 719.500 m +526.43 719.64 522.91 718.58 520.00 716.50 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +540.000 716.500 m +537.09 718.57 533.57 719.62 530.00 719.50 c +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +533.00 728.50 4.00 -0.10 re +B +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +534.90 730.50 0.10 -4.00 re +B +0.80 0.00 0.00 rg +532.50 740.50 m 532.50 741.88 531.38 743.00 530.00 743.00 c +528.62 743.00 527.50 741.88 527.50 740.50 c +527.50 739.12 528.62 738.00 530.00 738.00 c +531.38 738.00 532.50 739.12 532.50 740.50 c +f +0.80 0.00 0.00 rg +532.50 700.50 m 532.50 701.88 531.38 703.00 530.00 703.00 c +528.62 703.00 527.50 701.88 527.50 700.50 c +527.50 699.12 528.62 698.00 530.00 698.00 c +531.38 698.00 532.50 699.12 532.50 700.50 c +f +0.80 0.00 0.00 rg +477.50 740.50 m 477.50 741.88 476.38 743.00 475.00 743.00 c +473.62 743.00 472.50 741.88 472.50 740.50 c +472.50 739.12 473.62 738.00 475.00 738.00 c +476.38 738.00 477.50 739.12 477.50 740.50 c +f +0.80 0.00 0.00 rg +477.50 700.50 m 477.50 701.88 476.38 703.00 475.00 703.00 c +473.62 703.00 472.50 701.88 472.50 700.50 c +472.50 699.12 473.62 698.00 475.00 698.00 c +476.38 698.00 477.50 699.12 477.50 700.50 c +f +endstream +endobj +1 0 obj +<> +endobj +5 0 obj +<< +/Descent -209 +/CapHeight 727 +/StemV 0 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-559 -303 1446 1050] +/FontName /Verdana +/ItalicAngle 0 +/Ascent 1005 +>> +endobj +6 0 obj +<> +endobj +7 0 obj +<< +/Descent -325 +/CapHeight 500 +/StemV 80 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-665 -325 2000 1006] +/FontName /Arial +/ItalicAngle 0 +/Ascent 1006 +>> +endobj +8 0 obj +<> +endobj +9 0 obj +<< +/Type /Font +/BaseFont /Times-Roman +/Subtype /Type1 +/Encoding /WinAnsiEncoding +/FirstChar 32 +/LastChar 255 +>> +endobj +2 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << +/F1 6 0 R +/F2 8 0 R +/F3 9 0 R +>> +/XObject << +>> +>> +endobj +10 0 obj +<< +/Producer (jsPDF 0.0.0) +/CreationDate (D:20211116111213+02'00') +>> +endobj +11 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/OpenAction [3 0 R /FitH null] +/PageLayout /OneColumn +>> +endobj +xref +0 12 +0000000000 65535 f +0000029842 00000 n +0000032463 00000 n +0000000015 00000 n +0000000125 00000 n +0000029899 00000 n +0000030069 00000 n +0000031123 00000 n +0000031292 00000 n +0000032336 00000 n +0000032587 00000 n +0000032673 00000 n +trailer +<< +/Size 12 +/Root 11 0 R +/Info 10 0 R +/ID [ <63A38F1DA032D2C5C58A2C9AD8739BA1> <63A38F1DA032D2C5C58A2C9AD8739BA1> ] +>> +startxref +32777 +%%EOF \ No newline at end of file diff --git a/docs/SIM800/AT Command Sets.pdf b/docs/SIM800/AT Command Sets.pdf new file mode 100644 index 0000000..4449ec9 Binary files /dev/null and b/docs/SIM800/AT Command Sets.pdf differ diff --git a/docs/SIM800/SIM800 Series_AT Command Manual_V1.09.pdf b/docs/SIM800/SIM800 Series_AT Command Manual_V1.09.pdf new file mode 100644 index 0000000..aabadf4 Binary files /dev/null and b/docs/SIM800/SIM800 Series_AT Command Manual_V1.09.pdf differ diff --git a/docs/SIM800/SIM800 Series_GNSS_Application Note V1.00.pdf b/docs/SIM800/SIM800 Series_GNSS_Application Note V1.00.pdf new file mode 100644 index 0000000..5415919 Binary files /dev/null and b/docs/SIM800/SIM800 Series_GNSS_Application Note V1.00.pdf differ diff --git a/docs/SIM800/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf b/docs/SIM800/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf new file mode 100644 index 0000000..c62b47a --- /dev/null +++ b/docs/SIM800/Schematic_SIM800C Interfaced with ESP32_2021-11-16.pdf @@ -0,0 +1,2478 @@ +%PDF-1.4 +%ºß¬à +3 0 obj +<> +endobj +4 0 obj +<< +/Length 29664 +>> +stream +0.20 w +0 G +2 J +0 j +100 M +1.00 g +[] 0 d +0.00 827.00 1169.00 -827.00 re +f +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +216.000 806.500 m +216.000 816.500 l +216.000 20.500 m +216.000 10.500 l +412.000 806.500 m +412.000 816.500 l +412.000 20.500 m +412.000 10.500 l +608.000 806.500 m +608.000 816.500 l +608.000 20.500 m +608.000 10.500 l +804.000 806.500 m +804.000 816.500 l +804.000 20.500 m +804.000 10.500 l +1000.000 806.500 m +1000.000 816.500 l +1000.000 20.500 m +1000.000 10.500 l +20.000 610.500 m +10.000 610.500 l +1149.000 610.500 m +1159.000 610.500 l +20.000 414.500 m +10.000 414.500 l +1149.000 414.500 m +1159.000 414.500 l +20.000 218.500 m +10.000 218.500 l +1149.000 218.500 m +1159.000 218.500 l +20.000 22.500 m +10.000 22.500 l +1149.000 22.500 m +1159.000 22.500 l +S +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 708.50 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 708.50 Td +(A) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 512.50 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 512.50 Td +(B) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 316.50 Td +(C) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 316.50 Td +(C) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +11.50 120.50 Td +(D) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +1150.50 120.50 Td +(D) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 808.00 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +118.00 12.00 Td +(1) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 808.00 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +314.00 12.00 Td +(2) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 808.00 Td +(3) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +510.00 12.00 Td +(3) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +706.00 808.00 Td +(4) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +706.00 12.00 Td +(4) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +902.00 808.00 Td +(5) Tj +ET +10.00 w +BT +/F1 9 Tf +9.00 TL +0.533 0.000 0.000 rg +902.00 12.00 Td +(5) Tj +ET +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +20.00 806.50 1129.00 -786.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +10.00 816.50 1149.00 -806.00 re +S +2 J +0 j +100 M +1.00 w +0.53 0.00 0.00 RG +[] 0 d +705.00 100.50 444.00 -80.00 re +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +705.100 61.250 m +1148.630 61.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +809.630 41.250 m +1148.630 41.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +1069.610 100.430 m +1069.630 61.250 l +S +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +1069.630 61.250 m +1069.630 41.250 l +S +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +710.00 87.50 Td +(TITLE:) Tj +ET +10.00 w +BT +/F1 13 Tf +13.00 TL +0.000 0.000 1.000 rg +767.62 74.91 Td +(SIM800C INTERFACED WITH ESP32) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +1074.62 74.25 Td +(REV:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1112.62 74.25 Td +(1.0) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +814.62 25.50 Td +(Date:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +861.62 25.02 Td +(2021-11-16) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +1073.62 45.50 Td +(Sheet:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1118.62 45.02 Td +(1/1) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +953.62 25.25 Td +(Drawn By:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +1018.63 25.25 Td +(LUCIENNE SWART) Tj +ET +10.00 w +BT +/F1 11 Tf +11.00 TL +0.533 0.000 0.000 rg +814.62 47.25 Td +(Company:) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +881.25 47.14 Td +(MICRO ROBOTICS) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +0.00 g +[] 0 d +809.630 61.250 m +809.630 21.250 l +S +0.33 0.53 1.00 rg +[] 0 d +760.394 39.065 m +760.535 39.171 760.707 39.223 760.904 39.223 c +761.168 39.223 761.451 39.130 761.752 38.948 c +762.053 38.766 762.342 38.480 762.618 38.087 c +763.687 39.721 l +763.355 40.178 762.944 40.535 762.446 40.787 c +761.948 41.039 761.420 41.162 760.867 41.162 c +760.081 41.162 759.393 40.933 758.815 40.477 c +758.238 40.020 757.949 39.422 757.949 38.696 c +757.949 38.175 758.133 37.677 758.502 37.209 c +758.766 36.875 759.245 36.471 759.933 36.002 c +760.529 35.598 760.898 35.317 761.033 35.159 c +761.168 35.001 761.236 34.848 761.236 34.696 c +761.236 34.509 761.150 34.351 760.972 34.210 c +760.793 34.075 760.560 34.005 760.265 34.005 c +759.522 34.005 758.834 34.398 758.207 35.188 c +756.825 33.654 l +757.439 33.033 757.998 32.600 758.496 32.365 c +758.993 32.131 759.552 32.014 760.161 32.014 c +761.217 32.014 762.022 32.301 762.581 32.875 c +763.140 33.449 763.417 34.064 763.417 34.708 c +763.417 35.200 763.281 35.651 763.011 36.072 c +762.741 36.488 762.176 36.992 761.316 37.578 c +760.775 37.947 760.456 38.193 760.351 38.321 c +760.241 38.450 760.185 38.579 760.185 38.708 c +760.179 38.843 760.253 38.960 760.394 39.065 c +h +f +0.33 0.53 1.00 rg +[] 0 d +745.024 39.475 m +740.699 39.475 l +741.055 41.917 l +741.055 41.917 745.644 41.923 745.669 41.923 c +746.271 41.923 746.762 42.392 746.762 42.966 c +746.762 43.540 746.271 44.008 745.669 44.008 c +745.650 44.008 739.009 44.008 739.009 44.008 c +737.314 32.236 l +744.268 32.236 l +744.268 32.236 l +744.852 32.248 745.325 32.705 745.325 33.261 c +745.325 33.829 744.839 34.292 744.243 34.292 c +744.219 34.292 739.931 34.286 739.931 34.286 c +740.385 37.408 l +740.385 37.408 744.790 37.402 744.827 37.402 c +745.429 37.402 745.921 37.870 745.921 38.444 c +745.933 38.966 745.540 39.393 745.024 39.475 c +h +f +0.33 0.53 1.00 rg +[] 0 d +782.922 44.002 m +782.903 44.002 776.262 44.002 776.262 44.002 c +774.579 32.242 l +781.539 32.242 l +781.539 32.242 l +782.123 32.254 782.596 32.711 782.596 33.267 c +782.596 33.835 782.111 34.298 781.515 34.298 c +781.490 34.298 777.202 34.292 777.202 34.292 c +777.657 37.414 l +777.657 37.414 782.062 37.408 782.105 37.408 c +782.707 37.408 783.198 37.876 783.198 38.450 c +783.198 38.966 782.805 39.393 782.289 39.475 c +777.964 39.475 l +778.320 41.917 l +778.320 41.917 782.909 41.923 782.934 41.923 c +783.536 41.923 784.027 42.392 784.027 42.966 c +784.015 43.534 783.530 44.002 782.922 44.002 c +h +f +0.33 0.53 1.00 rg +[] 0 d +795.350 38.368 m +795.350 39.522 795.067 40.547 794.508 41.431 c +793.949 42.316 793.224 42.966 792.327 43.376 c +791.430 43.791 790.072 43.996 788.236 43.996 c +786.282 43.996 l +784.599 32.236 l +788.432 32.236 l +790.042 32.236 791.301 32.465 792.204 32.922 c +793.107 33.378 793.863 34.105 794.459 35.094 c +795.055 36.090 795.350 37.179 795.350 38.368 c +h +792.315 35.938 m +791.866 35.294 791.277 34.837 790.539 34.573 c +790.011 34.386 789.163 34.292 787.990 34.292 c +787.228 34.292 l +788.315 41.929 l +788.899 41.929 l +789.851 41.929 790.613 41.788 791.184 41.501 c +791.756 41.214 792.198 40.810 792.517 40.283 c +792.831 39.756 792.990 39.106 792.990 38.327 c +792.984 37.384 792.763 36.582 792.315 35.938 c +h +f +0.33 0.53 1.00 rg +[] 0 d +804.472 38.503 m +803.102 37.783 l +802.992 36.834 802.144 36.102 801.124 36.102 c +800.025 36.102 799.134 36.951 799.134 37.999 c +799.134 39.048 800.025 39.897 801.124 39.897 c +801.548 39.897 801.941 39.768 802.261 39.557 c +803.962 40.453 l +803.041 43.979 l +801.094 43.979 l +794.459 32.266 l +796.941 32.266 l +798.341 34.761 l +803.219 34.761 l +803.870 32.266 l +806.106 32.266 l +804.472 38.503 l +h +f +0.33 0.53 1.00 rg +[] 0 d +800.393 38.046 m +800.393 37.642 800.737 37.314 801.161 37.314 c +801.585 37.314 801.929 37.642 801.929 38.046 c +801.929 38.450 801.585 38.778 801.161 38.778 c +800.737 38.778 800.393 38.450 800.393 38.046 c +h +f +0.33 0.53 1.00 rg +[] 0 d +755.056 39.569 m +755.056 39.569 755.056 39.575 755.056 39.569 c +754.288 39.569 l +754.208 39.709 l +753.895 40.184 753.501 40.541 753.028 40.787 c +752.549 41.033 751.793 41.156 751.228 41.156 c +750.387 41.156 749.582 40.939 748.814 40.506 c +748.046 40.072 747.432 39.469 746.977 38.690 c +746.523 37.917 746.289 37.097 746.289 36.242 c +746.289 35.118 746.645 34.134 747.358 33.285 c +748.071 32.436 749.035 32.014 750.245 32.014 c +750.774 32.014 751.247 32.096 751.671 32.272 c +752.095 32.441 752.549 32.740 753.034 33.173 c +753.034 33.173 753.606 32.699 753.612 32.705 c +753.968 32.436 754.411 32.266 754.890 32.236 c +755.111 32.236 l +755.142 32.488 l +755.922 38.749 l +755.916 38.749 755.916 38.749 755.910 38.749 c +755.910 39.200 755.529 39.563 755.056 39.569 c +h +753.262 35.370 m +752.985 34.872 752.641 34.503 752.230 34.269 c +751.818 34.034 751.339 33.917 750.786 33.917 c +750.123 33.917 749.582 34.122 749.158 34.544 c +748.734 34.960 748.525 35.510 748.525 36.190 c +748.525 37.074 748.802 37.794 749.361 38.357 c +749.920 38.919 750.596 39.194 751.394 39.194 c +752.082 39.194 752.635 38.983 753.053 38.567 c +753.471 38.146 753.679 37.595 753.679 36.904 c +753.679 36.383 753.538 35.867 753.262 35.370 c +h +f +0.33 0.53 1.00 rg +[] 0 d +729.837 42.860 m +729.377 44.026 728.627 45.074 727.638 45.923 c +726.121 47.223 724.155 47.944 722.109 47.944 c +720.340 47.944 718.650 47.417 717.225 46.421 c +716.537 45.941 715.941 45.373 715.450 44.728 c +715.143 44.769 714.829 44.793 714.510 44.793 c +712.747 44.793 711.082 44.137 709.835 42.948 c +708.588 41.759 707.900 40.178 707.900 38.491 c +707.900 36.928 708.508 35.428 709.607 34.269 c +710.480 33.349 711.610 32.699 712.857 32.395 c +713.398 30.860 714.921 29.753 716.709 29.753 c +718.951 29.753 720.776 31.493 720.776 33.630 c +720.776 33.753 720.770 33.882 720.758 34.005 c +726.465 36.863 l +725.218 38.925 l +719.762 36.195 l +719.019 37.004 717.925 37.513 716.709 37.513 c +714.946 37.513 713.441 36.436 712.876 34.936 c +711.438 35.540 710.431 36.904 710.431 38.497 c +710.431 40.641 712.255 42.386 714.510 42.386 c +715.302 42.386 716.046 42.169 716.672 41.794 c +717.428 43.967 719.578 45.537 722.109 45.537 c +725.058 45.537 727.478 43.417 727.804 40.693 c +727.908 40.705 728.013 40.711 728.117 40.711 c +729.880 40.711 731.312 39.346 731.312 37.665 c +731.312 36.072 730.028 34.766 728.394 34.632 c +726.569 34.632 l +726.489 34.649 726.403 34.655 726.317 34.655 c +725.611 34.655 725.039 34.111 725.039 33.437 c +725.039 32.799 725.555 32.277 726.213 32.225 c +726.213 32.213 l +728.394 32.213 l +728.504 32.213 l +728.615 32.225 l +730.040 32.342 731.361 32.957 732.332 33.964 c +733.308 34.977 733.849 36.289 733.849 37.665 c +733.849 40.090 732.159 42.163 729.837 42.860 c +h +716.709 35.130 m +717.575 35.130 718.282 34.456 718.282 33.630 c +718.282 32.805 717.575 32.131 716.709 32.131 c +715.843 32.131 715.136 32.805 715.136 33.630 c +715.136 34.456 715.843 35.130 716.709 35.130 c +h +f +0.33 0.53 1.00 rg +[] 0 d +768.810 35.780 m +767.035 40.939 l +764.836 40.939 l +767.404 33.425 l +764.811 29.056 l +767.176 29.056 l +774.346 40.939 l +771.931 40.939 l +f +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +215.00 735.50 Td +(U1) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 527.75 Td +(5V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 531.75 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 530.500 m +155.000 530.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 537.75 Td +(CMD\(GPIO11\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 541.75 Td +(2) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 540.500 m +155.000 540.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 547.75 Td +(SD3\(GPIO10\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 551.75 Td +(3) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 550.500 m +155.000 550.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 557.75 Td +(SD2\(GPIO9\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 561.75 Td +(4) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 560.500 m +155.000 560.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 567.75 Td +(P13) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 571.75 Td +(5) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 570.500 m +155.000 570.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 577.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 581.75 Td +(6) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 580.500 m +155.000 580.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 587.75 Td +(P12) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 591.75 Td +(7) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 590.500 m +155.000 590.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 597.75 Td +(P14) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 601.75 Td +(8) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 600.500 m +155.000 600.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 607.75 Td +(P27) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +144.48 611.75 Td +(9) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 610.500 m +155.000 610.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 617.75 Td +(P26) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 621.75 Td +(10) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 620.500 m +155.000 620.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 627.75 Td +(P25) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 631.75 Td +(11) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 630.500 m +155.000 630.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 637.75 Td +(P33) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 641.75 Td +(12) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 640.500 m +155.000 640.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 647.75 Td +(P32) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 651.75 Td +(13) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 650.500 m +155.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 657.75 Td +(P35) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 661.75 Td +(14) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 660.500 m +155.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 667.75 Td +(P34) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 671.75 Td +(15) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 670.500 m +155.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 677.75 Td +(SVN\(GPIO39\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 681.75 Td +(16) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 680.500 m +155.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 687.75 Td +(SVP\(GPIO36\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 691.75 Td +(17) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 690.500 m +155.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 697.75 Td +(EN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 701.75 Td +(18) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 700.500 m +155.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +157.20 707.75 Td +(3.3V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +138.77 711.75 Td +(19) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +135.000 710.500 m +155.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +238.53 527.75 Td +(CLK\(GPIO6\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 531.75 Td +(20) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 530.500 m +295.000 530.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +237.25 537.75 Td +(SD0\(GPIO7\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 541.75 Td +(21) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 540.500 m +295.000 540.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +237.25 547.75 Td +(SD1\(GPIO8\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 551.75 Td +(22) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 550.500 m +295.000 550.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 557.75 Td +(P15) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 561.75 Td +(23) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 560.500 m +295.000 560.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 567.75 Td +(P2) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 571.75 Td +(24) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 570.500 m +295.000 570.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 577.75 Td +(P0) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 581.75 Td +(25) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 580.500 m +295.000 580.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 587.75 Td +(P4) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 591.75 Td +(26) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 590.500 m +295.000 590.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 597.75 Td +(P16) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 601.75 Td +(27) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 600.500 m +295.000 600.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 607.75 Td +(P17) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 611.75 Td +(28) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 610.500 m +295.000 610.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +282.05 617.75 Td +(P5) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 621.75 Td +(29) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 620.500 m +295.000 620.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 627.75 Td +(P18) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 631.75 Td +(30) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 630.500 m +295.000 630.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 637.75 Td +(P19) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 641.75 Td +(31) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 640.500 m +295.000 640.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +272.56 647.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 651.75 Td +(32) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 650.500 m +295.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 657.75 Td +(P21) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 661.75 Td +(33) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 660.500 m +295.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +243.62 667.75 Td +(RX\(GPIO3\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 671.75 Td +(34) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 670.500 m +295.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +244.33 677.75 Td +(TX\(GPIO1\)) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 681.75 Td +(35) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 680.500 m +295.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 687.75 Td +(P22) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 691.75 Td +(36) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 690.500 m +295.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +276.34 697.75 Td +(P23) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 701.75 Td +(37) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 700.500 m +295.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +272.56 707.75 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +300.20 711.75 Td +(38) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +315.000 710.500 m +295.000 710.500 l +S +2 J +0 j +100 M +1.00 w +0.00 G +[] 0 d +155.00 720.50 140.80 -201.75 re +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +170.00 725.50 Td +(AI-Thinker ESP-32) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +675.55 732.16 Td +(SIM800C) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +689.03 742.63 Td +(U2) Tj +ET +2 J +0 j +100 M +1.00 w +0.00 G +[] 0 d +635.00 730.50 120.00 -90.00 re +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 717.50 Td +(5V) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 721.50 Td +(1) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 720.500 m +635.000 720.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 707.50 Td +(V_TTL) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 711.50 Td +(2) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 710.500 m +635.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 697.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 701.50 Td +(3) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 700.500 m +635.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 687.50 Td +(TXD) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 691.50 Td +(4) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 690.500 m +635.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 677.50 Td +(RXD) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 681.50 Td +(5) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 680.500 m +635.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 667.50 Td +(DTR) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 671.50 Td +(6) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 670.500 m +635.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 657.50 Td +(SPKP) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 661.50 Td +(7) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 660.500 m +635.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +637.00 647.50 Td +(SPKN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +624.28 651.50 Td +(8) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +615.000 650.500 m +635.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +728.63 647.50 Td +(MICN) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 651.50 Td +(9) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 650.500 m +755.000 650.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +729.93 657.50 Td +(MICP) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 661.50 Td +(10) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 660.500 m +755.000 660.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +742.97 667.50 Td +(RI) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 671.50 Td +(11) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 670.500 m +755.000 670.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +728.77 677.50 Td +(VRTC) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 681.50 Td +(12) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 680.500 m +755.000 680.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.36 687.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 691.50 Td +(13) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 690.500 m +755.000 690.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.52 697.50 Td +(PWX) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 701.50 Td +(14) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 700.500 m +755.000 700.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +732.36 707.50 Td +(GND) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 711.50 Td +(15) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 710.500 m +755.000 710.500 l +S +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +729.00 717.50 Td +(VBAT) Tj +ET +BT +/F1 9 Tf +9.00 TL +0.000 0.000 1.000 rg +760.00 721.50 Td +(16) Tj +ET +1 J +1 j +1.00 w +0.53 0.00 0.00 RG +[] 0 d +775.000 720.500 m +755.000 720.500 l +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +-0.00 -1.00 1.00 -0.00 690.27 717.81 Tm +(SIM800C) Tj +ET +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 559.58 725.50 Tm +(3V3) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 730.500 m +595.000 725.500 l +580.000 725.500 l +580.000 735.500 l +595.000 735.500 l +600.000 730.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 730.500 m +600.000 710.500 l +615.000 710.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 430.08 735.50 Tm +(5V) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +465.000 740.500 m +460.000 735.500 l +445.000 735.500 l +445.000 745.500 l +460.000 745.500 l +465.000 740.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +465.000 740.500 m +615.000 740.500 l +615.000 720.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 543.44 686.89 Tm +(GPIO16) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 690.500 m +595.000 685.500 l +580.000 685.500 l +580.000 695.500 l +595.000 695.500 l +600.000 690.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 543.44 676.89 Tm +(GPIO17) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +600.000 680.500 m +595.000 675.500 l +580.000 675.500 l +580.000 685.500 l +595.000 685.500 l +600.000 680.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 357.50 608.63 Tm +(GPIO17) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +335.000 610.500 m +340.000 615.500 l +355.000 615.500 l +355.000 605.500 l +340.000 605.500 l +335.000 610.500 l +S +BT +/F3 11 Tf +11.00 TL +0.000 0.000 1.000 rg +1.00 -0.00 0.00 1.00 357.50 598.63 Tm +(GPIO16) Tj +ET +1 J +1 j +1.00 w +0.00 0.00 1.00 RG +0.00 g +[] 0 d +335.000 600.500 m +340.000 605.500 l +355.000 605.500 l +355.000 595.500 l +340.000 595.500 l +335.000 600.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 600.500 m +335.000 600.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 610.500 m +335.000 610.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 690.500 m +615.000 690.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +600.000 680.500 m +615.000 680.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +775.000 690.500 m +785.000 690.500 l +785.000 700.500 l +775.000 700.500 l +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 322.00 684.50 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +335.000 700.500 m +335.000 710.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +326.000 700.500 m +344.000 700.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +329.000 698.500 m +341.000 698.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +332.000 696.500 m +338.000 696.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +334.000 694.500 m +336.000 694.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +315.000 710.500 m +335.000 710.500 l +S +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 415.50 Td +(NOTES) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 400.50 Td +(1. 2A DRAW ON 5V, DO NOT USE ESP32 TO POWER) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 385.50 Td +(2. 100uF and 10uF tantalum capacitors over 5V and GND) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 370.50 Td +(3. For the module to start immediately when switched on, PWX is shorted to GND) Tj +ET +10.00 w +BT +/F1 12 Tf +12.00 TL +0.000 0.000 1.000 rg +40.00 355.50 Td +(4. V_TTL sets voltage of logic, 3V3 for ESP32 and 5V for Arduino UNO) Tj +ET +2 J +0 j +100 M +1.00 w +0.00 G +[6.000 6.000] 0 d +35.00 790.50 375.00 -335.00 re +S +2 J +0 j +100 M +1.00 w +0.00 G +[6.000 6.000] 0 d +425.00 790.50 370.00 -200.00 re +S +BT +/F3 12 Tf +12.00 TL +0.000 g +1.00 -0.00 0.00 1.00 432.00 629.50 Tm +(GND) Tj +ET +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +445.000 645.500 m +445.000 655.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +436.000 645.500 m +454.000 645.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +439.000 643.500 m +451.000 643.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +442.000 641.500 m +448.000 641.500 l +S +1 J +1 j +1.00 w +0.00 G +0.00 g +[] 0 d +444.000 639.500 m +446.000 639.500 l +S +1 J +1 j +1.00 w +0.00 0.53 0.00 RG +0.00 g +[] 0 d +445.000 655.500 m +445.000 700.500 l +615.000 700.500 l +S +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +487.00 708.31 Td +(100uF) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +487.00 717.17 Td +(C1) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 740.500 m +475.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 700.500 m +475.000 719.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +485.000 723.500 m +465.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +475.000 719.500 m +471.43 719.64 467.91 718.58 465.00 716.50 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +485.000 716.500 m +482.09 718.57 478.57 719.62 475.00 719.50 c +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +478.00 728.50 4.00 -0.10 re +B +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +479.90 730.50 0.10 -4.00 re +B +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +542.00 708.13 Td +(10uF) Tj +ET +10.00 w +BT +/F2 9 Tf +9.00 TL +0.000 0.000 0.502 rg +542.00 717.28 Td +(C2) Tj +ET +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 740.500 m +530.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 700.500 m +530.000 719.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +0.00 g +[] 0 d +540.000 723.500 m +520.000 723.500 l +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +530.000 719.500 m +526.43 719.64 522.91 718.58 520.00 716.50 c +S +1 J +1 j +1.00 w +0.55 0.14 0.14 RG +[] 0 d +540.000 716.500 m +537.09 718.57 533.57 719.62 530.00 719.50 c +S +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +533.00 728.50 4.00 -0.10 re +B +2 J +0 j +100 M +1.00 w +0.55 0.14 0.14 RG +0.55 0.14 0.14 rg +[] 0 d +534.90 730.50 0.10 -4.00 re +B +0.80 0.00 0.00 rg +532.50 740.50 m 532.50 741.88 531.38 743.00 530.00 743.00 c +528.62 743.00 527.50 741.88 527.50 740.50 c +527.50 739.12 528.62 738.00 530.00 738.00 c +531.38 738.00 532.50 739.12 532.50 740.50 c +f +0.80 0.00 0.00 rg +532.50 700.50 m 532.50 701.88 531.38 703.00 530.00 703.00 c +528.62 703.00 527.50 701.88 527.50 700.50 c +527.50 699.12 528.62 698.00 530.00 698.00 c +531.38 698.00 532.50 699.12 532.50 700.50 c +f +0.80 0.00 0.00 rg +477.50 740.50 m 477.50 741.88 476.38 743.00 475.00 743.00 c +473.62 743.00 472.50 741.88 472.50 740.50 c +472.50 739.12 473.62 738.00 475.00 738.00 c +476.38 738.00 477.50 739.12 477.50 740.50 c +f +0.80 0.00 0.00 rg +477.50 700.50 m 477.50 701.88 476.38 703.00 475.00 703.00 c +473.62 703.00 472.50 701.88 472.50 700.50 c +472.50 699.12 473.62 698.00 475.00 698.00 c +476.38 698.00 477.50 699.12 477.50 700.50 c +f +endstream +endobj +1 0 obj +<> +endobj +5 0 obj +<< +/Descent -209 +/CapHeight 727 +/StemV 0 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-559 -303 1446 1050] +/FontName /Verdana +/ItalicAngle 0 +/Ascent 1005 +>> +endobj +6 0 obj +<> +endobj +7 0 obj +<< +/Descent -325 +/CapHeight 500 +/StemV 80 +/Type /FontDescriptor +/Flags 32 +/FontBBox [-665 -325 2000 1006] +/FontName /Arial +/ItalicAngle 0 +/Ascent 1006 +>> +endobj +8 0 obj +<> +endobj +9 0 obj +<< +/Type /Font +/BaseFont /Times-Roman +/Subtype /Type1 +/Encoding /WinAnsiEncoding +/FirstChar 32 +/LastChar 255 +>> +endobj +2 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << +/F1 6 0 R +/F2 8 0 R +/F3 9 0 R +>> +/XObject << +>> +>> +endobj +10 0 obj +<< +/Producer (jsPDF 0.0.0) +/CreationDate (D:20211116111213+02'00') +>> +endobj +11 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/OpenAction [3 0 R /FitH null] +/PageLayout /OneColumn +>> +endobj +xref +0 12 +0000000000 65535 f +0000029842 00000 n +0000032463 00000 n +0000000015 00000 n +0000000125 00000 n +0000029899 00000 n +0000030069 00000 n +0000031123 00000 n +0000031292 00000 n +0000032336 00000 n +0000032587 00000 n +0000032673 00000 n +trailer +<< +/Size 12 +/Root 11 0 R +/Info 10 0 R +/ID [ <63A38F1DA032D2C5C58A2C9AD8739BA1> <63A38F1DA032D2C5C58A2C9AD8739BA1> ] +>> +startxref +32777 +%%EOF \ No newline at end of file diff --git a/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.ino b/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.ino new file mode 100644 index 0000000..64648f2 --- /dev/null +++ b/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.ino @@ -0,0 +1,132 @@ +#include +#include +#include +#include "register_map_pm8000.h" + +#define SIM808_RX 2 +#define SIM808_TX 3 +#define RS485_DE_RE 4 +#define RS485_RX 8 +#define RS485_TX 7 +#define LED_A 3 +#define LED_B 5 + +SoftwareSerial sim808(SIM808_RX, SIM808_TX); +SoftwareSerial rs485(RS485_RX, RS485_TX); +ModbusMaster modbus; +TinyGPSPlus gps; + +const char APN[] = "your_apn_here"; +const char SERVER_URL[] = "http://your-server-url.com/upload"; +const int SLAVE_ID = 101; +const long INTERVAL = 60000; // 1 minute + +unsigned long lastSendTime = 0; + +void setup() { + Serial.begin(9600); + sim808.begin(9600); + rs485.begin(9600); + + pinMode(RS485_DE_RE, OUTPUT); + pinMode(LED_A, OUTPUT); + pinMode(LED_B, OUTPUT); + + digitalWrite(RS485_DE_RE, LOW); + digitalWrite(LED_A, LOW); + digitalWrite(LED_B, LOW); + + modbus.begin(SLAVE_ID, rs485); + + // Initialize SIM808 + sim808.println("AT+CGNSPWR=1"); // Turn on GNSS + delay(1000); + sim808.println("AT+CGNSSEQ=\"RMC\""); // Set NMEA sentence to RMC + delay(1000); + sim808.println("AT+CGDCONT=1,\"IP\",\"" + String(APN) + "\""); + delay(1000); + sim808.println("AT+HTTPINIT"); + delay(1000); + + Serial.println("Setup complete"); +} + +void loop() { + unsigned long currentTime = millis(); + + // Read GPS data + while (sim808.available()) { + gps.encode(sim808.read()); + } + + if (currentTime - lastSendTime >= INTERVAL) { + lastSendTime = currentTime; + + String data = createDataString(); + sendDataToServer(data); + } +} + +String createDataString() { + String data = ""; + + // Add GPS data + if (gps.location.isValid()) { + data += String(gps.location.lat(), 6) + "," + String(gps.location.lng(), 6) + ","; + } else { + data += "0.000000,0.000000,"; + } + + // Read Modbus registers + for (int i = 0; i < sizeof(registers) / sizeof(registers[0]); i++) { + uint16_t result = modbus.readHoldingRegisters(registers[i].address - 1, 2); + + if (result == modbus.ku8MBSuccess) { + switch (registers[i].type) { + case 2: // Float + data += String(modbus.getResponseBuffer(0)) + ","; + break; + case 1: // Integer + data += String(modbus.getResponseBuffer(0)) + ","; + break; + case 0: // Long + uint32_t longValue = (modbus.getResponseBuffer(0) << 16) | modbus.getResponseBuffer(1); + data += String(longValue) + ","; + break; + } + } else { + data += "ERROR,"; + digitalWrite(LED_B, HIGH); + } + } + + return data; +} + +void sendDataToServer(String data) { + sim808.println("AT+HTTPDATA=" + String(data.length()) + ",10000"); + delay(1000); + sim808.println(data); + delay(1000); + sim808.println("AT+HTTPACTION=1"); // POST request + + // Wait for response + unsigned long start = millis(); + while (millis() - start < 10000) { + if (sim808.available()) { + String response = sim808.readString(); + if (response.indexOf("+HTTPACTION: 1,200") != -1) { + digitalWrite(LED_A, HIGH); + delay(200); + digitalWrite(LED_A, LOW); + Serial.println("Data sent successfully"); + return; + } + } + } + + digitalWrite(LED_B, HIGH); + delay(200); + digitalWrite(LED_B, LOW); + Serial.println("Failed to send data"); +} \ No newline at end of file diff --git a/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.md b/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.md new file mode 100644 index 0000000..715bd00 --- /dev/null +++ b/firmware/modbus-SIM808-pm8000/modbus-SIM808-pm8000.md @@ -0,0 +1,216 @@ +# Modbus Reading and GSM/GPS Data Logging for Schneider PowerLogic PM8000 using SIM808 Breakout - GSM & GPS, BAT Input + +This is a specification and implementation of an Arduino-based Modbus data logger with GSM data transmission and GPS location tracking for the Schneider PowerLogic PM8000. This software is designed for Vivarox EMS and only Vivarox has the right to use and modify this software. + +## Arduino Implementation: + +This project uses an Arduino to connect to Modbus devices, read information, transmit it via GSM to a remote server, and provide GPS location data. + +### Hardware needed: + +1. Arduino Board + Recommended: Arduino MEGA 2560 (for more memory and I/O pins) or Arduino UNO (for simpler projects). + +2. RS485 to TTL Module + Allows communication between the Arduino and Modbus devices using the RS485 protocol. + +3. SIM808 Breakout - GSM & GPS, BAT Input + Enables the Arduino to send data over cellular networks and provide GPS location data. + +4. Power Supply + To power the Arduino and connected peripherals. The SIM808 module requires a dedicated power supply capable of providing up to 2A current. + +5. LED Indicators + Two LEDs for status indication. + +6. Capacitors + 100uF and 10uF capacitors for power supply stabilization. + +7. GPS Antenna + For receiving GPS signals. + +### Wiring + +#### Wiring Diagram +``` +Arduino Mega/Uno SIM808 Breakout Description +----------------- --------------- ----------- + 5V ----> VCC Power supply (via 2A dedicated supply) + GND ----> GND Ground + 2 (RX) <---- TX SIM808 TX to Arduino RX + 3 (TX) ----> RX Arduino TX to SIM808 RX + + 7 ----> DI (RS485) RS485 Driver Input + 8 <---- RO (RS485) RS485 Receiver Output + 4 ----> DE/RE (RS485) RS485 Driver Enable/Receiver Enable + + 3 ----> LED A Status LED A + 5 ----> LED B Status LED B + +Power Supply +------------ + VCC ----> + (2A) Dedicated 2A power supply positive + GND ----> - (GND) Dedicated 2A power supply ground + +Capacitors +---------- + VCC ----|(---- GND 100uF capacitor + VCC ---||---- GND 10uF capacitor + + GPS Antenna + | + | + [SIM808 Breakout Module] +``` + +#### Wiring Notes: +1. Ensure the power supply can provide 2A current. +2. Place the 100uF and 10uF capacitors as close to the SIM808 module's power pins as possible. +3. The RS485 connections are optional and depend on your specific requirements. +4. LEDs should be connected with appropriate current-limiting resistors (not shown in diagram). +5. The SIM808 module's GPS antenna should be connected securely. +6. Double-check all connections before powering on the system. + +### Software + +- Modbus Library: ModbusMaster +- GSM/GPS Library: TinyGSM (recommended for SIM808) +- NeoSWSerial: For better latency on software serial communication with Modbus + +### Implementation Details + +1. Modbus Configuration: + - Slave ID: 101 + - Baud Rate: 9600 + - Register map: Defined in separate "register_map_pm8000.h" file + +2. Data Logging and Transmission: + - Frequency: Readings taken and transmitted every minute + - Data Format: CSV (Comma-Separated Values) string + - Data Structure: Timestamp, GPS coordinates, followed by register values + - Header Row: Includes register addresses for easy identification + +3. Register Types Supported: + - Float (32-bit) + - Integer (32-bit) + - String (up to 20 characters) + +4. Error Handling and Status Indication: + - LED A: Indicates successful data transmission + - LED B: Indicates errors (e.g., GSM issues, Modbus communication errors) + - Serial output for debugging (9600 baud) + +5. GPS Functionality: + - Provides real-time location data + - Supports various NMEA sentences (GGA, GSA, GSV, RMC) + - Can be used for geofencing applications + +6. Special Features: + - Robust error handling for GSM/GPS and Modbus communication + - Header sent once at the beginning of each session + - Configurable APN and server URL + - GPS power saving mode available + +### Programming Workflow + +1. Initialize hardware (SIM808 module, RS485 module) +2. Set up Modbus communication parameters +3. Configure GSM and GPS settings +4. Enter main loop: + - Read data from Modbus registers + - Obtain GPS location + - Format data into CSV string including GPS coordinates + - Send data via GSM to server + - Handle any errors and provide status indication via LEDs + - Delay for 1 minute before next reading and transmission + +## Memory Limitations and Register Customization + +### Memory Constraints + +The Arduino, particularly models like the UNO and MEGA, has limited memory available for storing program code and variables. This limitation affects the number of Modbus registers that can be defined and read in a single project. + +- Arduino UNO: 32 KB Flash (program storage), 2 KB SRAM +- Arduino MEGA: 256 KB Flash, 8 KB SRAM + +Due to these constraints, the number of registers that can be defined in the `register_map_pm8000.h` file is not unlimited. The exact number will depend on the complexity of your code and other libraries used. + +### Customizing the Register Map + +To adapt this project to your specific needs, you can modify the `register_map_pm8000.h` file. This file contains the definitions of Modbus registers to be read by the Arduino. + +To customize the register map: + +1. Open the `register_map_pm8000.h` file in your Arduino IDE or text editor. + +2. Locate the `registers` array in the file. It should look something like this: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + // ... other registers ... + }; + ``` + +3. To remove a register, simply comment out its line by adding `//` at the beginning: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + // {40003, 1}, // This register is now commented out and won't be read + // ... other registers ... + }; + ``` + +4. To add a new register, add a new line to the array with the register address and type: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + {40005, 2}, // New register added + // ... other registers ... + }; + ``` + +5. Remember to keep the array syntax correct, with commas between entries and a semicolon at the end of the array. + +## Best Practices + +- Start by commenting out registers you don't need before adding new ones. +- If you're using an Arduino UNO, you may need to be more selective about which registers to include due to memory constraints. +- Test your modifications incrementally to ensure the Arduino can handle the memory load. +- If you need to read a large number of registers, consider using an Arduino MEGA or a more powerful microcontroller. +- Ensure your GSM data plan can handle the amount of data being transmitted. +- Regularly check your server to ensure data is being received correctly. +- Position the GPS antenna with a clear view of the sky for best performance. + +## Important AT Commands for SIM808 + +Here are some important AT commands used in this project: + +1. `AT+CGNSPWR=1`: Turn on GNSS power supply. +2. `AT+CGNSSEQ="RMC"`: Set the last NMEA sentence to RMC (Recommended Minimum Specific GNSS Data). +3. `AT+CGNSINF`: Get GNSS navigation information. +4. `AT+CGNSURC=2`: Set URC reporting every 2 GNSS fixes. +5. `AT+CGDCONT=1,"IP","APN_NAME"`: Set the APN for your cellular provider. +6. `AT+HTTPINIT`: Initialize HTTP service. +7. `AT+HTTPSSL=1`: Enable SSL for HTTPS connections (if required). +8. `AT+HTTPPARA="URL","http://your-server-url.com/upload"`: Set the server URL. +9. `AT+HTTPDATA=,10000`: Prepare to send HTTP POST data. +10. `AT+HTTPACTION=1`: Send HTTP POST request. + +Remember to replace "APN_NAME" and "http://your-server-url.com/upload" with your specific values. + +## Troubleshooting + +1. If you encounter communication issues, double-check your wiring and ensure all connections are secure. +2. Verify that your APN settings are correct for your cellular provider. +3. If the module isn't responding, try resetting it and check your power supply. +4. Use AT commands like `AT+CSQ` to check signal strength and `AT+CREG?` to check network registration status. +5. If GPS data isn't being received, ensure the GPS antenna has a clear view of the sky. +6. If data isn't being sent, verify your TCP connection settings and ensure you have an active data plan. +7. Use `AT+CGNSINF` to check GPS fix status and information. + +By carefully managing the registers in the `register_map_pm8000.h` file and configuring your SIM808 settings, you can customize this Modbus reader to suit your specific requirements while staying within the memory limitations of your Arduino board and optimizing data transmission and GPS functionality. \ No newline at end of file diff --git a/firmware/modbus-sd/modbus-sd-pm8000/register_map_pm8000.h b/firmware/modbus-SIM808-pm8000/register_map_pm8000.h similarity index 100% rename from firmware/modbus-sd/modbus-sd-pm8000/register_map_pm8000.h rename to firmware/modbus-SIM808-pm8000/register_map_pm8000.h diff --git a/firmware/modbus-sd/modbus-sd-pm8000/util.h b/firmware/modbus-SIM808-pm8000/util.h similarity index 100% rename from firmware/modbus-sd/modbus-sd-pm8000/util.h rename to firmware/modbus-SIM808-pm8000/util.h diff --git a/firmware/modbus-sd/modbus-sd-pm8000/modbus-sd-pm8000.ino b/firmware/modbus-sd-pm8000/modbus-sd-pm8000.ino similarity index 100% rename from firmware/modbus-sd/modbus-sd-pm8000/modbus-sd-pm8000.ino rename to firmware/modbus-sd-pm8000/modbus-sd-pm8000.ino diff --git a/firmware/modbus-sd-pm8000/modbus-sd-pm8000.md b/firmware/modbus-sd-pm8000/modbus-sd-pm8000.md new file mode 100644 index 0000000..4820f41 --- /dev/null +++ b/firmware/modbus-sd-pm8000/modbus-sd-pm8000.md @@ -0,0 +1,190 @@ +# Modbus Reading for Schneider PowerLogic PM8000 + +This is a specification and implementation of the Arduino-based Modbus data logger for the Schneider PowerLogic PM8000. +This software is designed for Vivarox EMS and only Vivarox has right to use and modify this software. + +## Arduino Implementation: + +This project uses an Arduino to connect to Modbus devices, read information, and log it onto an SD card with timestamps. + +### Hardware needed: + +1. Arduino Board + Recommended: Arduino MEGA 2560 (for more memory and I/O pins) or Arduino UNO (for simpler projects). + - [Arduino MEGA @ R377.20](https://www.robotics.org.za/MEGA-16U2?search=Arduino%20MEGA%202560) + - [UNO R3 with 16U2 USB Interface @ R151.00](https://www.robotics.org.za/UNOR3-16U2?search=%20Arduino%20UNO) + +2. RS485 to TTL Module + Allows communication between the Arduino and Modbus devices using the RS485 protocol. + - [RS485 Module (TTL -> RS485) @ R25.30](https://www.robotics.org.za/RS485-MOD) + - [MAX485 Bus Transceiver (4 Pack) @ R16.00](https://www.robotics.org.za/MAX485-DIP?search=MAX485) + +3. SD Card Module + Allows the Arduino to read from and write data to an SD card. + - [Micro SD Card Module @ R25.00](https://www.diyelectronics.co.za/store/memory/512-micro-sd-card-module.html?srsltid=AfmBOoptww8c6kx53xbZWiP2_C_qOE3r9xinyoCO-AZHrZkNQiyxU17c) + +4. RTC Module + To keep track of the current date and time, even when the Arduino is powered off. + - [DS3231 Real Time Clock Module @ R55.20](https://www.robotics.org.za/DS3231-MOD?search=DS3231) + +5. Power Supply + To power the Arduino and connected peripherals. + - [AC Adapter 9V with barrel jack @ R60](https://www.robotics.org.za/AC-9V-2A-2155?search=%20Power%20Supply) + +6. LED Indicators + Two LEDs for status indication (not included in original cost estimate). + +### Wiring + +#### RS485 Module to Arduino: +1. RO (Receiver Output) to Arduino RX (pin 8) +2. DI (Driver Input) to Arduino TX (pin 7) +3. DE (Driver Enable) & RE (Receiver Enable) to Arduino digital pin 4 +4. VCC to 5V on Arduino +5. GND to GND on Arduino +6. A & B (RS485 differential pair) to Modbus device + +#### SD Card Module to Arduino: +1. VCC to 5V on Arduino +2. GND to GND on Arduino +3. MOSI to MOSI (pin 51 on MEGA, pin 11 on UNO) +4. MISO to MISO (pin 50 on MEGA, pin 12 on UNO) +5. SCK to SCK (pin 52 on MEGA, pin 13 on UNO) +6. CS (Chip Select) to digital pin 10 + +#### RTC Module to Arduino: +1. VCC to 5V on the Arduino +2. GND to GND on the Arduino +3. SDA to SDA (pin 20 on MEGA, pin A4 on UNO) +4. SCL to SCL (pin 21 on MEGA, pin A5 on UNO) + +#### LED Indicators: +1. LED A to digital pin 3 +2. LED B to digital pin 5 + +### Software + +- Modbus Library: ModbusMaster +- SD Library: SdFat (more advanced than the standard SD library) +- RTC Library: RTClib by Adafruit +- NeoSWSerial: For better latency on software serial communication + +### Implementation Details + +1. Modbus Configuration: + - Slave ID: 101 + - Baud Rate: 9600 + - Register map: Defined in separate "register_map_pm8000.h" file + +2. Data Logging: + - Frequency: Readings taken every second + - File Format: CSV (Comma-Separated Values) + - Filename: "pm8k_YYYYMMDD.csv" (generated daily based on current date) + - Data Structure: Timestamp, followed by register values + - Header Row: Includes register addresses for easy identification + +3. Register Types Supported: + - Float (32-bit) + - Integer (32-bit) + - Long (64-bit) + - String (up to 20 characters) + +4. Error Handling and Status Indication: + - LED A: Indicates successful data writing and transmission + - LED B: Indicates errors (e.g., SD card issues, RTC problems, Modbus communication errors) + - Serial output for debugging (9600 baud) + +5. Special Features: + - Automatic creation of new log file on date change + - Header row written only once per file + - Robust error handling for SD card, RTC, and Modbus communication + +### Programming Workflow + +1. Initialize hardware (RTC, SD card, RS485 module) +2. Set up Modbus communication parameters +3. Enter main loop: + - Read current time from RTC + - Read data from Modbus registers + - Write timestamped data to SD card + - Handle any errors and provide status indication via LEDs + - Delay for 1 second before next reading + +## Costs + +Estimated cost of the hardware from suppliers like Micro Robotics, excluding labor to assemble: + +- R617.00 per unit using the Arduino MEGA +- R374.50 per unit using the Arduino UNO + +Note: These costs do not include the additional LEDs for status indication. + +## Additional Notes + +- The system is designed to reset and write logs to newly inserted SD cards automatically. +- Error handling includes visual feedback via LED indicators and detailed serial output for debugging. +- The modular design allows for easy expansion of register types and Modbus devices. + +For more detailed implementation, refer to the [Source Code](https://git.warky.dev/vivarox/arduino/src/branch/main/firmware/modbus-sd/modbus-sd-pm8000/modbus-sd-pm8000.ino). + + +## Memory Limitations and Register Customization + +### Memory Constraints + +The Arduino, particularly models like the UNO and MEGA, has limited memory available for storing program code and variables. This limitation affects the number of Modbus registers that can be defined and read in a single project. + +- Arduino UNO: 32 KB Flash (program storage), 2 KB SRAM +- Arduino MEGA: 256 KB Flash, 8 KB SRAM + +Due to these constraints, the number of registers that can be defined in the `register_map_pm8000.h` file is not unlimited. The exact number will depend on the complexity of your code and other libraries used. + +### Customizing the Register Map + +To adapt this project to your specific needs, you can modify the `register_map_pm8000.h` file. This file contains the definitions of Modbus registers to be read by the Arduino. + +To customize the register map: + +1. Open the `register_map_pm8000.h` file in your Arduino IDE or text editor. + +2. Locate the `registers` array in the file. It should look something like this: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + // ... other registers ... + }; + ``` + +3. To remove a register, simply comment out its line by adding `//` at the beginning: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + // {40003, 1}, // This register is now commented out and won't be read + // ... other registers ... + }; + ``` + +4. To add a new register, add a new line to the array with the register address and type: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + {40005, 2}, // New register added + // ... other registers ... + }; + ``` + +5. Remember to keep the array syntax correct, with commas between entries and a semicolon at the end of the array. + +## Best Practices + +- Start by commenting out registers you don't need before adding new ones. +- If you're using an Arduino UNO, you may need to be more selective about which registers to include due to memory constraints. +- Test your modifications incrementally to ensure the Arduino can handle the memory load. +- If you need to read a large number of registers, consider using an Arduino MEGA or a more powerful microcontroller. + +By carefully managing the registers in the `register_map_pm8000.h` file, you can customize this Modbus reader to suit your specific requirements while staying within the memory limitations of your Arduino board. diff --git a/firmware/modbus-sd-pm8000/register_map_pm8000.h b/firmware/modbus-sd-pm8000/register_map_pm8000.h new file mode 100644 index 0000000..82a214d --- /dev/null +++ b/firmware/modbus-sd-pm8000/register_map_pm8000.h @@ -0,0 +1,602 @@ + +#include + +struct RegisterMap +{ + uint16_t regaddr; + uint8_t regtype; +}; + +const PROGMEM RegisterMap registers[] = { + //{ 30, 5} , // Name: Meter Name (DeviceName) - [30,20] as UTF8 + //{ 50, 5} , // Name: Meter Model (DeviceType) - [50,20] as UTF8 + { 1837, 1} , // Name: Year (Year) - [1837,1] as INT16U + { 1838, 1} , // Name: Month (Month) - [1838,1] as INT16U + { 1839, 1} , // Name: Day (Day) - [1839,1] as INT16U + { 1840, 1} , // Name: Hour (Hour) - [1840,1] as INT16U + { 1841, 1} , // Name: Minute (Minute) - [1841,1] as INT16U + { 2700, 2} , // Name: Active Energy Delivered (Into Load) (kWh del) - [2700,2] as FLOAT32 + { 2702, 2} , // Name: Active Energy Received (Out of Load) (kWh rec) - [2702,2] as FLOAT32 + { 2704, 2} , // Name: Active Energy Delivered + Received (kWh del+rec) - [2704,2] as FLOAT32 + { 2706, 2} , // Name: Active Energy Delivered- Received (kWh del-rec) - [2706,2] as FLOAT32 + { 2708, 2} , // Name: Reactive Energy Delivered (kVARh del) - [2708,2] as FLOAT32 + { 2710, 2} , // Name: Reactive Energy Received (kVARh rec) - [2710,2] as FLOAT32 + { 2712, 2} , // Name: Reactive Energy Delivered + Received (kVARh del+rec) - [2712,2] as FLOAT32 + { 2714, 2} , // Name: Reactive Energy Delivered - Received (kVARh del-rec) - [2714,2] as FLOAT32 + { 2716, 2} , // Name: Apparent Energy Delivered (kVAh del) - [2716,2] as FLOAT32 + { 2718, 2} , // Name: Apparent Energy Received (kVAh rec) - [2718,2] as FLOAT32 + { 2720, 2} , // Name: Apparent Energy Delivered + Received (kVAh del+rec) - [2720,2] as FLOAT32 + { 2722, 2} , // Name: Apparent Energy Delivered - Received (kVAh del-rec) - [2722,2] as FLOAT32 + { 2724, 2} , // Name: Active Energy in Quadrant I (kWh Q1) - [2724,2] as FLOAT32 + { 2726, 2} , // Name: Active Energy in Quadrant II (kWh Q2) - [2726,2] as FLOAT32 + { 2728, 2} , // Name: Active Energy in Quadrant III (kWh Q3) - [2728,2] as FLOAT32 + { 2730, 2} , // Name: Active Energy in Quadrant IV (kWh Q4) - [2730,2] as FLOAT32 + { 2732, 2} , // Name: Reactive Energy in Quadrant I (kVARh Q1) - [2732,2] as FLOAT32 + { 2734, 2} , // Name: Reactive Energy in Quadrant II (kVARh Q2) - [2734,2] as FLOAT32 + { 2736, 2} , // Name: Reactive Energy in Quadrant III (kVARh Q3) - [2736,2] as FLOAT32 + { 2738, 2} , // Name: Reactive Energy in Quadrant IV (kVARh Q4) - [2738,2] as FLOAT32 + { 2740, 2} , // Name: Apparent Energy in Quadrant I (kVAh Q1) - [2740,2] as FLOAT32 + { 2742, 2} , // Name: Apparent Energy in Quadrant II (kVAh Q2) - [2742,2] as FLOAT32 + { 2744, 2} , // Name: Apparent Energy in Quadrant III (kVAh Q3) - [2744,2] as FLOAT32 + { 2746, 2} , // Name: Apparent Energy in Quadrant IV (kVAh Q4) - [2746,2] as FLOAT32 + { 2748, 2} , // Name: Conditional Active Energy Delivered (Into Load) (Cnd kWh del) - [2748,2] as FLOAT32 + { 2750, 2} , // Name: Conditional Active Energy Received (Out of Load) (Cnd kWh rec) - [2750,2] as FLOAT32 + { 2754, 2} , // Name: Active Energy Delivered - Received, Conditional (Cnd kWh d-r) - [2754,2] as FLOAT32 + { 2756, 2} , // Name: Conditional Reactive Energy In (Delivered) (Cnd kVARh del) - [2756,2] as FLOAT32 + { 2758, 2} , // Name: Conditional Reactive Energy Out (Received) (Cnd kVARh rec) - [2758,2] as FLOAT32 + { 2762, 2} , // Name: Reactive Energy Delivered - Received, Conditional (Cnd kVARh d-r) - [2762,2] as FLOAT32 + { 2768, 2} , // Name: Apparent Energy Delivered + Received, Conditional (Cnd kVAh d+r) - [2768,2] as FLOAT32 + { 2772, 2} , // Name: Active Energy Delivered , Last Complete Interval (Inc kWh del C) - [2772,2] as FLOAT32 + { 2774, 2} , // Name: Active Energy Received , Last Complete Interval (Inc kWh rec C) - [2774,2] as FLOAT32 + { 2776, 2} , // Name: Active Energy Delivered - Received , Last Complete Interval (Inc kWh d-r C) - [2776,2] as FLOAT32 + { 2778, 2} , // Name: Reactive Energy Delivered , Last Complete Interval (Inc kVARh del C) - [2778,2] as FLOAT32 + { 2780, 2} , // Name: Reactive Energy Received , Last Complete Interval (Inc kVARh rec C) - [2780,2] as FLOAT32 + { 2782, 2} , // Name: Reactive Energy Delivered - Received , Last Complete Interval (Inc kVARh d-r C) - [2782,2] as FLOAT32 + { 2784, 2} , // Name: Apparent Energy Delivered + Received , Last Complete Interval (Inc kVAh d+r C) - [2784,2] as FLOAT32 + { 2786, 2} , // Name: Active Energy Delivered , Present Interval (Inc kWh del) - [2786,2] as FLOAT32 + { 2788, 2} , // Name: Active Energy Received , Present Interval (Inc kWh rec) - [2788,2] as FLOAT32 + { 2790, 2} , // Name: Active Energy Delivered - Received , Present Interval (Inc kWh d-r) - [2790,2] as FLOAT32 + { 2792, 2} , // Name: Reactive Energy Delivered , Present Interval (Inc kVARh del) - [2792,2] as FLOAT32 + { 2794, 2} , // Name: Reactive Energy Received , Present Interval (Inc kVARh rec) - [2794,2] as FLOAT32 + { 2796, 2} , // Name: Reactive Energy Delivered - Received , Present Interval (Inc kVARh d-r) - [2796,2] as FLOAT32 + { 2798, 2} , // Name: Apparent Energy Delivered + Received , Present Interval (Inc kVAh d+r) - [2798,2] as FLOAT32 + { 2800, 2} , // Name: Active Energy Delivered Interval (kWh del int) - [2800,2] as FLOAT32 + { 2802, 2} , // Name: Active Energy Received Interval (kWh rec int) - [2802,2] as FLOAT32 + { 2804, 2} , // Name: Reactive Energy Delivered Interval (kVARh del int) - [2804,2] as FLOAT32 + { 2806, 2} , // Name: Reactive Energy Received Interval (kVARh rec int) - [2806,2] as FLOAT32 + { 2808, 2} , // Name: Apparent Energy Delivered Interval (kVAh del int) - [2808,2] as FLOAT32 + { 2810, 2} , // Name: Apparent Energy Received Interval (kVAh rec int) - [2810,2] as FLOAT32 + { 3000, 2} , // Name: Current A (I a) - [3000,2] as FLOAT32 + { 3002, 2} , // Name: Current B (I b) - [3002,2] as FLOAT32 + { 3004, 2} , // Name: Current C (I c) - [3004,2] as FLOAT32 + { 3006, 2} , // Name: Current N (I 4) - [3006,2] as FLOAT32 + { 3008, 2} , // Name: Current G (I 5) - [3008,2] as FLOAT32 + //{ 3010, 2} , // Name: Current Avg (I avg) - [3010,2] as FLOAT32 + { 3020, 2} , // Name: Voltage A-B (Vll ab) - [3020,2] as FLOAT32 + { 3022, 2} , // Name: Voltage B-C (Vll bc) - [3022,2] as FLOAT32 + { 3024, 2} , // Name: Voltage C-A (Vll ca) - [3024,2] as FLOAT32 + //{ 3026, 2} , // Name: Voltage L-L Avg (Vll avg) - [3026,2] as FLOAT32 + { 3028, 2} , // Name: Voltage A-N (Vln a) - [3028,2] as FLOAT32 + { 3030, 2} , // Name: Voltage B-N (Vln b) - [3030,2] as FLOAT32 + { 3032, 2} , // Name: Voltage C-N (Vln c) - [3032,2] as FLOAT32 +// { 3036, 2} , // Name: Voltage L-N Avg (Vln avg) - [3036,2] as FLOAT32 + { 3054, 2} , // Name: Active Power A (kW a) - [3054,2] as FLOAT32 + { 3056, 2} , // Name: Active Power B (kW b) - [3056,2] as FLOAT32 + { 3058, 2} , // Name: Active Power C (kW c) - [3058,2] as FLOAT32 + { 3060, 2} , // Name: Active Power Total (kW tot) - [3060,2] as FLOAT32 + { 3062, 2} , // Name: Reactive Power A (kVAR a) - [3062,2] as FLOAT32 + { 3064, 2} , // Name: Reactive Power B (kVAR b) - [3064,2] as FLOAT32 + { 3066, 2} , // Name: Reactive Power C (kVAR c) - [3066,2] as FLOAT32 + { 3068, 2} , // Name: Reactive Power Total (kVAR tot) - [3068,2] as FLOAT32 + { 3070, 2} , // Name: Apparent Power A (kVA a) - [3070,2] as FLOAT32 + { 3072, 2} , // Name: Apparent Power B (kVA b) - [3072,2] as FLOAT32 + { 3074, 2} , // Name: Apparent Power C (kVA c) - [3074,2] as FLOAT32 + { 3076, 2} , // Name: Apparent Power Total (kVA tot) - [3076,2] as FLOAT32 + { 3110, 2} , // Name: Frequency (Freq) - [3110,2] as FLOAT32 +// { 3204, 3} , // Name: Active Energy Delivered (Into Load) (kWh del) - [3204,4] as INT64 +// { 3208, 3} , // Name: Active Energy Received (Out of Load) (kWh rec) - [3208,4] as INT64 +// { 3212, 3} , // Name: Active Energy Delivered + Received (kWh del+rec) - [3212,4] as INT64 +// { 3216, 3} , // Name: Active Energy Delivered- Received (kWh del-rec) - [3216,4] as INT64 +// { 3220, 3} , // Name: Reactive Energy Delivered (kVARh del) - [3220,4] as INT64 +// { 3224, 3} , // Name: Reactive Energy Received (kVARh rec) - [3224,4] as INT64 +// { 3228, 3} , // Name: Reactive Energy Delivered + Received (kVARh del+rec) - [3228,4] as INT64 +// { 3232, 3} , // Name: Reactive Energy Delivered - Received (kVARh del-rec) - [3232,4] as INT64 +// { 3236, 3} , // Name: Apparent Energy Delivered (kVAh del) - [3236,4] as INT64 +// { 3240, 3} , // Name: Apparent Energy Received (kVAh rec) - [3240,4] as INT64 +// { 3244, 3} , // Name: Apparent Energy Delivered + Received (kVAh del+rec) - [3244,4] as INT64 +// { 3248, 3} , // Name: Apparent Energy Delivered - Received (kVAh del-rec) - [3248,4] as INT64 +// { 3256, 3} , // Name: Active Energy in Quadrant I (kWh Q1) - [3256,4] as INT64 +// { 3260, 3} , // Name: Active Energy in Quadrant II (kWh Q2) - [3260,4] as INT64 +// { 3264, 3} , // Name: Active Energy in Quadrant III (kWh Q3) - [3264,4] as INT64 +// { 3268, 3} , // Name: Active Energy in Quadrant IV (kWh Q4) - [3268,4] as INT64 +// { 3272, 3} , // Name: Reactive Energy in Quadrant I (kVARh Q1) - [3272,4] as INT64 +// { 3276, 3} , // Name: Reactive Energy in Quadrant II (kVARh Q2) - [3276,4] as INT64 +// { 3280, 3} , // Name: Reactive Energy in Quadrant III (kVARh Q3) - [3280,4] as INT64 +// { 3284, 3} , // Name: Reactive Energy in Quadrant IV (kVARh Q4) - [3284,4] as INT64 +// { 3288, 3} , // Name: Apparent Energy in Quadrant I (kVAh Q1) - [3288,4] as INT64 +// { 3292, 3} , // Name: Apparent Energy in Quadrant II (kVAh Q2) - [3292,4] as INT64 +// { 3296, 3} , // Name: Apparent Energy in Quadrant III (kVAh Q3) - [3296,4] as INT64 +// { 3300, 3} , // Name: Apparent Energy in Quadrant IV (kVAh Q4) - [3300,4] as INT64 +// { 3358, 3} , // Name: Conditional Active Energy Delivered (Into Load) (Cnd kWh del) - [3358,4] as INT64 +// { 3362, 3} , // Name: Conditional Active Energy Received (Out of Load) (Cnd kWh rec) - [3362,4] as INT64 +// { 3370, 3} , // Name: Active Energy Delivered - Received, Conditional (Cnd kWh d-r) - [3370,4] as INT64 +// { 3374, 3} , // Name: Conditional Reactive Energy In (Delivered) (Cnd kVARh del) - [3374,4] as INT64 +// { 3378, 3} , // Name: Conditional Reactive Energy Out (Received) (Cnd kVARh rec) - [3378,4] as INT64 +// { 3386, 3} , // Name: Reactive Energy Delivered - Received, Conditional (Cnd kVARh d-r) - [3386,4] as INT64 +// { 3398, 3} , // Name: Apparent Energy Delivered + Received, Conditional (Cnd kVAh d+r) - [3398,4] as INT64 +// { 3414, 3} , // Name: Active Energy Delivered , Last Complete Interval (Inc kWh del C) - [3414,4] as INT64 +// { 3418, 3} , // Name: Active Energy Received , Last Complete Interval (Inc kWh rec C) - [3418,4] as INT64 +// { 3422, 3} , // Name: Active Energy Delivered - Received , Last Complete Interval (Inc kWh d-r C) - [3422,4] as INT64 +// { 3426, 3} , // Name: Reactive Energy Delivered , Last Complete Interval (Inc kVARh del C) - [3426,4] as INT64 +// { 3430, 3} , // Name: Reactive Energy Received , Last Complete Interval (Inc kVARh rec C) - [3430,4] as INT64 +// { 3434, 3} , // Name: Reactive Energy Delivered - Received , Last Complete Interval (Inc kVARh d-r C) - [3434,4] as INT64 +// { 3438, 3} , // Name: Apparent Energy Delivered + Received , Last Complete Interval (Inc kVAh d+r C) - [3438,4] as INT64 +// { 3442, 3} , // Name: Active Energy Delivered , Present Interval (Inc kWh del) - [3442,4] as INT64 +// { 3446, 3} , // Name: Active Energy Received , Present Interval (Inc kWh rec) - [3446,4] as INT64 +// { 3450, 3} , // Name: Active Energy Delivered - Received , Present Interval (Inc kWh d-r) - [3450,4] as INT64 +// { 3454, 3} , // Name: Reactive Energy Delivered , Present Interval (Inc kVARh del) - [3454,4] as INT64 +// { 3458, 3} , // Name: Reactive Energy Received , Present Interval (Inc kVARh rec) - [3458,4] as INT64 +// { 3462, 3} , // Name: Reactive Energy Delivered - Received , Present Interval (Inc kVARh d-r) - [3462,4] as INT64 +// { 3466, 3} , // Name: Apparent Energy Delivered + Received , Present Interval (Inc kVAh d+r) - [3466,4] as INT64 +// { 3470, 3} , // Name: Active Energy Delivered Interval (kWh del int) - [3470,4] as INT64 +// { 3474, 3} , // Name: Active Energy Received Interval (kWh rec int) - [3474,4] as INT64 +// { 3478, 3} , // Name: Reactive Energy Delivered Interval (kVARh del int) - [3478,4] as INT64 +// { 3482, 3} , // Name: Reactive Energy Received Interval (kVARh rec int) - [3482,4] as INT64 +// { 3486, 3} , // Name: Apparent Energy Delivered Interval (kVAh del int) - [3486,4] as INT64 +// { 3490, 3} , // Name: Apparent Energy Received Interval (kVAh rec int) - [3490,4] as INT64 +// { 3650, 2} , // Name: Current A Squared Hours (MU Ia^2h) - [3650,2] as FLOAT32 +// { 3652, 2} , // Name: Current B Square Hours (MU Ib^2h) - [3652,2] as FLOAT32 +// { 3654, 2} , // Name: Current C Square Hours (MU Ic^2h) - [3654,2] as FLOAT32 +// { 3656, 2} , // Name: Voltage A-B Square Hours (MU Vll ab^2h) - [3656,2] as FLOAT32 +// { 3658, 2} , // Name: Voltage B-C Square Hours (MU Vll bc^2h) - [3658,2] as FLOAT32 +// { 3660, 2} , // Name: Voltage C-A Square Hours (MU Vll ca^2h) - [3660,2] as FLOAT32 +// { 3668, 2} , // Name: Current A Squared Hours (MU Ia^2h int) - [3668,2] as FLOAT32 +// { 3670, 2} , // Name: Current B Square Hours (MU Ib^2h int) - [3670,2] as FLOAT32 +// { 3672, 2} , // Name: Current C Square Hours (MU Ic^2h int) - [3672,2] as FLOAT32 +// { 3674, 2} , // Name: Voltage A-B Square Hours (MU Vllab^2h int) - [3674,2] as FLOAT32 +// { 3676, 2} , // Name: Voltage B-C Square Hours (MU Vllbc^2h int) - [3676,2] as FLOAT32 +// { 3678, 2} , // Name: Voltage C-A Square Hours (MU Vllca^2h int) - [3678,2] as FLOAT32 +// { 3680, 2} , // Name: Voltage A-N Square Hours (MU Vlna^2h int) - [3680,2] as FLOAT32 +// { 3682, 2} , // Name: Voltage B-N Square Hours (MU Vlnb^2h int) - [3682,2] as FLOAT32 +// { 3684, 2} , // Name: Voltage C-N Square Hours (MU Vlnc^2h int) - [3684,2] as FLOAT32 +// { 4196, 3} , // Name: Active Energy Delivered Rate 1 (kWh del A) - [4196,4] as INT64 +// { 4200, 3} , // Name: Active Energy Delivered Rate 2 (kWh del B) - [4200,4] as INT64 +// { 4204, 3} , // Name: Active Energy Delivered Rate 3 (kWh del C) - [4204,4] as INT64 +// { 4208, 3} , // Name: Active Energy Delivered Rate 4 (kWh del D) - [4208,4] as INT64 +// { 4228, 3} , // Name: Active Energy Received Rate 1 (kWh rec A) - [4228,4] as INT64 +// { 4232, 3} , // Name: Active Energy Received Rate 2 (kWh rec B) - [4232,4] as INT64 +// { 4236, 3} , // Name: Active Energy Received Rate 3 (kWh rec C) - [4236,4] as INT64 +// { 4240, 3} , // Name: Active Energy Received Rate 4 (kWh rec D) - [4240,4] as INT64 +// { 4260, 3} , // Name: Reactive Energy Delivered Rate 1 (kVARh del A) - [4260,4] as INT64 +// { 4264, 3} , // Name: Reactive Energy Delivered Rate 2 (kVARh del B) - [4264,4] as INT64 +// { 4268, 3} , // Name: Reactive Energy Delivered Rate 3 (kVARh del C) - [4268,4] as INT64 +// { 4272, 3} , // Name: Reactive Energy Delivered Rate 4 (kVARh del D) - [4272,4] as INT64 +// { 4292, 3} , // Name: Reactive Energy Received Rate 1 (kVARh rec A) - [4292,4] as INT64 +// { 4296, 3} , // Name: Reactive Energy Received Rate 2 (kVARh rec B) - [4296,4] as INT64 +// { 4300, 3} , // Name: Reactive Energy Received Rate 3 (kVARh rec C) - [4300,4] as INT64 +// { 4304, 3} , // Name: Reactive Energy Received Rate 4 (kVARh rec D) - [4304,4] as INT64 +// { 4324, 3} , // Name: Apparent Energy Delivered Rate 1 (kVAh del A) - [4324,4] as INT64 +// { 4328, 3} , // Name: Apparent Energy Delivered Rate 2 (kVAh del B) - [4328,4] as INT64 +// { 4332, 3} , // Name: Apparent Energy Delivered Rate 3 (kVAh del C) - [4332,4] as INT64 +// { 4336, 3} , // Name: Apparent Energy Delivered Rate 4 (kVAh del D) - [4336,4] as INT64 +// { 4356, 3} , // Name: Apparent Energy Received Rate 1 (kVAh rec A) - [4356,4] as INT64 +// { 4360, 3} , // Name: Apparent Energy Received Rate 2 (kVAh rec B) - [4360,4] as INT64 +// { 4364, 3} , // Name: Apparent Energy Received Rate 3 (kVAh rec C) - [4364,4] as INT64 +// { 4368, 3} , // Name: Apparent Energy Received Rate 4 (kVAh rec D) - [4368,4] as INT64 +// { 4800, 2} , // Name: Active Energy Delivered Rate 1 (kWh del A) - [4800,2] as FLOAT32 +// { 4802, 2} , // Name: Active Energy Delivered Rate 2 (kWh del B) - [4802,2] as FLOAT32 +// { 4804, 2} , // Name: Active Energy Delivered Rate 3 (kWh del C) - [4804,2] as FLOAT32 +// { 4806, 2} , // Name: Active Energy Delivered Rate 4 (kWh del D) - [4806,2] as FLOAT32 +// { 4816, 2} , // Name: Active Energy Received Rate 1 (kWh rec A) - [4816,2] as FLOAT32 +// { 4818, 2} , // Name: Active Energy Received Rate 2 (kWh rec B) - [4818,2] as FLOAT32 +// { 4820, 2} , // Name: Active Energy Received Rate 3 (kWh rec C) - [4820,2] as FLOAT32 +// { 4822, 2} , // Name: Active Energy Received Rate 4 (kWh rec D) - [4822,2] as FLOAT32 +// { 4832, 2} , // Name: Reactive Energy Delivered Rate 1 (kVARh del A) - [4832,2] as FLOAT32 +// { 4834, 2} , // Name: Reactive Energy Delivered Rate 2 (kVARh del B) - [4834,2] as FLOAT32 +// { 4836, 2} , // Name: Reactive Energy Delivered Rate 3 (kVARh del C) - [4836,2] as FLOAT32 +// { 4838, 2} , // Name: Reactive Energy Delivered Rate 4 (kVARh del D) - [4838,2] as FLOAT32 +// { 4848, 2} , // Name: Reactive Energy Received Rate 1 (kVARh rec A) - [4848,2] as FLOAT32 +// { 4850, 2} , // Name: Reactive Energy Received Rate 2 (kVARh rec B) - [4850,2] as FLOAT32 +// { 4852, 2} , // Name: Reactive Energy Received Rate 3 (kVARh rec C) - [4852,2] as FLOAT32 +// { 4854, 2} , // Name: Reactive Energy Received Rate 4 (kVARh rec D) - [4854,2] as FLOAT32 +// { 4864, 2} , // Name: Apparent Energy Delivered Rate 1 (kVAh del A) - [4864,2] as FLOAT32 +// { 4866, 2} , // Name: Apparent Energy Delivered Rate 2 (kVAh del B) - [4866,2] as FLOAT32 +// { 4868, 2} , // Name: Apparent Energy Delivered Rate 3 (kVAh del C) - [4868,2] as FLOAT32 +// { 4870, 2} , // Name: Apparent Energy Delivered Rate 4 (kVAh del D) - [4870,2] as FLOAT32 +// { 4880, 2} , // Name: Apparent Energy Received Rate 1 (kVAh rec A) - [4880,2] as FLOAT32 +// { 4882, 2} , // Name: Apparent Energy Received Rate 2 (kVAh rec B) - [4882,2] as FLOAT32 +// { 4884, 2} , // Name: Apparent Energy Received Rate 3 (kVAh rec C) - [4884,2] as FLOAT32 +// { 4886, 2} , // Name: Apparent Energy Received Rate 4 (kVAh rec D) - [4886,2] as FLOAT32 +// { 14045, 2} , // Name: Pickup Setpoint (Over I 4 High Limit) - [14045,2] as FLOAT32 +// { 14049, 2} , // Name: Dropout Setpoint (Over I 4 Low Limit) - [14049,2] as FLOAT32 +// { 14325, 2} , // Name: Pickup Setpoint (Over kW sd High Limit) - [14325,2] as FLOAT32 +// { 14329, 2} , // Name: Dropout Setpoint (Over kW sd Low Limit) - [14329,2] as FLOAT32 +// { 14585, 2} , // Name: Pickup Setpoint (Over I a High Limit) - [14585,2] as FLOAT32 +// { 14589, 2} , // Name: Dropout Setpoint (Over I a Low Limit) - [14589,2] as FLOAT32 +// { 14605, 2} , // Name: Pickup Setpoint (Over I b High Limit) - [14605,2] as FLOAT32 +// { 14609, 2} , // Name: Dropout Setpoint (Over I b Low Limit) - [14609,2] as FLOAT32 +// { 14625, 2} , // Name: Pickup Setpoint (Over I c High Limit) - [14625,2] as FLOAT32 +// { 14629, 2} , // Name: Dropout Setpoint (Over I c Low Limit) - [14629,2] as FLOAT32 +// { 21000, 2} , // Name: HS Current A (HS I a) - [21000,2] as FLOAT32 +// { 21002, 2} , // Name: HS Current B (HS I b) - [21002,2] as FLOAT32 +// { 21004, 2} , // Name: HS Current C (HS I c) - [21004,2] as FLOAT32 +// { 21006, 2} , // Name: HS Current N (HS I 4) - [21006,2] as FLOAT32 +// { 21008, 2} , // Name: HS Current G (HS I 5) - [21008,2] as FLOAT32 +// { 21010, 2} , // Name: HS Current Avg (HS I avg) - [21010,2] as FLOAT32 +// { 21016, 2} , // Name: HS Frequency (HS Freq) - [21016,2] as FLOAT32 +// { 21018, 2} , // Name: HS Voltage, A-B (HS Vll ab) - [21018,2] as FLOAT32 +// { 21020, 2} , // Name: HS Voltage, B-C (HS Vll bc) - [21020,2] as FLOAT32 +// { 21022, 2} , // Name: HS Voltage, C-A (HS Vll ca) - [21022,2] as FLOAT32 +// { 21024, 2} , // Name: HS Voltage, L-L Average (HS Vll avg) - [21024,2] as FLOAT32 +// { 21026, 2} , // Name: HS Voltage, A-N (HS Vln a) - [21026,2] as FLOAT32 +// { 21028, 2} , // Name: HS Voltage, B-N (HS Vln b) - [21028,2] as FLOAT32 +// { 21030, 2} , // Name: HS Voltage, C-N (HS Vln c) - [21030,2] as FLOAT32 +// { 21034, 2} , // Name: HS Voltage, L-N Average (HS Vln avg) - [21034,2] as FLOAT32 +// { 21040, 2} , // Name: HS Active Power A (HS kW a) - [21040,2] as FLOAT32 +// { 21042, 2} , // Name: HS Active Power B (HS kW b) - [21042,2] as FLOAT32 +// { 21044, 2} , // Name: HS Active Power C (HS kW c) - [21044,2] as FLOAT32 +// { 21046, 2} , // Name: HS Active Power Total (HS kW tot) - [21046,2] as FLOAT32 +// { 21048, 2} , // Name: HS Reactive Power A (HS kVAR a) - [21048,2] as FLOAT32 +// { 21050, 2} , // Name: HS Reactive Power B (HS kVAR b) - [21050,2] as FLOAT32 +// { 21052, 2} , // Name: HS Reactive Power C (HS kVAR c) - [21052,2] as FLOAT32 +// { 21054, 2} , // Name: HS Reactive Power Total (HS kVAR tot) - [21054,2] as FLOAT32 +// { 21056, 2} , // Name: HS Apparent Power A (HS kVA a) - [21056,2] as FLOAT32 +// { 21058, 2} , // Name: HS Apparent Power B (HS kVA b) - [21058,2] as FLOAT32 +// { 21060, 2} , // Name: HS Apparent Power C (HS kVA c) - [21060,2] as FLOAT32 +// { 21062, 2} , // Name: HS Apparent Power Total (HS kVA tot) - [21062,2] as FLOAT32 +// { 21358, 2} , // Name: K-Factor A (I1 K Factor) - [21358,2] as FLOAT32 +// { 21360, 2} , // Name: K-Factor B (I2 K Factor) - [21360,2] as FLOAT32 +// { 21362, 2} , // Name: K-Factor C (I3 K Factor) - [21362,2] as FLOAT32 +// { 27218, 2} , // Name: Min Current A (I a mn) - [27218,2] as FLOAT32 +// { 27220, 2} , // Name: Min Current B (I b mn) - [27220,2] as FLOAT32 +// { 27222, 2} , // Name: Min Current C (I c mn) - [27222,2] as FLOAT32 +// { 27224, 2} , // Name: Min Current N (I4 mn) - [27224,2] as FLOAT32 +// { 27226, 2} , // Name: Min Current G (I5 mn) - [27226,2] as FLOAT32 +// { 27228, 2} , // Name: Min Current Avg (I avg mn) - [27228,2] as FLOAT32 +// { 27238, 2} , // Name: Min Voltage A-B (Vll ab mn) - [27238,2] as FLOAT32 +// { 27240, 2} , // Name: Min Voltage B-C (Vll bc mn) - [27240,2] as FLOAT32 +// { 27242, 2} , // Name: Min Voltage C-A (Vll ca mn) - [27242,2] as FLOAT32 +// { 27244, 2} , // Name: Min Voltage L-L Avg (Vll avg mn) - [27244,2] as FLOAT32 +// { 27246, 2} , // Name: Min Voltage A-N (Vln a mn) - [27246,2] as FLOAT32 +// { 27248, 2} , // Name: Min Voltage B-N (Vln b mn) - [27248,2] as FLOAT32 +// { 27250, 2} , // Name: Min Voltage C-N (Vln c mn) - [27250,2] as FLOAT32 +// { 27254, 2} , // Name: Min Voltage L-N Avg (Vln avg mn) - [27254,2] as FLOAT32 +// { 27278, 2} , // Name: Min Active Power Total (kW tot mn) - [27278,2] as FLOAT32 +// { 27286, 2} , // Name: Min Reactive Power Total (kVAR tot mn) - [27286,2] as FLOAT32 +// { 27294, 2} , // Name: Min Apparent Power Total (kVA tot mn) - [27294,2] as FLOAT32 +// { 27616, 2} , // Name: Min Frequency (Freq mn) - [27616,2] as FLOAT32 +// { 27644, 2} , // Name: Current A Low (I a low) - [27644,2] as FLOAT32 +// { 27646, 2} , // Name: Current B Low (I b low) - [27646,2] as FLOAT32 +// { 27648, 2} , // Name: Current C Low (I c low) - [27648,2] as FLOAT32 +// { 27650, 2} , // Name: Current N Low (I4 low) - [27650,2] as FLOAT32 +// { 27652, 2} , // Name: Current Avg Low (I avg low) - [27652,2] as FLOAT32 +// { 27654, 2} , // Name: Voltage A-B Low (Vll ab low) - [27654,2] as FLOAT32 +// { 27656, 2} , // Name: Voltage B-C Low (Vll bc low) - [27656,2] as FLOAT32 +// { 27658, 2} , // Name: Voltage C-A Low (Vll ca low) - [27658,2] as FLOAT32 +// { 27660, 2} , // Name: Voltage L-L Avg Low (Vll avg low) - [27660,2] as FLOAT32 +// { 27672, 2} , // Name: Active Power Low (kW tot low) - [27672,2] as FLOAT32 +// { 27674, 2} , // Name: Reactive Power Low (kVAR tot low) - [27674,2] as FLOAT32 +// { 27676, 2} , // Name: Apparent Power Low (kVA tot low) - [27676,2] as FLOAT32 +// { 27682, 2} , // Name: Frequency Low (Freq low) - [27682,2] as FLOAT32 +// { 27694, 2} , // Name: Max Current A (I a mx) - [27694,2] as FLOAT32 +// { 27696, 2} , // Name: Max Current B (I b mx) - [27696,2] as FLOAT32 +// { 27698, 2} , // Name: Max Current C (I c mx) - [27698,2] as FLOAT32 +// { 27700, 2} , // Name: Max Current N (I4 mx) - [27700,2] as FLOAT32 +// { 27702, 2} , // Name: Max Current G (I5 mx) - [27702,2] as FLOAT32 +// { 27704, 2} , // Name: Max Current Avg (I avg mx) - [27704,2] as FLOAT32 +// { 27714, 2} , // Name: Max Voltage A-B (Vll ab mx) - [27714,2] as FLOAT32 +// { 27716, 2} , // Name: Max Voltage B-C (Vll bc mx) - [27716,2] as FLOAT32 +// { 27718, 2} , // Name: Max Voltage C-A (Vll ca mx) - [27718,2] as FLOAT32 +// { 27720, 2} , // Name: Max Voltage L-L Avg (Vll avg mx) - [27720,2] as FLOAT32 +// { 27722, 2} , // Name: Max Voltage A-N (Vln a mx) - [27722,2] as FLOAT32 +// { 27724, 2} , // Name: Max Voltage B-N (Vln b mx) - [27724,2] as FLOAT32 +// { 27726, 2} , // Name: Max Voltage C-N (Vln c mx) - [27726,2] as FLOAT32 +// { 27730, 2} , // Name: Max Voltage L-N Avg (Vln avg mx) - [27730,2] as FLOAT32 +// { 27754, 2} , // Name: Max Active Power Total (kW tot mx) - [27754,2] as FLOAT32 +// { 27762, 2} , // Name: Max Reactive Power Total (kVAR tot mx) - [27762,2] as FLOAT32 +// { 27770, 2} , // Name: Max Apparent Power Total (kVA tot mx) - [27770,2] as FLOAT32 +// { 28092, 2} , // Name: Max Frequency (Freq mx) - [28092,2] as FLOAT32 +// { 28120, 2} , // Name: Current A High (I a high) - [28120,2] as FLOAT32 +// { 28122, 2} , // Name: Current B High (I b high) - [28122,2] as FLOAT32 +// { 28124, 2} , // Name: Current C High (I c high) - [28124,2] as FLOAT32 +// { 28126, 2} , // Name: Current N High (I 4 high) - [28126,2] as FLOAT32 +// { 28128, 2} , // Name: Current Avg High (I avg high) - [28128,2] as FLOAT32 +// { 28130, 2} , // Name: Voltage A-B High (Vll ab high) - [28130,2] as FLOAT32 +// { 28132, 2} , // Name: Voltage B-C High (Vll bc high) - [28132,2] as FLOAT32 +// { 28134, 2} , // Name: Voltage C-A High (Vll ca high) - [28134,2] as FLOAT32 +// { 28136, 2} , // Name: Voltage L-L Avg High (Vll avg high) - [28136,2] as FLOAT32 +// { 28162, 2} , // Name: Active Power High (kW tot high) - [28162,2] as FLOAT32 +// { 28164, 2} , // Name: Reactive Power High (kVAR tot high) - [28164,2] as FLOAT32 +// { 28166, 2} , // Name: Apparent Power High (kVA tot high) - [28166,2] as FLOAT32 +// { 28172, 2} , // Name: Frequency High (Freq high) - [28172,2] as FLOAT32 +// { 28180, 2} , // Name: Current A Mean (I a mean) - [28180,2] as FLOAT32 +// { 28182, 2} , // Name: Current B Mean (I b mean) - [28182,2] as FLOAT32 +// { 28184, 2} , // Name: Current C Mean (I c mean) - [28184,2] as FLOAT32 +// { 28186, 2} , // Name: Current N Mean (I 4 mean) - [28186,2] as FLOAT32 +// { 28188, 2} , // Name: Current Avg Mean (I avg mean) - [28188,2] as FLOAT32 +// { 28190, 2} , // Name: Voltage A-B Mean (Vll ab mean) - [28190,2] as FLOAT32 +// { 28192, 2} , // Name: Voltage B-C Mean (Vll bc mean) - [28192,2] as FLOAT32 +// { 28194, 2} , // Name: Voltage C-A Mean (Vll ca mean) - [28194,2] as FLOAT32 +// { 28196, 2} , // Name: Voltage L-L Avg Mean (Vll avg mean) - [28196,2] as FLOAT32 +// { 28208, 2} , // Name: Active Power Mean (kW tot mean) - [28208,2] as FLOAT32 +// { 28210, 2} , // Name: Reactive Power Mean (kVAR tot mean) - [28210,2] as FLOAT32 +// { 28212, 2} , // Name: Apparent Power Mean (kVA tot mean) - [28212,2] as FLOAT32 +// { 28218, 2} , // Name: Frequency Mean (Freq mean) - [28218,2] as FLOAT32 +// { 29884, 2} , // Name: Current A Last Demand (I a sd) - [29884,2] as FLOAT32 +// { 29886, 2} , // Name: Current A Predicted Demand (I a sd pred) - [29886,2] as FLOAT32 +// { 29888, 0} , // Name: Current A Peak Demand (I a sd mx) - [29888,6] as TIMESTAMPED_FLOAT32 +// { 29898, 2} , // Name: Current B Last Demand (I b sd) - [29898,2] as FLOAT32 +// { 29900, 2} , // Name: Current B Predicted Demand (I b sd pred) - [29900,2] as FLOAT32 +// { 29902, 0} , // Name: Current B Peak Demand (I b sd mx) - [29902,6] as TIMESTAMPED_FLOAT32 +// { 29912, 2} , // Name: Current C Last Demand (I c sd) - [29912,2] as FLOAT32 +// { 29914, 2} , // Name: Current C Predicted Demand (I c sd pred) - [29914,2] as FLOAT32 +// { 29916, 0} , // Name: Current C Peak Demand (I c sd mx) - [29916,6] as TIMESTAMPED_FLOAT32 +// { 29926, 2} , // Name: Current 4 Last Demand (I 4 sd) - [29926,2] as FLOAT32 +// { 29928, 2} , // Name: Current 4 Predicted Demand (I 4 sd pred) - [29928,2] as FLOAT32 +// { 29930, 0} , // Name: Current 4 Peak Demand (I 4 sd mx) - [29930,6] as TIMESTAMPED_FLOAT32 +// { 29940, 2} , // Name: Current Avg Last Demand (I avg sd) - [29940,2] as FLOAT32 +// { 29942, 2} , // Name: Current Avg Predicted Demand (I avg sd pred) - [29942,2] as FLOAT32 +// { 29944, 0} , // Name: Current Avg Peak Demand (I avg sd mx) - [29944,6] as TIMESTAMPED_FLOAT32 +// { 29954, 2} , // Name: Active Power Last Demand (kW sd del-rec) - [29954,2] as FLOAT32 +// { 29956, 2} , // Name: Active Power Predicted Demand (kW pr del-rec) - [29956,2] as FLOAT32 +// { 29958, 0} , // Name: Active Power Peak Demand (kW sd mx d-r) - [29958,6] as TIMESTAMPED_FLOAT32 +// { 29968, 2} , // Name: Active Power Del Last Demand (kW sd del) - [29968,2] as FLOAT32 +// { 29970, 2} , // Name: Active Power Del Predicted Demand (kW pr del) - [29970,2] as FLOAT32 +// { 29972, 0} , // Name: Active Power Del Peak Demand (kW sd mx del) - [29972,6] as TIMESTAMPED_FLOAT32 +// { 29982, 2} , // Name: Active Power Rec Last Demand (kW sd rec) - [29982,2] as FLOAT32 +// { 29984, 2} , // Name: Active Power Rec Predicted Demand (kW pr rec) - [29984,2] as FLOAT32 +// { 29986, 0} , // Name: Active Power Rec Peak Demand (kW sd mx rec) - [29986,6] as TIMESTAMPED_FLOAT32 +// { 29996, 2} , // Name: Active Power Total Last Demand (kW sd del+rec) - [29996,2] as FLOAT32 +// { 29998, 2} , // Name: Active Power Total Predicted Demand (kW pr del+rec) - [29998,2] as FLOAT32 +// { 30000, 0} , // Name: Active Power Total Peak Demand (kW sd mx d+r) - [30000,6] as TIMESTAMPED_FLOAT32 +// { 30010, 2} , // Name: Reactive Power Last Demand (kVAR sd del-rec) - [30010,2] as FLOAT32 +// { 30012, 2} , // Name: Reactive Power Predicted Demand (kVAR pr del-rec) - [30012,2] as FLOAT32 +// { 30014, 0} , // Name: Reactive Power Peak Demand (kVAR sd mx d-r) - [30014,6] as TIMESTAMPED_FLOAT32 +// { 30024, 2} , // Name: Reactive Power Del Last Demand (kVAR sd del) - [30024,2] as FLOAT32 +// { 30026, 2} , // Name: Reactive Power Del Predicted Demand (kVAR pr del) - [30026,2] as FLOAT32 +// { 30028, 0} , // Name: Reactive Power Del Peak Demand (kVAR sd mx del) - [30028,6] as TIMESTAMPED_FLOAT32 +// { 30038, 2} , // Name: Reactive Power Rec Last Demand (kVAR sd rec) - [30038,2] as FLOAT32 +// { 30040, 2} , // Name: Reactive Power Rec Predicted Demand (kVAR pr rec) - [30040,2] as FLOAT32 +// { 30042, 0} , // Name: Reactive Power Rec Peak Demand (kVAR sd mx rec) - [30042,6] as TIMESTAMPED_FLOAT32 +// { 30052, 2} , // Name: Reactive Power Total Last Demand (kVAR sd del+rec) - [30052,2] as FLOAT32 +// { 30054, 2} , // Name: Reactive Power Total Predicted Demand (kVAR pr del+rec) - [30054,2] as FLOAT32 +// { 30056, 0} , // Name: Reactive Power Total Peak Demand (kVAR sd mx d+r) - [30056,6] as TIMESTAMPED_FLOAT32 +// { 30066, 2} , // Name: Apparent Power Last Demand (kVA sd del-rec) - [30066,2] as FLOAT32 +// { 30068, 2} , // Name: Apparent Power Predicted Demand (kVA pr del-rec) - [30068,2] as FLOAT32 +// { 30070, 0} , // Name: Apparent Power Peak Demand (kVA sd mx d-r) - [30070,6] as TIMESTAMPED_FLOAT32 +// { 30080, 2} , // Name: Apparent Power Del Last Demand (kVA sd del) - [30080,2] as FLOAT32 +// { 30082, 2} , // Name: Apparent Power Del Predicted Demand (kVA pr del) - [30082,2] as FLOAT32 +// { 30084, 0} , // Name: Apparent Power Del Peak Demand (kVA sd mx del) - [30084,6] as TIMESTAMPED_FLOAT32 +// { 30094, 2} , // Name: Apparent Power Rec Last Demand (kVA sd rec) - [30094,2] as FLOAT32 +// { 30096, 2} , // Name: Apparent Power Rec Predicted Demand (kVA pr rec) - [30096,2] as FLOAT32 +// { 30098, 0} , // Name: Apparent Power Rec Peak Demand (kVA sd mx rec) - [30098,6] as TIMESTAMPED_FLOAT32 +// { 30108, 2} , // Name: Apparent Power Total Last Demand (kVA sd del+rec) - [30108,2] as FLOAT32 +// { 30110, 2} , // Name: Apparent Power Total Predicted Demand (kVA pr del+rec) - [30110,2] as FLOAT32 +// { 30112, 0} , // Name: Apparent Power Total Peak Demand (kVA sd mx d+r) - [30112,6] as TIMESTAMPED_FLOAT32 +// { 30222, 2} , // Name: Active Power Del A Last Demand (kW sd del A) - [30222,2] as FLOAT32 +// { 30224, 2} , // Name: Active Power Del A Predicted Demand (kW pr del A) - [30224,2] as FLOAT32 +// { 30226, 0} , // Name: Active Power Del A Peak Demand (kW sd mx del A) - [30226,6] as TIMESTAMPED_FLOAT32 +// { 30236, 2} , // Name: Active Power Del B Last Demand (kW sd del B) - [30236,2] as FLOAT32 +// { 30238, 2} , // Name: Active Power Del B Predicted Demand (kW pr del B) - [30238,2] as FLOAT32 +// { 30240, 0} , // Name: Active Power Del B Peak Demand (kW sd mx del B) - [30240,6] as TIMESTAMPED_FLOAT32 +// { 30250, 2} , // Name: Active Power Del C Last Demand (kW sd del C) - [30250,2] as FLOAT32 +// { 30252, 2} , // Name: Active Power Del C Predicted Demand (kW pr del C) - [30252,2] as FLOAT32 +// { 30254, 0} , // Name: Active Power Del C Peak Demand (kW sd mx del C) - [30254,6] as TIMESTAMPED_FLOAT32 +// { 30264, 2} , // Name: Active Power Del D Last Demand (kW sd del D) - [30264,2] as FLOAT32 +// { 30266, 2} , // Name: Active Power Del D Predicted Demand (kW pr del D) - [30266,2] as FLOAT32 +// { 30268, 0} , // Name: Active Power Del D Peak Demand (kW sd mx del D) - [30268,6] as TIMESTAMPED_FLOAT32 +// { 30278, 2} , // Name: Active Power Rec A Last Demand (kW sd rec A) - [30278,2] as FLOAT32 +// { 30280, 2} , // Name: Active Power Rec A Predicted Demand (kW pr rec A) - [30280,2] as FLOAT32 +// { 30282, 0} , // Name: Active Power Rec A Peak Demand (kW sd mx rec A) - [30282,6] as TIMESTAMPED_FLOAT32 +// { 30292, 2} , // Name: Active Power Rec B Last Demand (kW sd rec B) - [30292,2] as FLOAT32 +// { 30294, 2} , // Name: Active Power Rec B Predicted Demand (kW pr rec B) - [30294,2] as FLOAT32 +// { 30296, 0} , // Name: Active Power Rec B Peak Demand (kW sd mx rec B) - [30296,6] as TIMESTAMPED_FLOAT32 +// { 30306, 2} , // Name: Active Power Rec C Last Demand (kW sd rec C) - [30306,2] as FLOAT32 +// { 30308, 2} , // Name: Active Power Rec C Predicted Demand (kW pr rec C) - [30308,2] as FLOAT32 +// { 30310, 0} , // Name: Active Power Rec C Peak Demand (kW sd mx rec C) - [30310,6] as TIMESTAMPED_FLOAT32 +// { 30320, 2} , // Name: Active Power Rec D Last Demand (kW sd rec D) - [30320,2] as FLOAT32 +// { 30322, 2} , // Name: Active Power Rec D Predicted Demand (kW pr rec D) - [30322,2] as FLOAT32 +// { 30324, 0} , // Name: Active Power Rec D Peak Demand (kW sd mx rec D) - [30324,6] as TIMESTAMPED_FLOAT32 +// { 30334, 2} , // Name: Reactive Power Del A Last Demand (kVAR sd del A) - [30334,2] as FLOAT32 +// { 30336, 2} , // Name: Reactive Power Del A Predicted Demand (kVAR pr del A) - [30336,2] as FLOAT32 +// { 30338, 0} , // Name: Reactive Power Del A Peak Demand (kVAR sd mx d A) - [30338,6] as TIMESTAMPED_FLOAT32 +// { 30348, 2} , // Name: Reactive Power Del B Last Demand (kVAR sd del B) - [30348,2] as FLOAT32 +// { 30350, 2} , // Name: Reactive Power Del B Predicted Demand (kVAR pr del B) - [30350,2] as FLOAT32 +// { 30352, 0} , // Name: Reactive Power Del B Peak Demand (kVAR sd mx d B) - [30352,6] as TIMESTAMPED_FLOAT32 +// { 30362, 2} , // Name: Reactive Power Del C Last Demand (kVAR sd del C) - [30362,2] as FLOAT32 +// { 30364, 2} , // Name: Reactive Power Del C Predicted Demand (kVAR pr del C) - [30364,2] as FLOAT32 +// { 30366, 0} , // Name: Reactive Power Del C Peak Demand (kVAR sd mx d C) - [30366,6] as TIMESTAMPED_FLOAT32 +// { 30376, 2} , // Name: Reactive Power Del D Last Demand (kVAR sd del D) - [30376,2] as FLOAT32 +// { 30378, 2} , // Name: Reactive Power Del D Predicted Demand (kVAR pr del D) - [30378,2] as FLOAT32 +// { 30380, 0} , // Name: Reactive Power Del D Peak Demand (kVAR sd mx d D) - [30380,6] as TIMESTAMPED_FLOAT32 +// { 30390, 2} , // Name: Reactive Power Rec A Last Demand (kVAR sd rec A) - [30390,2] as FLOAT32 +// { 30392, 2} , // Name: Reactive Power Rec A Predicted Demand (kVAR pr rec A) - [30392,2] as FLOAT32 +// { 30394, 0} , // Name: Reactive Power Rec A Peak Demand (kVAR sd mx r A) - [30394,6] as TIMESTAMPED_FLOAT32 +// { 30404, 2} , // Name: Reactive Power Rec B Last Demand (kVAR sd rec B) - [30404,2] as FLOAT32 +// { 30406, 2} , // Name: Reactive Power Rec B Predicted Demand (kVAR pr rec B) - [30406,2] as FLOAT32 +// { 30408, 0} , // Name: Reactive Power Rec B Peak Demand (kVAR sd mx r B) - [30408,6] as TIMESTAMPED_FLOAT32 +// { 30418, 2} , // Name: Reactive Power Rec C Last Demand (kVAR sd rec C) - [30418,2] as FLOAT32 +// { 30420, 2} , // Name: Reactive Power Rec C Predicted Demand (kVAR pr rec C) - [30420,2] as FLOAT32 +// { 30422, 0} , // Name: Reactive Power Rec C Peak Demand (kVAR sd mx r C) - [30422,6] as TIMESTAMPED_FLOAT32 +// { 30432, 2} , // Name: Reactive Power Rec D Last Demand (kVAR sd rec D) - [30432,2] as FLOAT32 +// { 30434, 2} , // Name: Reactive Power Rec D Predicted Demand (kVAR pr rec D) - [30434,2] as FLOAT32 +// { 30436, 0} , // Name: Reactive Power Rec D Peak Demand (kVAR sd mx r D) - [30436,6] as TIMESTAMPED_FLOAT32 +// { 30446, 2} , // Name: Apparent Power Del A Last Demand (kVA sd del A) - [30446,2] as FLOAT32 +// { 30448, 2} , // Name: Apparent Power Del A Predicted Demand (kVA pr del A) - [30448,2] as FLOAT32 +// { 30450, 0} , // Name: Apparent Power Del A Peak Demand (kVA sd mx del A) - [30450,6] as TIMESTAMPED_FLOAT32 +// { 30460, 2} , // Name: Apparent Power Del B Last Demand (kVA sd del B) - [30460,2] as FLOAT32 +// { 30462, 2} , // Name: Apparent Power Del B Predicted Demand (kVA pr del B) - [30462,2] as FLOAT32 +// { 30464, 0} , // Name: Apparent Power Del B Peak Demand (kVA sd mx del B) - [30464,6] as TIMESTAMPED_FLOAT32 +// { 30474, 2} , // Name: Apparent Power Del C Last Demand (kVA sd del C) - [30474,2] as FLOAT32 +// { 30476, 2} , // Name: Apparent Power Del C Predicted Demand (kVA pr del C) - [30476,2] as FLOAT32 +// { 30478, 0} , // Name: Apparent Power Del C Peak Demand (kVA sd mx del C) - [30478,6] as TIMESTAMPED_FLOAT32 +// { 30488, 2} , // Name: Apparent Power Del D Last Demand (kVA sd del D) - [30488,2] as FLOAT32 +// { 30490, 2} , // Name: Apparent Power Del D Predicted Demand (kVA pr del D) - [30490,2] as FLOAT32 +// { 30492, 0} , // Name: Apparent Power Del D Peak Demand (kVA sd mx del D) - [30492,6] as TIMESTAMPED_FLOAT32 +// { 30502, 2} , // Name: Apparent Power Rec A Last Demand (kVA sd rec A) - [30502,2] as FLOAT32 +// { 30504, 2} , // Name: Apparent Power Rec A Predicted Demand (kVA pr rec A) - [30504,2] as FLOAT32 +// { 30506, 0} , // Name: Apparent Power Rec A Peak Demand (kVA sd mx rec A) - [30506,6] as TIMESTAMPED_FLOAT32 +// { 30516, 2} , // Name: Apparent Power Rec B Last Demand (kVA sd rec B) - [30516,2] as FLOAT32 +// { 30518, 2} , // Name: Apparent Power Rec B Predicted Demand (kVA pr rec B) - [30518,2] as FLOAT32 +// { 30520, 0} , // Name: Apparent Power Rec B Peak Demand (kVA sd mx rec B) - [30520,6] as TIMESTAMPED_FLOAT32 +// { 30530, 2} , // Name: Apparent Power Rec C Last Demand (kVA sd rec C) - [30530,2] as FLOAT32 +// { 30532, 2} , // Name: Apparent Power Rec C Predicted Demand (kVA pr rec C) - [30532,2] as FLOAT32 +// { 30534, 0} , // Name: Apparent Power Rec C Peak Demand (kVA sd mx rec C) - [30534,6] as TIMESTAMPED_FLOAT32 +// { 30544, 2} , // Name: Apparent Power Rec D Last Demand (kVA sd rec D) - [30544,2] as FLOAT32 +// { 30546, 2} , // Name: Apparent Power Rec D Predicted Demand (kVA pr rec D) - [30546,2] as FLOAT32 +// { 30548, 0} , // Name: Apparent Power Rec D Peak Demand (kVA sd mx rec D) - [30548,6] as TIMESTAMPED_FLOAT32 +// { 30558, 2} , // Name: Active Power Q1 Last Demand (kW sd Q1) - [30558,2] as FLOAT32 +// { 30560, 2} , // Name: Active Power Q1 Predicted Demand (kW pr Q1) - [30560,2] as FLOAT32 +// { 30562, 0} , // Name: Active Power Q1 Peak Demand (kW sd mx Q1) - [30562,6] as TIMESTAMPED_FLOAT32 +// { 30572, 2} , // Name: Active Power Q2 Last Demand (kW sd Q2) - [30572,2] as FLOAT32 +// { 30574, 2} , // Name: Active Power Q2 Predicted Demand (kW pr Q2) - [30574,2] as FLOAT32 +// { 30576, 0} , // Name: Active Power Q2 Peak Demand (kW sd mx Q2) - [30576,6] as TIMESTAMPED_FLOAT32 +// { 30586, 2} , // Name: Active Power Q3 Last Demand (kW sd Q3) - [30586,2] as FLOAT32 +// { 30588, 2} , // Name: Active Power Q3 Predicted Demand (kW pr Q3) - [30588,2] as FLOAT32 +// { 30590, 0} , // Name: Active Power Q3 Peak Demand (kW sd mx Q3) - [30590,6] as TIMESTAMPED_FLOAT32 +// { 30600, 2} , // Name: Active Power Q4 Last Demand (kW sd Q4) - [30600,2] as FLOAT32 +// { 30602, 2} , // Name: Active Power Q4 Predicted Demand (kW pr Q4) - [30602,2] as FLOAT32 +// { 30604, 0} , // Name: Active Power Q4 Peak Demand (kW sd mx Q4) - [30604,6] as TIMESTAMPED_FLOAT32 +// { 30614, 2} , // Name: Reactive Power Q1 Last Demand (kVAR sd Q1) - [30614,2] as FLOAT32 +// { 30616, 2} , // Name: Reactive Power Q1 Predicted Demand (kVAR pr Q1) - [30616,2] as FLOAT32 +// { 30618, 0} , // Name: Reactive Power Q1 Peak Demand (kVAR sd mx Q1) - [30618,6] as TIMESTAMPED_FLOAT32 +// { 30628, 2} , // Name: Reactive Power Q2 Last Demand (kVAR sd Q2) - [30628,2] as FLOAT32 +// { 30630, 2} , // Name: Reactive Power Q2 Predicted Demand (kVAR pr Q2) - [30630,2] as FLOAT32 +// { 30632, 0} , // Name: Reactive Power Q2 Peak Demand (kVAR sd mx Q2) - [30632,6] as TIMESTAMPED_FLOAT32 +// { 30642, 2} , // Name: Reactive Power Q3 Last Demand (kVAR sd Q3) - [30642,2] as FLOAT32 +// { 30644, 2} , // Name: Reactive Power Q3 Predicted Demand (kVAR pr Q3) - [30644,2] as FLOAT32 +// { 30646, 0} , // Name: Reactive Power Q3 Peak Demand (kVAR sd mx Q3) - [30646,6] as TIMESTAMPED_FLOAT32 +// { 30656, 2} , // Name: Reactive Power Q4 Last Demand (kVAR sd Q4) - [30656,2] as FLOAT32 +// { 30658, 2} , // Name: Reactive Power Q4 Predicted Demand (kVAR pr Q4) - [30658,2] as FLOAT32 +// { 30660, 0} , // Name: Reactive Power Q4 Peak Demand (kVAR sd mx Q4) - [30660,6] as TIMESTAMPED_FLOAT32 +// { 30670, 2} , // Name: Apparent Power Q1 Last Demand (kVA sd Q1) - [30670,2] as FLOAT32 +// { 30672, 2} , // Name: Apparent Power Q1 Predicted Demand (kVA pr Q1) - [30672,2] as FLOAT32 +// { 30674, 0} , // Name: Apparent Power Q1 Peak Demand (kVA sd mx Q1) - [30674,6] as TIMESTAMPED_FLOAT32 +// { 30684, 2} , // Name: Apparent Power Q2 Last Demand (kVA sd Q2) - [30684,2] as FLOAT32 +// { 30686, 2} , // Name: Apparent Power Q2 Predicted Demand (kVA pr Q2) - [30686,2] as FLOAT32 +// { 30688, 0} , // Name: Apparent Power Q2 Peak Demand (kVA sd mx Q2) - [30688,6] as TIMESTAMPED_FLOAT32 +// { 30698, 2} , // Name: Apparent Power Q3 Last Demand (kVA sd Q3) - [30698,2] as FLOAT32 +// { 30700, 2} , // Name: Apparent Power Q3 Predicted Demand (kVA pr Q3) - [30700,2] as FLOAT32 +// { 30702, 0} , // Name: Apparent Power Q3 Peak Demand (kVA sd mx Q3) - [30702,6] as TIMESTAMPED_FLOAT32 +// { 30712, 2} , // Name: Apparent Power Q4 Last Demand (kVA sd Q4) - [30712,2] as FLOAT32 +// { 30714, 2} , // Name: Apparent Power Q4 Predicted Demand (kVA pr Q4) - [30714,2] as FLOAT32 +// { 30716, 0} , // Name: Apparent Power Q4 Peak Demand (kVA sd mx Q4) - [30716,6] as TIMESTAMPED_FLOAT32 +// { 30822, 2} , // Name: Block Demand Active Power (kVA co kW d-r) - [30822,2] as FLOAT32 +// { 30824, 2} , // Name: Block Demand Active Power Into the Load (kVA co kW del) - [30824,2] as FLOAT32 +// { 30826, 2} , // Name: Block Demand Active Power Out of the Load (kVA co kW rec) - [30826,2] as FLOAT32 +// { 30828, 2} , // Name: Block Demand Active Power Total (kVA co kW d+r) - [30828,2] as FLOAT32 +// { 30830, 2} , // Name: Block Demand Reactive Power (kVA co kVAR d-r) - [30830,2] as FLOAT32 +// { 30832, 2} , // Name: Block Demand Reactive Power Into the Load (kVA co kVAR del) - [30832,2] as FLOAT32 +// { 30834, 2} , // Name: Block Demand Reactive Power Out of the Load (kVA co kVAR rec) - [30834,2] as FLOAT32 +// { 30836, 2} , // Name: Block Demand Reactive Power Total (kVA co kVAR d+r) - [30836,2] as FLOAT32 +// { 30838, 2} , // Name: Block Demand Active Power (kVAR co kW d-r) - [30838,2] as FLOAT32 +// { 30840, 2} , // Name: Block Demand Active Power Into the Load (kVAR co kW del) - [30840,2] as FLOAT32 +// { 30842, 2} , // Name: Block Demand Active Power Out of the Load (kVAR co kW rec) - [30842,2] as FLOAT32 +// { 30844, 2} , // Name: Block Demand Active Power Total (kVAR co kW d+r) - [30844,2] as FLOAT32 +// { 30846, 2} , // Name: Block Demand Apparent Power (kVAR co kVA d-r) - [30846,2] as FLOAT32 +// { 30848, 2} , // Name: Block Demand Apparent Power Into the Load (kVAR co kVA del) - [30848,2] as FLOAT32 +// { 30850, 2} , // Name: Block Demand Apparent Power Out of the Load (kVAR co kVA rec) - [30850,2] as FLOAT32 +// { 30852, 2} , // Name: Block Demand Apparent Power Total (kVAR co kVA d+r) - [30852,2] as FLOAT32 +// { 30854, 2} , // Name: Block Demand Reactive Power (kW co kVAR d-r) - [30854,2] as FLOAT32 +// { 30856, 2} , // Name: Block Demand Reactive Power Into the Load (kW co kVAR del) - [30856,2] as FLOAT32 +// { 30858, 2} , // Name: Block Demand Reactive Power Out of the Load (kW co kVAR rec) - [30858,2] as FLOAT32 +// { 30860, 2} , // Name: Block Demand Reactive Power Total (kW co kVAR d+r) - [30860,2] as FLOAT32 +// { 30862, 2} , // Name: Block Demand Apparent Power (kW co kVA d-r) - [30862,2] as FLOAT32 +// { 30864, 2} , // Name: Block Demand Apparent Power Into the Load (kW co kVA del) - [30864,2] as FLOAT32 +// { 30866, 2} , // Name: Block Demand Apparent Power Out of the Load (kW co kVA rec) - [30866,2] as FLOAT32 +// { 30868, 2} , // Name: Block Demand Apparent Power Total (kW co kVA d+r) - [30868,2] as FLOAT32 +// { 30870, 3} , // Name: Active Energy Delivered Rate 1 (PB kWh del A) - [30870,4] as INT64 +// { 30874, 3} , // Name: Active Energy Delivered Rate 2 (PB kWh del B) - [30874,4] as INT64 +// { 30878, 3} , // Name: Active Energy Delivered Rate 3 (PB kWh del C) - [30878,4] as INT64 +// { 30882, 3} , // Name: Active Energy Delivered Rate 4 (PB kWh del D) - [30882,4] as INT64 +// { 30886, 3} , // Name: Active Energy Delivered (PB kWh del) - [30886,4] as INT64 +// { 30890, 3} , // Name: Active Energy Received (PB kWh rec) - [30890,4] as INT64 +// { 30894, 3} , // Name: Reactive Energy Delivered (PB kVARh del) - [30894,4] as INT64 +// { 30898, 3} , // Name: Reactive Energy Received (PB kVARh rec) - [30898,4] as INT64 +// { 30902, 3} , // Name: Apparent Energy Delivered (PB kVAh del) - [30902,4] as INT64 +// { 30906, 3} , // Name: Apparent Energy Received (PB kVAh rec) - [30906,4] as INT64 +// { 30910, 2} , // Name: Peak Block Demand Active Power Delived Rate 1 (PB kW sd mx d A) - [30910,2] as FLOAT32 +// { 30912, 2} , // Name: Peak Block Demand Active Power Delived Rate 2 (PB kW sd mx d B) - [30912,2] as FLOAT32 +// { 30914, 2} , // Name: Peak Block Demand Active Power Delived Rate 3 (PB kW sd mx d C) - [30914,2] as FLOAT32 +// { 30916, 2} , // Name: Peak Block Demand Active Power Delived Rate 4 (PB kW sd mx d D) - [30916,2] as FLOAT32 +// { 30918, 2} , // Name: Peak Block Demand Active Power Received (PB kW sd mx rec) - [30918,2] as FLOAT32 +// { 30920, 2} , // Name: Peak Block Demand Reactive Power Delivered (PB kVAR sd mx d) - [30920,2] as FLOAT32 +// { 30922, 2} , // Name: Peak Block Demand Reactive Power Received (PB kVAR sd mx r) - [30922,2] as FLOAT32 +// { 30924, 2} , // Name: Peak Block Demand Apparent Power Delivered (PB kVA sd mx d) - [30924,2] as FLOAT32 +// { 30926, 2} , // Name: Peak Block Demand Apparent Power Received (PB kVA sd mx r) - [30926,2] as FLOAT32 +// { 30928, 3} , // Name: Active Energy Delivered Rate 1 (PS kWh del A) - [30928,4] as INT64 +// { 30932, 3} , // Name: Active Energy Delivered Rate 2 (PS kWh del B) - [30932,4] as INT64 +// { 30936, 3} , // Name: Active Energy Delivered Rate 3 (PS kWh del C) - [30936,4] as INT64 +// { 30940, 3} , // Name: Active Energy Delivered Rate 4 (PS kWh del D) - [30940,4] as INT64 +// { 30944, 3} , // Name: Active Energy Delivered (PS kWh del) - [30944,4] as INT64 +// { 30948, 3} , // Name: Active Energy Received (PS kWh rec) - [30948,4] as INT64 +// { 30952, 3} , // Name: Reactive Energy Delivered (PS kVARh del) - [30952,4] as INT64 +// { 30956, 3} , // Name: Reactive Energy Received (PS kVARh rec) - [30956,4] as INT64 +// { 30960, 3} , // Name: Apparent Energy Delivered (PS kVAh del) - [30960,4] as INT64 +// { 30964, 3} , // Name: Apparent Energy Received (PS kVAh rec) - [30964,4] as INT64 +// { 30968, 2} , // Name: Peak Block Demand Active Power Delived Rate 1 (PS kW sd mx d A) - [30968,2] as FLOAT32 +// { 30970, 2} , // Name: Peak Block Demand Active Power Delived Rate 2 (PS kW sd mx d B) - [30970,2] as FLOAT32 +// { 30972, 2} , // Name: Peak Block Demand Active Power Delived Rate 3 (PS kW sd mx d C) - [30972,2] as FLOAT32 +// { 30974, 2} , // Name: Peak Block Demand Active Power Delived Rate 4 (PS kW sd mx d D) - [30974,2] as FLOAT32 +// { 30976, 2} , // Name: Peak Block Demand Active Power Received (PS kW sd mx rec) - [30976,2] as FLOAT32 +// { 30978, 2} , // Name: Peak Block Demand Reactive Power Delivered (PS kVAR sd mx d) - [30978,2] as FLOAT32 +// { 30980, 2} , // Name: Peak Block Demand Reactive Power Received (PS kVAR sd mx r) - [30980,2] as FLOAT32 +// { 30982, 2} , // Name: Peak Block Demand Apparent Power Delivered (PS kVA sd mx d) - [30982,2] as FLOAT32 +// { 30984, 2} , // Name: Peak Block Demand Apparent Power Received (PS kVA sd mx r) - [30984,2] as FLOAT32 +// { 30986, 2} , // Name: Active Energy Delivered Rate 1 (PB kWh del A) - [30986,2] as FLOAT32 +// { 30988, 2} , // Name: Active Energy Delivered Rate 2 (PB kWh del B) - [30988,2] as FLOAT32 +// { 30990, 2} , // Name: Active Energy Delivered Rate 3 (PB kWh del C) - [30990,2] as FLOAT32 +// { 30992, 2} , // Name: Active Energy Delivered Rate 4 (PB kWh del D) - [30992,2] as FLOAT32 +// { 30994, 2} , // Name: Active Energy Delivered (PB kWh del) - [30994,2] as FLOAT32 +// { 30996, 2} , // Name: Active Energy Received (PB kWh rec) - [30996,2] as FLOAT32 +// { 30998, 2} , // Name: Reactive Energy Delivered (PB kVARh del) - [30998,2] as FLOAT32 +// { 31000, 2} , // Name: Reactive Energy Received (PB kVARh rec) - [31000,2] as FLOAT32 +// { 31002, 2} , // Name: Apparent Energy Delivered (PB kVAh del) - [31002,2] as FLOAT32 +// { 31004, 2} , // Name: Apparent Energy Received (PB kVAh rec) - [31004,2] as FLOAT32 +// { 31006, 2} , // Name: Active Energy Delivered Rate 1 (PS kWh del A) - [31006,2] as FLOAT32 +// { 31008, 2} , // Name: Active Energy Delivered Rate 2 (PS kWh del B) - [31008,2] as FLOAT32 +// { 31010, 2} , // Name: Active Energy Delivered Rate 3 (PS kWh del C) - [31010,2] as FLOAT32 +// { 31012, 2} , // Name: Active Energy Delivered Rate 4 (PS kWh del D) - [31012,2] as FLOAT32 +// { 31014, 2} , // Name: Active Energy Delivered (PS kWh del) - [31014,2] as FLOAT32 +// { 31016, 2} , // Name: Active Energy Received (PS kWh rec) - [31016,2] as FLOAT32 +// { 31018, 2} , // Name: Reactive Energy Delivered (PS kVARh del) - [31018,2] as FLOAT32 +// { 31020, 2} , // Name: Reactive Energy Received (PS kVARh rec) - [31020,2] as FLOAT32 +// { 31022, 2} , // Name: Apparent Energy Delivered (PS kVAh del) - [31022,2] as FLOAT32 +// { 31024, 2} , // Name: Apparent Energy Received (PS kVAh rec) - [31024,2] as FLOAT32 +// { 34352, 2} , // Name: Current, Phase A 3 Second (150/180 Cycles) (I1 3s) - [34352,2] as FLOAT32 +// { 34354, 2} , // Name: Current, Phase A 10 Minute (I1 10m) - [34354,2] as FLOAT32 +// { 34358, 2} , // Name: Current, Phase B 3 Second (150/180 Cycles) (I2 3s) - [34358,2] as FLOAT32 +// { 34360, 2} , // Name: Current, Phase B 10 Minute (I2 10m) - [34360,2] as FLOAT32 +// { 34364, 2} , // Name: Current, Phase C 3 Second (150/180 Cycles) (I3 3s) - [34364,2] as FLOAT32 +// { 34366, 2} , // Name: Current, Phase C 10 Minute (I3 10m) - [34366,2] as FLOAT32 +// { 34400, 2} , // Name: Voltage, A-N 3 Second (150/180 Cycles) (V1 3s) - [34400,2] as FLOAT32 +// { 34402, 2} , // Name: Voltage, A-N 10 Minute (V1 10m) - [34402,2] as FLOAT32 +// { 34404, 2} , // Name: Voltage, A-N 2 Hour (V1 2hr) - [34404,2] as FLOAT32 +// { 34406, 2} , // Name: Voltage, B-N 3 Second (150/180 Cycles) (V2 3s) - [34406,2] as FLOAT32 +// { 34408, 2} , // Name: Voltage, B-N 10 Minute (V2 10m) - [34408,2] as FLOAT32 +// { 34410, 2} , // Name: Voltage, B-N 2 Hour (V2 2hr) - [34410,2] as FLOAT32 +// { 34412, 2} , // Name: Voltage, C-N 3 Second (150/180 Cycles) (V3 3s) - [34412,2] as FLOAT32 +// { 34414, 2} , // Name: Voltage, C-N 10 Minute (V3 10m) - [34414,2] as FLOAT32 +// { 34416, 2} , // Name: Voltage, C-N 2 Hour (V3 2hr) - [34416,2] as FLOAT32 +// { 34472, 2} , // Name: Power Frequency 3 Second (150/180 Cycles) (Power Frequency) - [34472,2] as FLOAT32 +// { 34474, 2} , // Name: Power Frequency 10 Minute (Power Freq 10m) - [34474,2] as FLOAT32 +// { 34476, 2} , // Name: Power Frequency 2 Hour (Power Freq 2hr) - [34476,2] as FLOAT32 +// { 40000, 2} , // Name: Frequency 10m Mean (PQ Freq mean) - [40000,2] as FLOAT32 +// { 40002, 2} , // Name: Frequency 10m Low (PQ Freq low) - [40002,2] as FLOAT32 +// { 40004, 2} , // Name: Frequency 10m High (PQ Freq high) - [40004,2] as FLOAT32 +// { 40006, 2} , // Name: Frequency Minimum (PQ Freq mn-op) - [40006,2] as FLOAT32 +// { 40008, 2} , // Name: Frequency Maximum (PQ Freq mx-op) - [40008,2] as FLOAT32 +// { 40010, 2} , // Name: V1 10m Mean (PQ V1 mean) - [40010,2] as FLOAT32 +// { 40012, 2} , // Name: V1 10m Low (PQ V1 low) - [40012,2] as FLOAT32 +// { 40014, 2} , // Name: V1 10m High (PQ V1 high) - [40014,2] as FLOAT32 +// { 40016, 2} , // Name: V2 10m Mean (PQ V2 mean) - [40016,2] as FLOAT32 +// { 40018, 2} , // Name: V2 10m Low (PQ V2 low) - [40018,2] as FLOAT32 +// { 40020, 2} , // Name: V2 10m High (PQ V2 high) - [40020,2] as FLOAT32 +// { 40022, 2} , // Name: V3 10m Mean (PQ V3 mean) - [40022,2] as FLOAT32 +// { 40024, 2} , // Name: V3 10m Low (PQ V3 low) - [40024,2] as FLOAT32 +// { 40026, 2} , // Name: V3 10m High (PQ V3 high) - [40026,2] as FLOAT32 +// { 54396, 1} , // Name: FAC1 Nominal Frequency (N/A) - [54396,1] as INT16U +// { 56977, 0} , // Name: COM1 RTS Delay (N/A) - [56977,2] as INT32 + +} +; diff --git a/firmware/modbus-sd-pm8000/util.h b/firmware/modbus-sd-pm8000/util.h new file mode 100644 index 0000000..fc150b3 --- /dev/null +++ b/firmware/modbus-sd-pm8000/util.h @@ -0,0 +1,27 @@ +#include +#include +#include + +uint32_t getRegisterUInt32(uint16_t highWord, uint16_t lowWord) { + uint32_t val = (highWord << 16) + lowWord; + return val; +} + +int32_t getRegisterInt32(uint16_t highWord, uint16_t lowWord) { + int32_t val = (highWord << 16) + lowWord; + return val; +} + +int64_t getRegisterInt64(uint16_t word1, uint16_t word2, uint16_t word3, uint16_t word4) { + uint64_t val = ((uint64_t)word1 << 48) + ((uint64_t)word2 << 32) + (word3 << 16) + word4; + return val; +} + +float getRegisterFloat(uint16_t highWord, uint16_t lowWord) { + uint32_t floatRaw = ((uint32_t)highWord << 16) | lowWord; + float floatValue; + + memcpy(&floatValue, &floatRaw, sizeof(float)); + return floatValue; +} + diff --git a/firmware/modbus-sd/README.md b/firmware/modbus-sd/README.md deleted file mode 100644 index e6425bc..0000000 --- a/firmware/modbus-sd/README.md +++ /dev/null @@ -1 +0,0 @@ -# Modbus SD Card Firmware \ No newline at end of file diff --git a/firmware/modbus-sim/README.md b/firmware/modbus-sim/README.md deleted file mode 100644 index 52ca987..0000000 --- a/firmware/modbus-sim/README.md +++ /dev/null @@ -1 +0,0 @@ -# Modbus Sim Card Firmware \ No newline at end of file diff --git a/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.ino b/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.ino new file mode 100644 index 0000000..aa64b41 --- /dev/null +++ b/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.ino @@ -0,0 +1,313 @@ +#include +#include +#include +#include "util.h" +#include "register_map_pm8000.h" + +// RS485 pins +#define DE_RE_PIN 4 +#define RX_PIN 8 // SoftwareSerial RX pin for Modbus +#define TX_PIN 7 // SoftwareSerial TX pin for Modbus +#define SLAVE_ID 101 +#define SERIAL_BAUDRATE 9600 +#define LED_A_PID 3 +#define LED_B_PID 5 + +// GSM module pins +#define GSM_RX 2 +#define GSM_TX 3 + +NeoSWSerial modbusSerial(RX_PIN, TX_PIN); // Create a software serial instance for Modbus +ModbusMaster node; +SoftwareSerial gsmSerial(GSM_RX, GSM_TX); // Create a software serial instance for GSM + +unsigned long lastRefreshTime = 0; +bool headerSent = false; +bool booted = false; + +void flicker(uint8_t pin, uint8_t times, uint16_t speed) +{ + for (int i = 0; i < times; i++) + { + delay(speed); + digitalWrite(pin, HIGH); + delay(speed); + digitalWrite(pin, LOW); + } +} + +void setup() +{ + booted = false; + pinMode(LED_A_PID, OUTPUT); + pinMode(LED_B_PID, OUTPUT); + digitalWrite(LED_A_PID, LOW); + digitalWrite(LED_B_PID, HIGH); + + Serial.begin(SERIAL_BAUDRATE); // For debugging + Serial.println(F("Startup \n")); + + Serial.println(F("Initialize RS485 module / Modbus \n")); + + pinMode(DE_RE_PIN, OUTPUT); + digitalWrite(DE_RE_PIN, LOW); // Set to LOW for receiving mode initially + modbusSerial.begin(SERIAL_BAUDRATE); + + node.begin(SLAVE_ID, modbusSerial); + node.preTransmission(preTransmission); + node.postTransmission(postTransmission); + + // Initialize GSM module + gsmSerial.begin(9600); + delay(3000); // Give time for GSM module to initialize + + if (initGSM()) { + Serial.println(F("GSM module initialized successfully")); + flicker(LED_A_PID, 5, 200); // 5 quick flashes to indicate successful GSM initialization + } else { + Serial.println(F("Failed to initialize GSM module")); + flicker(LED_B_PID, 2, 1000); // 2 slow flashes to indicate GSM initialization failure + return; + } + + flicker(LED_A_PID, 10, 100); + digitalWrite(LED_B_PID, LOW); + booted = true; +} + +void preTransmission() +{ + digitalWrite(DE_RE_PIN, HIGH); // Enable RS485 transmit + digitalWrite(LED_A_PID, HIGH); +} + +void postTransmission() +{ + digitalWrite(DE_RE_PIN, LOW); // Disable RS485 transmit + digitalWrite(LED_A_PID, LOW); +} + +bool initGSM() { + gsmSerial.println("AT"); + delay(1000); + if (gsmSerial.find("OK")) { + gsmSerial.println("AT+CPIN?"); + delay(1000); + if (gsmSerial.find("READY")) { + return true; + } + } + return false; +} + +bool waitForResponse(const char* expectedResponse, unsigned long timeout) { + unsigned long start = millis(); + String response = ""; + while (millis() - start < timeout) { + if (gsmSerial.available()) { + char c = gsmSerial.read(); + response += c; + if (response.indexOf(expectedResponse) != -1) { + return true; + } + } + } + Serial.println("Timeout waiting for response: " + response); + return false; +} + +int16_t waitForHTTPAction(unsigned long timeout) { + unsigned long start = millis(); + String response = ""; + while (millis() - start < timeout) { + if (gsmSerial.available()) { + char c = gsmSerial.read(); + response += c; + if (response.indexOf("+HTTPACTION:") != -1) { + // Parse the response + int status = response.substring(response.indexOf(',') + 1).toInt(); + return status; + } + } + } + Serial.println("Timeout waiting for HTTP action: " + response); + return -1; +} + +bool sendGSMData(String data) { + // Configure bearer profile + gsmSerial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); + if (!waitForResponse("OK", 1000)) return false; + + gsmSerial.println("AT+SAPBR=3,1,\"APN\",\"afrihost\""); // Replace with your APN + if (!waitForResponse("OK", 1000)) return false; + + gsmSerial.println("AT+SAPBR=1,1"); + if (!waitForResponse("OK", 10000)) return false; // Bearer activation can take longer + + // Initialize HTTP service + gsmSerial.println("AT+HTTPINIT"); + if (!waitForResponse("OK", 1000)) return false; + + gsmSerial.println("AT+HTTPPARA=\"CID\",1"); + if (!waitForResponse("OK", 1000)) return false; + + // Set the URL (replace with your server URL) + gsmSerial.println("AT+HTTPPARA=\"URL\",\"http://hardwareapi.warky.dev/upload/pm8000\""); + if (!waitForResponse("OK", 1000)) return false; + + // Set HTTP data + gsmSerial.println("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\""); + if (!waitForResponse("OK", 1000)) return false; + + gsmSerial.println("AT+HTTPDATA=" + String(data.length()) + ",5000"); + if (!waitForResponse("DOWNLOAD", 1000)) return false; + + gsmSerial.println(data); + if (!waitForResponse("OK", 5000)) return false; + + // Send HTTP POST request + gsmSerial.println("AT+HTTPACTION=1"); + int16_t httpStatus = waitForHTTPAction(10000); + if (httpStatus != 200) { + Serial.println("HTTP POST failed with status: " + String(httpStatus)); + return false; + } + + // Read the response + gsmSerial.println("AT+HTTPREAD"); + if (!waitForResponse("OK", 1000)) return false; + + // Close HTTP service + gsmSerial.println("AT+HTTPTERM"); + if (!waitForResponse("OK", 1000)) return false; + + // Close bearer + gsmSerial.println("AT+SAPBR=0,1"); + if (!waitForResponse("OK", 1000)) return false; + + digitalWrite(LED_A_PID, HIGH); // Indicate successful data send + delay(200); + digitalWrite(LED_A_PID, LOW); + + return true; +} + +void loop() +{ + if (!booted) + { + Serial.print(F("\nBoot failed, cycle ")); + delay(10000); + digitalWrite(LED_A_PID, LOW); + return; + } + + delay(100); + String data; + + if (millis() - lastRefreshTime >= 60000) // Changed to 1 minute interval + { + lastRefreshTime = millis(); + + Serial.print(F("\nTime: ")); + Serial.print(millis()); + + const uint16_t totalReg = sizeof(registers) / sizeof(registers[0]); + + if (!headerSent) + { + data = "Date Time,"; + for (int i = 0; i < totalReg; i++) + { + const uint16_t regaddr = pgm_read_word(®isters[i].regaddr); + data += "@"; + data += String(regaddr); + data += ","; + } + headerSent = true; + if (sendGSMData(data)) { + flicker(LED_A_PID, 50, 10); // 50 quick flickers, sent header + } else { + flicker(LED_B_PID, 5, 200); // 5 medium flashes, failed to send header + } + } + + data = String(millis()) + ","; // Use millis() as timestamp + + Serial.println(totalReg); + // Modbus Data Loop + for (int i = 0; i < totalReg; i++) + { + const uint16_t regaddr = pgm_read_word(®isters[i].regaddr); + const uint8_t regtype = pgm_read_word(®isters[i].regtype); + + Serial.print(F("Reg Read: ")); + Serial.println(regtype); + Serial.println(regaddr); + + if (regaddr > 0) + { + delay(25); // Gives the pending communication a little delay + uint8_t result = node.readHoldingRegisters(regaddr - 1, 2); + delay(25); // Delay the read for a little bit so that the buffer can be read + + if (result == node.ku8MBSuccess) + { + if (regtype == 2) + { + data += String(getRegisterFloat(node.getResponseBuffer(0), node.getResponseBuffer(1))); + } + else if (regtype == 1) + { + data += String(node.getResponseBuffer(0)); + } + else if (regtype == 0) + { + data += String(getRegisterInt32(node.getResponseBuffer(0), node.getResponseBuffer(1))); + } + else if (regtype == 5) + { + String strData = ""; + for (uint8_t j = 0; j < 20; j++) + { + uint8_t v = node.getResponseBuffer(j); + if (v == 0) { + break; + } + strData += char(v); + } + data += strData; + } + else + { + data += "null"; + } + } + else + { + Serial.print(F("Reg Error: ")); + Serial.print(result, HEX); + Serial.print("\n"); + data += "E"; + data += String(result, HEX); + flicker(LED_B_PID, 2, 250); + } + data += ","; + } + } + + Serial.print(F("\nData to send: ")); + Serial.println(data); + + if (sendGSMData(data)) { + Serial.println(F("Data sent successfully via GSM")); + flicker(LED_A_PID, 4, 100); // 4 quick flickers on LED_A_PID, data sent + } else { + Serial.println(F("Failed to send data via GSM")); + flicker(LED_B_PID, 4, 250); // 4 medium flashes on LED_B_PID, failed to send data + } + + Serial.print(F("\n\n")); + } +} \ No newline at end of file diff --git a/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.md b/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.md new file mode 100644 index 0000000..a2b31da --- /dev/null +++ b/firmware/modbus-sim800c-pm8000/modbus-sim800c-pm8000.md @@ -0,0 +1,201 @@ +# Modbus Reading and GSM Data Logging for Schneider PowerLogic PM8000 + +This is a specification and implementation of an Arduino-based Modbus data logger with GSM data transmission for the Schneider PowerLogic PM8000. +This software is designed for Vivarox EMS and only Vivarox has the right to use and modify this software. + +## Arduino Implementation: + +This project uses an Arduino to connect to Modbus devices, read information, and transmit it via GSM to a remote server. + +### Hardware needed: + +1. Arduino Board + Recommended: Arduino MEGA 2560 (for more memory and I/O pins) or Arduino UNO (for simpler projects). + +2. RS485 to TTL Module + Allows communication between the Arduino and Modbus devices using the RS485 protocol. + +3. 800C GSM Module 3.3/5V + Enables the Arduino to send data over cellular networks. + +4. Power Supply + To power the Arduino and connected peripherals. A dedicated 2A power supply is required for the GSM module. + +5. LED Indicators + Two LEDs for status indication. + +6. Capacitors + 100uF and 10uF capacitors for power supply stabilization. + +### Wiring + +#### Wiring Diagram +``` +Arduino Mega/Uno 800C GSM Module Description +----------------- --------------- ----------- + 5V ----> VCC Power supply + GND ----> GND Ground + 2 (RX) <---- TX GSM TX to Arduino RX + 3 (TX) ----> RX Arduino TX to GSM RX + + 7 ----> DI (RS485) RS485 Driver Input + 8 <---- RO (RS485) RS485 Receiver Output + 4 ----> DE/RE (RS485) RS485 Driver Enable/Receiver Enable + + 3 ----> LED A Status LED A + 5 ----> LED B Status LED B + +Power Supply +------------ + VCC ----> + (2A) Dedicated 2A power supply positive + GND ----> - (GND) Dedicated 2A power supply ground + +Capacitors +---------- + VCC ----|(---- GND 100uF capacitor + VCC ---||---- GND 10uF capacitor + + Antenna + | + | + [GSM Module 800C] +``` + +#### Wiring Notes: +1. Ensure the power supply can provide 2A current. +2. Place the 100uF and 10uF capacitors as close to the GSM module's power pins as possible. +3. The RS485 connections are optional and depend on your specific requirements. +4. LEDs should be connected with appropriate current-limiting resistors (not shown in diagram). +5. The GSM module's antenna should be connected securely. +6. Double-check all connections before powering on the system. + +### Software + +- Modbus Library: ModbusMaster +- GSM Library: Built-in SoftwareSerial +- NeoSWSerial: For better latency on software serial communication with Modbus + +### Implementation Details + +1. Modbus Configuration: + - Slave ID: 101 + - Baud Rate: 9600 + - Register map: Defined in separate "register_map_pm8000.h" file + +2. Data Logging and Transmission: + - Frequency: Readings taken and transmitted every minute + - Data Format: CSV (Comma-Separated Values) string + - Data Structure: Timestamp (millis), followed by register values + - Header Row: Includes register addresses for easy identification + +3. Register Types Supported: + - Float (32-bit) + - Integer (32-bit) + - String (up to 20 characters) + +4. Error Handling and Status Indication: + - LED A: Indicates successful data transmission + - LED B: Indicates errors (e.g., GSM issues, Modbus communication errors) + - Serial output for debugging (9600 baud) + +5. Special Features: + - Robust error handling for GSM and Modbus communication + - Header sent once at the beginning of each session + - Configurable APN and server URL + +### Programming Workflow + +1. Initialize hardware (GSM module, RS485 module) +2. Set up Modbus communication parameters +3. Enter main loop: + - Read data from Modbus registers + - Format data into CSV string + - Send data via GSM to server + - Handle any errors and provide status indication via LEDs + - Delay for 1 minute before next reading and transmission + +## Memory Limitations and Register Customization + +### Memory Constraints + +The Arduino, particularly models like the UNO and MEGA, has limited memory available for storing program code and variables. This limitation affects the number of Modbus registers that can be defined and read in a single project. + +- Arduino UNO: 32 KB Flash (program storage), 2 KB SRAM +- Arduino MEGA: 256 KB Flash, 8 KB SRAM + +Due to these constraints, the number of registers that can be defined in the `register_map_pm8000.h` file is not unlimited. The exact number will depend on the complexity of your code and other libraries used. + +### Customizing the Register Map + +To adapt this project to your specific needs, you can modify the `register_map_pm8000.h` file. This file contains the definitions of Modbus registers to be read by the Arduino. + +To customize the register map: + +1. Open the `register_map_pm8000.h` file in your Arduino IDE or text editor. + +2. Locate the `registers` array in the file. It should look something like this: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + // ... other registers ... + }; + ``` + +3. To remove a register, simply comment out its line by adding `//` at the beginning: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + // {40003, 1}, // This register is now commented out and won't be read + // ... other registers ... + }; + ``` + +4. To add a new register, add a new line to the array with the register address and type: + + ```cpp + const RegisterInfo registers[] PROGMEM = { + {40001, 2}, // Example register + {40003, 1}, + {40005, 2}, // New register added + // ... other registers ... + }; + ``` + +5. Remember to keep the array syntax correct, with commas between entries and a semicolon at the end of the array. + +## Best Practices + +- Start by commenting out registers you don't need before adding new ones. +- If you're using an Arduino UNO, you may need to be more selective about which registers to include due to memory constraints. +- Test your modifications incrementally to ensure the Arduino can handle the memory load. +- If you need to read a large number of registers, consider using an Arduino MEGA or a more powerful microcontroller. +- Ensure your GSM data plan can handle the amount of data being transmitted. +- Regularly check your server to ensure data is being received correctly. + +## Important AT Commands + +Here are some important AT commands used in this project: + +1. `AT+XISP=0`: Set to use internal TCP/IP protocol stack. +2. `AT+CGDCONT=1,"IP","APN_NAME"`: Set the APN for your cellular provider. +3. `AT+XGAUTH=1,1,"username","password"`: Set authentication for private networks if needed. +4. `AT+XIIC=1`: Establish PPP link. +5. `AT+TCPSETUP=0,server_ip,port`: Establish TCP connection. +6. `AT+TCPSEND=0,data_length`: Send data over TCP connection. +7. `AT+TCPCLOSE=0`: Close TCP connection. +8. `AT+ENPWRSAVE=1`: Enable power-saving mode (if needed). + +Remember to replace "APN_NAME", "username", "password", "server_ip", and "port" with your specific values. + +## Troubleshooting + +1. If you encounter communication issues, double-check your wiring and ensure all connections are secure. +2. Verify that your APN settings are correct for your cellular provider. +3. If the module isn't responding, try resetting it and check your power supply. +4. Use AT commands like `AT+CSQ` to check signal strength and `AT+CREG?` to check network registration status. +5. If data isn't being sent, verify your TCP connection settings and ensure you have an active data plan. + +By carefully managing the registers in the `register_map_pm8000.h` file and configuring your GSM settings, you can customize this Modbus reader to suit your specific requirements while staying within the memory limitations of your Arduino board and optimizing data transmission. \ No newline at end of file diff --git a/firmware/modbus-sim800c-pm8000/register_map_pm8000.h b/firmware/modbus-sim800c-pm8000/register_map_pm8000.h new file mode 100644 index 0000000..82a214d --- /dev/null +++ b/firmware/modbus-sim800c-pm8000/register_map_pm8000.h @@ -0,0 +1,602 @@ + +#include + +struct RegisterMap +{ + uint16_t regaddr; + uint8_t regtype; +}; + +const PROGMEM RegisterMap registers[] = { + //{ 30, 5} , // Name: Meter Name (DeviceName) - [30,20] as UTF8 + //{ 50, 5} , // Name: Meter Model (DeviceType) - [50,20] as UTF8 + { 1837, 1} , // Name: Year (Year) - [1837,1] as INT16U + { 1838, 1} , // Name: Month (Month) - [1838,1] as INT16U + { 1839, 1} , // Name: Day (Day) - [1839,1] as INT16U + { 1840, 1} , // Name: Hour (Hour) - [1840,1] as INT16U + { 1841, 1} , // Name: Minute (Minute) - [1841,1] as INT16U + { 2700, 2} , // Name: Active Energy Delivered (Into Load) (kWh del) - [2700,2] as FLOAT32 + { 2702, 2} , // Name: Active Energy Received (Out of Load) (kWh rec) - [2702,2] as FLOAT32 + { 2704, 2} , // Name: Active Energy Delivered + Received (kWh del+rec) - [2704,2] as FLOAT32 + { 2706, 2} , // Name: Active Energy Delivered- Received (kWh del-rec) - [2706,2] as FLOAT32 + { 2708, 2} , // Name: Reactive Energy Delivered (kVARh del) - [2708,2] as FLOAT32 + { 2710, 2} , // Name: Reactive Energy Received (kVARh rec) - [2710,2] as FLOAT32 + { 2712, 2} , // Name: Reactive Energy Delivered + Received (kVARh del+rec) - [2712,2] as FLOAT32 + { 2714, 2} , // Name: Reactive Energy Delivered - Received (kVARh del-rec) - [2714,2] as FLOAT32 + { 2716, 2} , // Name: Apparent Energy Delivered (kVAh del) - [2716,2] as FLOAT32 + { 2718, 2} , // Name: Apparent Energy Received (kVAh rec) - [2718,2] as FLOAT32 + { 2720, 2} , // Name: Apparent Energy Delivered + Received (kVAh del+rec) - [2720,2] as FLOAT32 + { 2722, 2} , // Name: Apparent Energy Delivered - Received (kVAh del-rec) - [2722,2] as FLOAT32 + { 2724, 2} , // Name: Active Energy in Quadrant I (kWh Q1) - [2724,2] as FLOAT32 + { 2726, 2} , // Name: Active Energy in Quadrant II (kWh Q2) - [2726,2] as FLOAT32 + { 2728, 2} , // Name: Active Energy in Quadrant III (kWh Q3) - [2728,2] as FLOAT32 + { 2730, 2} , // Name: Active Energy in Quadrant IV (kWh Q4) - [2730,2] as FLOAT32 + { 2732, 2} , // Name: Reactive Energy in Quadrant I (kVARh Q1) - [2732,2] as FLOAT32 + { 2734, 2} , // Name: Reactive Energy in Quadrant II (kVARh Q2) - [2734,2] as FLOAT32 + { 2736, 2} , // Name: Reactive Energy in Quadrant III (kVARh Q3) - [2736,2] as FLOAT32 + { 2738, 2} , // Name: Reactive Energy in Quadrant IV (kVARh Q4) - [2738,2] as FLOAT32 + { 2740, 2} , // Name: Apparent Energy in Quadrant I (kVAh Q1) - [2740,2] as FLOAT32 + { 2742, 2} , // Name: Apparent Energy in Quadrant II (kVAh Q2) - [2742,2] as FLOAT32 + { 2744, 2} , // Name: Apparent Energy in Quadrant III (kVAh Q3) - [2744,2] as FLOAT32 + { 2746, 2} , // Name: Apparent Energy in Quadrant IV (kVAh Q4) - [2746,2] as FLOAT32 + { 2748, 2} , // Name: Conditional Active Energy Delivered (Into Load) (Cnd kWh del) - [2748,2] as FLOAT32 + { 2750, 2} , // Name: Conditional Active Energy Received (Out of Load) (Cnd kWh rec) - [2750,2] as FLOAT32 + { 2754, 2} , // Name: Active Energy Delivered - Received, Conditional (Cnd kWh d-r) - [2754,2] as FLOAT32 + { 2756, 2} , // Name: Conditional Reactive Energy In (Delivered) (Cnd kVARh del) - [2756,2] as FLOAT32 + { 2758, 2} , // Name: Conditional Reactive Energy Out (Received) (Cnd kVARh rec) - [2758,2] as FLOAT32 + { 2762, 2} , // Name: Reactive Energy Delivered - Received, Conditional (Cnd kVARh d-r) - [2762,2] as FLOAT32 + { 2768, 2} , // Name: Apparent Energy Delivered + Received, Conditional (Cnd kVAh d+r) - [2768,2] as FLOAT32 + { 2772, 2} , // Name: Active Energy Delivered , Last Complete Interval (Inc kWh del C) - [2772,2] as FLOAT32 + { 2774, 2} , // Name: Active Energy Received , Last Complete Interval (Inc kWh rec C) - [2774,2] as FLOAT32 + { 2776, 2} , // Name: Active Energy Delivered - Received , Last Complete Interval (Inc kWh d-r C) - [2776,2] as FLOAT32 + { 2778, 2} , // Name: Reactive Energy Delivered , Last Complete Interval (Inc kVARh del C) - [2778,2] as FLOAT32 + { 2780, 2} , // Name: Reactive Energy Received , Last Complete Interval (Inc kVARh rec C) - [2780,2] as FLOAT32 + { 2782, 2} , // Name: Reactive Energy Delivered - Received , Last Complete Interval (Inc kVARh d-r C) - [2782,2] as FLOAT32 + { 2784, 2} , // Name: Apparent Energy Delivered + Received , Last Complete Interval (Inc kVAh d+r C) - [2784,2] as FLOAT32 + { 2786, 2} , // Name: Active Energy Delivered , Present Interval (Inc kWh del) - [2786,2] as FLOAT32 + { 2788, 2} , // Name: Active Energy Received , Present Interval (Inc kWh rec) - [2788,2] as FLOAT32 + { 2790, 2} , // Name: Active Energy Delivered - Received , Present Interval (Inc kWh d-r) - [2790,2] as FLOAT32 + { 2792, 2} , // Name: Reactive Energy Delivered , Present Interval (Inc kVARh del) - [2792,2] as FLOAT32 + { 2794, 2} , // Name: Reactive Energy Received , Present Interval (Inc kVARh rec) - [2794,2] as FLOAT32 + { 2796, 2} , // Name: Reactive Energy Delivered - Received , Present Interval (Inc kVARh d-r) - [2796,2] as FLOAT32 + { 2798, 2} , // Name: Apparent Energy Delivered + Received , Present Interval (Inc kVAh d+r) - [2798,2] as FLOAT32 + { 2800, 2} , // Name: Active Energy Delivered Interval (kWh del int) - [2800,2] as FLOAT32 + { 2802, 2} , // Name: Active Energy Received Interval (kWh rec int) - [2802,2] as FLOAT32 + { 2804, 2} , // Name: Reactive Energy Delivered Interval (kVARh del int) - [2804,2] as FLOAT32 + { 2806, 2} , // Name: Reactive Energy Received Interval (kVARh rec int) - [2806,2] as FLOAT32 + { 2808, 2} , // Name: Apparent Energy Delivered Interval (kVAh del int) - [2808,2] as FLOAT32 + { 2810, 2} , // Name: Apparent Energy Received Interval (kVAh rec int) - [2810,2] as FLOAT32 + { 3000, 2} , // Name: Current A (I a) - [3000,2] as FLOAT32 + { 3002, 2} , // Name: Current B (I b) - [3002,2] as FLOAT32 + { 3004, 2} , // Name: Current C (I c) - [3004,2] as FLOAT32 + { 3006, 2} , // Name: Current N (I 4) - [3006,2] as FLOAT32 + { 3008, 2} , // Name: Current G (I 5) - [3008,2] as FLOAT32 + //{ 3010, 2} , // Name: Current Avg (I avg) - [3010,2] as FLOAT32 + { 3020, 2} , // Name: Voltage A-B (Vll ab) - [3020,2] as FLOAT32 + { 3022, 2} , // Name: Voltage B-C (Vll bc) - [3022,2] as FLOAT32 + { 3024, 2} , // Name: Voltage C-A (Vll ca) - [3024,2] as FLOAT32 + //{ 3026, 2} , // Name: Voltage L-L Avg (Vll avg) - [3026,2] as FLOAT32 + { 3028, 2} , // Name: Voltage A-N (Vln a) - [3028,2] as FLOAT32 + { 3030, 2} , // Name: Voltage B-N (Vln b) - [3030,2] as FLOAT32 + { 3032, 2} , // Name: Voltage C-N (Vln c) - [3032,2] as FLOAT32 +// { 3036, 2} , // Name: Voltage L-N Avg (Vln avg) - [3036,2] as FLOAT32 + { 3054, 2} , // Name: Active Power A (kW a) - [3054,2] as FLOAT32 + { 3056, 2} , // Name: Active Power B (kW b) - [3056,2] as FLOAT32 + { 3058, 2} , // Name: Active Power C (kW c) - [3058,2] as FLOAT32 + { 3060, 2} , // Name: Active Power Total (kW tot) - [3060,2] as FLOAT32 + { 3062, 2} , // Name: Reactive Power A (kVAR a) - [3062,2] as FLOAT32 + { 3064, 2} , // Name: Reactive Power B (kVAR b) - [3064,2] as FLOAT32 + { 3066, 2} , // Name: Reactive Power C (kVAR c) - [3066,2] as FLOAT32 + { 3068, 2} , // Name: Reactive Power Total (kVAR tot) - [3068,2] as FLOAT32 + { 3070, 2} , // Name: Apparent Power A (kVA a) - [3070,2] as FLOAT32 + { 3072, 2} , // Name: Apparent Power B (kVA b) - [3072,2] as FLOAT32 + { 3074, 2} , // Name: Apparent Power C (kVA c) - [3074,2] as FLOAT32 + { 3076, 2} , // Name: Apparent Power Total (kVA tot) - [3076,2] as FLOAT32 + { 3110, 2} , // Name: Frequency (Freq) - [3110,2] as FLOAT32 +// { 3204, 3} , // Name: Active Energy Delivered (Into Load) (kWh del) - [3204,4] as INT64 +// { 3208, 3} , // Name: Active Energy Received (Out of Load) (kWh rec) - [3208,4] as INT64 +// { 3212, 3} , // Name: Active Energy Delivered + Received (kWh del+rec) - [3212,4] as INT64 +// { 3216, 3} , // Name: Active Energy Delivered- Received (kWh del-rec) - [3216,4] as INT64 +// { 3220, 3} , // Name: Reactive Energy Delivered (kVARh del) - [3220,4] as INT64 +// { 3224, 3} , // Name: Reactive Energy Received (kVARh rec) - [3224,4] as INT64 +// { 3228, 3} , // Name: Reactive Energy Delivered + Received (kVARh del+rec) - [3228,4] as INT64 +// { 3232, 3} , // Name: Reactive Energy Delivered - Received (kVARh del-rec) - [3232,4] as INT64 +// { 3236, 3} , // Name: Apparent Energy Delivered (kVAh del) - [3236,4] as INT64 +// { 3240, 3} , // Name: Apparent Energy Received (kVAh rec) - [3240,4] as INT64 +// { 3244, 3} , // Name: Apparent Energy Delivered + Received (kVAh del+rec) - [3244,4] as INT64 +// { 3248, 3} , // Name: Apparent Energy Delivered - Received (kVAh del-rec) - [3248,4] as INT64 +// { 3256, 3} , // Name: Active Energy in Quadrant I (kWh Q1) - [3256,4] as INT64 +// { 3260, 3} , // Name: Active Energy in Quadrant II (kWh Q2) - [3260,4] as INT64 +// { 3264, 3} , // Name: Active Energy in Quadrant III (kWh Q3) - [3264,4] as INT64 +// { 3268, 3} , // Name: Active Energy in Quadrant IV (kWh Q4) - [3268,4] as INT64 +// { 3272, 3} , // Name: Reactive Energy in Quadrant I (kVARh Q1) - [3272,4] as INT64 +// { 3276, 3} , // Name: Reactive Energy in Quadrant II (kVARh Q2) - [3276,4] as INT64 +// { 3280, 3} , // Name: Reactive Energy in Quadrant III (kVARh Q3) - [3280,4] as INT64 +// { 3284, 3} , // Name: Reactive Energy in Quadrant IV (kVARh Q4) - [3284,4] as INT64 +// { 3288, 3} , // Name: Apparent Energy in Quadrant I (kVAh Q1) - [3288,4] as INT64 +// { 3292, 3} , // Name: Apparent Energy in Quadrant II (kVAh Q2) - [3292,4] as INT64 +// { 3296, 3} , // Name: Apparent Energy in Quadrant III (kVAh Q3) - [3296,4] as INT64 +// { 3300, 3} , // Name: Apparent Energy in Quadrant IV (kVAh Q4) - [3300,4] as INT64 +// { 3358, 3} , // Name: Conditional Active Energy Delivered (Into Load) (Cnd kWh del) - [3358,4] as INT64 +// { 3362, 3} , // Name: Conditional Active Energy Received (Out of Load) (Cnd kWh rec) - [3362,4] as INT64 +// { 3370, 3} , // Name: Active Energy Delivered - Received, Conditional (Cnd kWh d-r) - [3370,4] as INT64 +// { 3374, 3} , // Name: Conditional Reactive Energy In (Delivered) (Cnd kVARh del) - [3374,4] as INT64 +// { 3378, 3} , // Name: Conditional Reactive Energy Out (Received) (Cnd kVARh rec) - [3378,4] as INT64 +// { 3386, 3} , // Name: Reactive Energy Delivered - Received, Conditional (Cnd kVARh d-r) - [3386,4] as INT64 +// { 3398, 3} , // Name: Apparent Energy Delivered + Received, Conditional (Cnd kVAh d+r) - [3398,4] as INT64 +// { 3414, 3} , // Name: Active Energy Delivered , Last Complete Interval (Inc kWh del C) - [3414,4] as INT64 +// { 3418, 3} , // Name: Active Energy Received , Last Complete Interval (Inc kWh rec C) - [3418,4] as INT64 +// { 3422, 3} , // Name: Active Energy Delivered - Received , Last Complete Interval (Inc kWh d-r C) - [3422,4] as INT64 +// { 3426, 3} , // Name: Reactive Energy Delivered , Last Complete Interval (Inc kVARh del C) - [3426,4] as INT64 +// { 3430, 3} , // Name: Reactive Energy Received , Last Complete Interval (Inc kVARh rec C) - [3430,4] as INT64 +// { 3434, 3} , // Name: Reactive Energy Delivered - Received , Last Complete Interval (Inc kVARh d-r C) - [3434,4] as INT64 +// { 3438, 3} , // Name: Apparent Energy Delivered + Received , Last Complete Interval (Inc kVAh d+r C) - [3438,4] as INT64 +// { 3442, 3} , // Name: Active Energy Delivered , Present Interval (Inc kWh del) - [3442,4] as INT64 +// { 3446, 3} , // Name: Active Energy Received , Present Interval (Inc kWh rec) - [3446,4] as INT64 +// { 3450, 3} , // Name: Active Energy Delivered - Received , Present Interval (Inc kWh d-r) - [3450,4] as INT64 +// { 3454, 3} , // Name: Reactive Energy Delivered , Present Interval (Inc kVARh del) - [3454,4] as INT64 +// { 3458, 3} , // Name: Reactive Energy Received , Present Interval (Inc kVARh rec) - [3458,4] as INT64 +// { 3462, 3} , // Name: Reactive Energy Delivered - Received , Present Interval (Inc kVARh d-r) - [3462,4] as INT64 +// { 3466, 3} , // Name: Apparent Energy Delivered + Received , Present Interval (Inc kVAh d+r) - [3466,4] as INT64 +// { 3470, 3} , // Name: Active Energy Delivered Interval (kWh del int) - [3470,4] as INT64 +// { 3474, 3} , // Name: Active Energy Received Interval (kWh rec int) - [3474,4] as INT64 +// { 3478, 3} , // Name: Reactive Energy Delivered Interval (kVARh del int) - [3478,4] as INT64 +// { 3482, 3} , // Name: Reactive Energy Received Interval (kVARh rec int) - [3482,4] as INT64 +// { 3486, 3} , // Name: Apparent Energy Delivered Interval (kVAh del int) - [3486,4] as INT64 +// { 3490, 3} , // Name: Apparent Energy Received Interval (kVAh rec int) - [3490,4] as INT64 +// { 3650, 2} , // Name: Current A Squared Hours (MU Ia^2h) - [3650,2] as FLOAT32 +// { 3652, 2} , // Name: Current B Square Hours (MU Ib^2h) - [3652,2] as FLOAT32 +// { 3654, 2} , // Name: Current C Square Hours (MU Ic^2h) - [3654,2] as FLOAT32 +// { 3656, 2} , // Name: Voltage A-B Square Hours (MU Vll ab^2h) - [3656,2] as FLOAT32 +// { 3658, 2} , // Name: Voltage B-C Square Hours (MU Vll bc^2h) - [3658,2] as FLOAT32 +// { 3660, 2} , // Name: Voltage C-A Square Hours (MU Vll ca^2h) - [3660,2] as FLOAT32 +// { 3668, 2} , // Name: Current A Squared Hours (MU Ia^2h int) - [3668,2] as FLOAT32 +// { 3670, 2} , // Name: Current B Square Hours (MU Ib^2h int) - [3670,2] as FLOAT32 +// { 3672, 2} , // Name: Current C Square Hours (MU Ic^2h int) - [3672,2] as FLOAT32 +// { 3674, 2} , // Name: Voltage A-B Square Hours (MU Vllab^2h int) - [3674,2] as FLOAT32 +// { 3676, 2} , // Name: Voltage B-C Square Hours (MU Vllbc^2h int) - [3676,2] as FLOAT32 +// { 3678, 2} , // Name: Voltage C-A Square Hours (MU Vllca^2h int) - [3678,2] as FLOAT32 +// { 3680, 2} , // Name: Voltage A-N Square Hours (MU Vlna^2h int) - [3680,2] as FLOAT32 +// { 3682, 2} , // Name: Voltage B-N Square Hours (MU Vlnb^2h int) - [3682,2] as FLOAT32 +// { 3684, 2} , // Name: Voltage C-N Square Hours (MU Vlnc^2h int) - [3684,2] as FLOAT32 +// { 4196, 3} , // Name: Active Energy Delivered Rate 1 (kWh del A) - [4196,4] as INT64 +// { 4200, 3} , // Name: Active Energy Delivered Rate 2 (kWh del B) - [4200,4] as INT64 +// { 4204, 3} , // Name: Active Energy Delivered Rate 3 (kWh del C) - [4204,4] as INT64 +// { 4208, 3} , // Name: Active Energy Delivered Rate 4 (kWh del D) - [4208,4] as INT64 +// { 4228, 3} , // Name: Active Energy Received Rate 1 (kWh rec A) - [4228,4] as INT64 +// { 4232, 3} , // Name: Active Energy Received Rate 2 (kWh rec B) - [4232,4] as INT64 +// { 4236, 3} , // Name: Active Energy Received Rate 3 (kWh rec C) - [4236,4] as INT64 +// { 4240, 3} , // Name: Active Energy Received Rate 4 (kWh rec D) - [4240,4] as INT64 +// { 4260, 3} , // Name: Reactive Energy Delivered Rate 1 (kVARh del A) - [4260,4] as INT64 +// { 4264, 3} , // Name: Reactive Energy Delivered Rate 2 (kVARh del B) - [4264,4] as INT64 +// { 4268, 3} , // Name: Reactive Energy Delivered Rate 3 (kVARh del C) - [4268,4] as INT64 +// { 4272, 3} , // Name: Reactive Energy Delivered Rate 4 (kVARh del D) - [4272,4] as INT64 +// { 4292, 3} , // Name: Reactive Energy Received Rate 1 (kVARh rec A) - [4292,4] as INT64 +// { 4296, 3} , // Name: Reactive Energy Received Rate 2 (kVARh rec B) - [4296,4] as INT64 +// { 4300, 3} , // Name: Reactive Energy Received Rate 3 (kVARh rec C) - [4300,4] as INT64 +// { 4304, 3} , // Name: Reactive Energy Received Rate 4 (kVARh rec D) - [4304,4] as INT64 +// { 4324, 3} , // Name: Apparent Energy Delivered Rate 1 (kVAh del A) - [4324,4] as INT64 +// { 4328, 3} , // Name: Apparent Energy Delivered Rate 2 (kVAh del B) - [4328,4] as INT64 +// { 4332, 3} , // Name: Apparent Energy Delivered Rate 3 (kVAh del C) - [4332,4] as INT64 +// { 4336, 3} , // Name: Apparent Energy Delivered Rate 4 (kVAh del D) - [4336,4] as INT64 +// { 4356, 3} , // Name: Apparent Energy Received Rate 1 (kVAh rec A) - [4356,4] as INT64 +// { 4360, 3} , // Name: Apparent Energy Received Rate 2 (kVAh rec B) - [4360,4] as INT64 +// { 4364, 3} , // Name: Apparent Energy Received Rate 3 (kVAh rec C) - [4364,4] as INT64 +// { 4368, 3} , // Name: Apparent Energy Received Rate 4 (kVAh rec D) - [4368,4] as INT64 +// { 4800, 2} , // Name: Active Energy Delivered Rate 1 (kWh del A) - [4800,2] as FLOAT32 +// { 4802, 2} , // Name: Active Energy Delivered Rate 2 (kWh del B) - [4802,2] as FLOAT32 +// { 4804, 2} , // Name: Active Energy Delivered Rate 3 (kWh del C) - [4804,2] as FLOAT32 +// { 4806, 2} , // Name: Active Energy Delivered Rate 4 (kWh del D) - [4806,2] as FLOAT32 +// { 4816, 2} , // Name: Active Energy Received Rate 1 (kWh rec A) - [4816,2] as FLOAT32 +// { 4818, 2} , // Name: Active Energy Received Rate 2 (kWh rec B) - [4818,2] as FLOAT32 +// { 4820, 2} , // Name: Active Energy Received Rate 3 (kWh rec C) - [4820,2] as FLOAT32 +// { 4822, 2} , // Name: Active Energy Received Rate 4 (kWh rec D) - [4822,2] as FLOAT32 +// { 4832, 2} , // Name: Reactive Energy Delivered Rate 1 (kVARh del A) - [4832,2] as FLOAT32 +// { 4834, 2} , // Name: Reactive Energy Delivered Rate 2 (kVARh del B) - [4834,2] as FLOAT32 +// { 4836, 2} , // Name: Reactive Energy Delivered Rate 3 (kVARh del C) - [4836,2] as FLOAT32 +// { 4838, 2} , // Name: Reactive Energy Delivered Rate 4 (kVARh del D) - [4838,2] as FLOAT32 +// { 4848, 2} , // Name: Reactive Energy Received Rate 1 (kVARh rec A) - [4848,2] as FLOAT32 +// { 4850, 2} , // Name: Reactive Energy Received Rate 2 (kVARh rec B) - [4850,2] as FLOAT32 +// { 4852, 2} , // Name: Reactive Energy Received Rate 3 (kVARh rec C) - [4852,2] as FLOAT32 +// { 4854, 2} , // Name: Reactive Energy Received Rate 4 (kVARh rec D) - [4854,2] as FLOAT32 +// { 4864, 2} , // Name: Apparent Energy Delivered Rate 1 (kVAh del A) - [4864,2] as FLOAT32 +// { 4866, 2} , // Name: Apparent Energy Delivered Rate 2 (kVAh del B) - [4866,2] as FLOAT32 +// { 4868, 2} , // Name: Apparent Energy Delivered Rate 3 (kVAh del C) - [4868,2] as FLOAT32 +// { 4870, 2} , // Name: Apparent Energy Delivered Rate 4 (kVAh del D) - [4870,2] as FLOAT32 +// { 4880, 2} , // Name: Apparent Energy Received Rate 1 (kVAh rec A) - [4880,2] as FLOAT32 +// { 4882, 2} , // Name: Apparent Energy Received Rate 2 (kVAh rec B) - [4882,2] as FLOAT32 +// { 4884, 2} , // Name: Apparent Energy Received Rate 3 (kVAh rec C) - [4884,2] as FLOAT32 +// { 4886, 2} , // Name: Apparent Energy Received Rate 4 (kVAh rec D) - [4886,2] as FLOAT32 +// { 14045, 2} , // Name: Pickup Setpoint (Over I 4 High Limit) - [14045,2] as FLOAT32 +// { 14049, 2} , // Name: Dropout Setpoint (Over I 4 Low Limit) - [14049,2] as FLOAT32 +// { 14325, 2} , // Name: Pickup Setpoint (Over kW sd High Limit) - [14325,2] as FLOAT32 +// { 14329, 2} , // Name: Dropout Setpoint (Over kW sd Low Limit) - [14329,2] as FLOAT32 +// { 14585, 2} , // Name: Pickup Setpoint (Over I a High Limit) - [14585,2] as FLOAT32 +// { 14589, 2} , // Name: Dropout Setpoint (Over I a Low Limit) - [14589,2] as FLOAT32 +// { 14605, 2} , // Name: Pickup Setpoint (Over I b High Limit) - [14605,2] as FLOAT32 +// { 14609, 2} , // Name: Dropout Setpoint (Over I b Low Limit) - [14609,2] as FLOAT32 +// { 14625, 2} , // Name: Pickup Setpoint (Over I c High Limit) - [14625,2] as FLOAT32 +// { 14629, 2} , // Name: Dropout Setpoint (Over I c Low Limit) - [14629,2] as FLOAT32 +// { 21000, 2} , // Name: HS Current A (HS I a) - [21000,2] as FLOAT32 +// { 21002, 2} , // Name: HS Current B (HS I b) - [21002,2] as FLOAT32 +// { 21004, 2} , // Name: HS Current C (HS I c) - [21004,2] as FLOAT32 +// { 21006, 2} , // Name: HS Current N (HS I 4) - [21006,2] as FLOAT32 +// { 21008, 2} , // Name: HS Current G (HS I 5) - [21008,2] as FLOAT32 +// { 21010, 2} , // Name: HS Current Avg (HS I avg) - [21010,2] as FLOAT32 +// { 21016, 2} , // Name: HS Frequency (HS Freq) - [21016,2] as FLOAT32 +// { 21018, 2} , // Name: HS Voltage, A-B (HS Vll ab) - [21018,2] as FLOAT32 +// { 21020, 2} , // Name: HS Voltage, B-C (HS Vll bc) - [21020,2] as FLOAT32 +// { 21022, 2} , // Name: HS Voltage, C-A (HS Vll ca) - [21022,2] as FLOAT32 +// { 21024, 2} , // Name: HS Voltage, L-L Average (HS Vll avg) - [21024,2] as FLOAT32 +// { 21026, 2} , // Name: HS Voltage, A-N (HS Vln a) - [21026,2] as FLOAT32 +// { 21028, 2} , // Name: HS Voltage, B-N (HS Vln b) - [21028,2] as FLOAT32 +// { 21030, 2} , // Name: HS Voltage, C-N (HS Vln c) - [21030,2] as FLOAT32 +// { 21034, 2} , // Name: HS Voltage, L-N Average (HS Vln avg) - [21034,2] as FLOAT32 +// { 21040, 2} , // Name: HS Active Power A (HS kW a) - [21040,2] as FLOAT32 +// { 21042, 2} , // Name: HS Active Power B (HS kW b) - [21042,2] as FLOAT32 +// { 21044, 2} , // Name: HS Active Power C (HS kW c) - [21044,2] as FLOAT32 +// { 21046, 2} , // Name: HS Active Power Total (HS kW tot) - [21046,2] as FLOAT32 +// { 21048, 2} , // Name: HS Reactive Power A (HS kVAR a) - [21048,2] as FLOAT32 +// { 21050, 2} , // Name: HS Reactive Power B (HS kVAR b) - [21050,2] as FLOAT32 +// { 21052, 2} , // Name: HS Reactive Power C (HS kVAR c) - [21052,2] as FLOAT32 +// { 21054, 2} , // Name: HS Reactive Power Total (HS kVAR tot) - [21054,2] as FLOAT32 +// { 21056, 2} , // Name: HS Apparent Power A (HS kVA a) - [21056,2] as FLOAT32 +// { 21058, 2} , // Name: HS Apparent Power B (HS kVA b) - [21058,2] as FLOAT32 +// { 21060, 2} , // Name: HS Apparent Power C (HS kVA c) - [21060,2] as FLOAT32 +// { 21062, 2} , // Name: HS Apparent Power Total (HS kVA tot) - [21062,2] as FLOAT32 +// { 21358, 2} , // Name: K-Factor A (I1 K Factor) - [21358,2] as FLOAT32 +// { 21360, 2} , // Name: K-Factor B (I2 K Factor) - [21360,2] as FLOAT32 +// { 21362, 2} , // Name: K-Factor C (I3 K Factor) - [21362,2] as FLOAT32 +// { 27218, 2} , // Name: Min Current A (I a mn) - [27218,2] as FLOAT32 +// { 27220, 2} , // Name: Min Current B (I b mn) - [27220,2] as FLOAT32 +// { 27222, 2} , // Name: Min Current C (I c mn) - [27222,2] as FLOAT32 +// { 27224, 2} , // Name: Min Current N (I4 mn) - [27224,2] as FLOAT32 +// { 27226, 2} , // Name: Min Current G (I5 mn) - [27226,2] as FLOAT32 +// { 27228, 2} , // Name: Min Current Avg (I avg mn) - [27228,2] as FLOAT32 +// { 27238, 2} , // Name: Min Voltage A-B (Vll ab mn) - [27238,2] as FLOAT32 +// { 27240, 2} , // Name: Min Voltage B-C (Vll bc mn) - [27240,2] as FLOAT32 +// { 27242, 2} , // Name: Min Voltage C-A (Vll ca mn) - [27242,2] as FLOAT32 +// { 27244, 2} , // Name: Min Voltage L-L Avg (Vll avg mn) - [27244,2] as FLOAT32 +// { 27246, 2} , // Name: Min Voltage A-N (Vln a mn) - [27246,2] as FLOAT32 +// { 27248, 2} , // Name: Min Voltage B-N (Vln b mn) - [27248,2] as FLOAT32 +// { 27250, 2} , // Name: Min Voltage C-N (Vln c mn) - [27250,2] as FLOAT32 +// { 27254, 2} , // Name: Min Voltage L-N Avg (Vln avg mn) - [27254,2] as FLOAT32 +// { 27278, 2} , // Name: Min Active Power Total (kW tot mn) - [27278,2] as FLOAT32 +// { 27286, 2} , // Name: Min Reactive Power Total (kVAR tot mn) - [27286,2] as FLOAT32 +// { 27294, 2} , // Name: Min Apparent Power Total (kVA tot mn) - [27294,2] as FLOAT32 +// { 27616, 2} , // Name: Min Frequency (Freq mn) - [27616,2] as FLOAT32 +// { 27644, 2} , // Name: Current A Low (I a low) - [27644,2] as FLOAT32 +// { 27646, 2} , // Name: Current B Low (I b low) - [27646,2] as FLOAT32 +// { 27648, 2} , // Name: Current C Low (I c low) - [27648,2] as FLOAT32 +// { 27650, 2} , // Name: Current N Low (I4 low) - [27650,2] as FLOAT32 +// { 27652, 2} , // Name: Current Avg Low (I avg low) - [27652,2] as FLOAT32 +// { 27654, 2} , // Name: Voltage A-B Low (Vll ab low) - [27654,2] as FLOAT32 +// { 27656, 2} , // Name: Voltage B-C Low (Vll bc low) - [27656,2] as FLOAT32 +// { 27658, 2} , // Name: Voltage C-A Low (Vll ca low) - [27658,2] as FLOAT32 +// { 27660, 2} , // Name: Voltage L-L Avg Low (Vll avg low) - [27660,2] as FLOAT32 +// { 27672, 2} , // Name: Active Power Low (kW tot low) - [27672,2] as FLOAT32 +// { 27674, 2} , // Name: Reactive Power Low (kVAR tot low) - [27674,2] as FLOAT32 +// { 27676, 2} , // Name: Apparent Power Low (kVA tot low) - [27676,2] as FLOAT32 +// { 27682, 2} , // Name: Frequency Low (Freq low) - [27682,2] as FLOAT32 +// { 27694, 2} , // Name: Max Current A (I a mx) - [27694,2] as FLOAT32 +// { 27696, 2} , // Name: Max Current B (I b mx) - [27696,2] as FLOAT32 +// { 27698, 2} , // Name: Max Current C (I c mx) - [27698,2] as FLOAT32 +// { 27700, 2} , // Name: Max Current N (I4 mx) - [27700,2] as FLOAT32 +// { 27702, 2} , // Name: Max Current G (I5 mx) - [27702,2] as FLOAT32 +// { 27704, 2} , // Name: Max Current Avg (I avg mx) - [27704,2] as FLOAT32 +// { 27714, 2} , // Name: Max Voltage A-B (Vll ab mx) - [27714,2] as FLOAT32 +// { 27716, 2} , // Name: Max Voltage B-C (Vll bc mx) - [27716,2] as FLOAT32 +// { 27718, 2} , // Name: Max Voltage C-A (Vll ca mx) - [27718,2] as FLOAT32 +// { 27720, 2} , // Name: Max Voltage L-L Avg (Vll avg mx) - [27720,2] as FLOAT32 +// { 27722, 2} , // Name: Max Voltage A-N (Vln a mx) - [27722,2] as FLOAT32 +// { 27724, 2} , // Name: Max Voltage B-N (Vln b mx) - [27724,2] as FLOAT32 +// { 27726, 2} , // Name: Max Voltage C-N (Vln c mx) - [27726,2] as FLOAT32 +// { 27730, 2} , // Name: Max Voltage L-N Avg (Vln avg mx) - [27730,2] as FLOAT32 +// { 27754, 2} , // Name: Max Active Power Total (kW tot mx) - [27754,2] as FLOAT32 +// { 27762, 2} , // Name: Max Reactive Power Total (kVAR tot mx) - [27762,2] as FLOAT32 +// { 27770, 2} , // Name: Max Apparent Power Total (kVA tot mx) - [27770,2] as FLOAT32 +// { 28092, 2} , // Name: Max Frequency (Freq mx) - [28092,2] as FLOAT32 +// { 28120, 2} , // Name: Current A High (I a high) - [28120,2] as FLOAT32 +// { 28122, 2} , // Name: Current B High (I b high) - [28122,2] as FLOAT32 +// { 28124, 2} , // Name: Current C High (I c high) - [28124,2] as FLOAT32 +// { 28126, 2} , // Name: Current N High (I 4 high) - [28126,2] as FLOAT32 +// { 28128, 2} , // Name: Current Avg High (I avg high) - [28128,2] as FLOAT32 +// { 28130, 2} , // Name: Voltage A-B High (Vll ab high) - [28130,2] as FLOAT32 +// { 28132, 2} , // Name: Voltage B-C High (Vll bc high) - [28132,2] as FLOAT32 +// { 28134, 2} , // Name: Voltage C-A High (Vll ca high) - [28134,2] as FLOAT32 +// { 28136, 2} , // Name: Voltage L-L Avg High (Vll avg high) - [28136,2] as FLOAT32 +// { 28162, 2} , // Name: Active Power High (kW tot high) - [28162,2] as FLOAT32 +// { 28164, 2} , // Name: Reactive Power High (kVAR tot high) - [28164,2] as FLOAT32 +// { 28166, 2} , // Name: Apparent Power High (kVA tot high) - [28166,2] as FLOAT32 +// { 28172, 2} , // Name: Frequency High (Freq high) - [28172,2] as FLOAT32 +// { 28180, 2} , // Name: Current A Mean (I a mean) - [28180,2] as FLOAT32 +// { 28182, 2} , // Name: Current B Mean (I b mean) - [28182,2] as FLOAT32 +// { 28184, 2} , // Name: Current C Mean (I c mean) - [28184,2] as FLOAT32 +// { 28186, 2} , // Name: Current N Mean (I 4 mean) - [28186,2] as FLOAT32 +// { 28188, 2} , // Name: Current Avg Mean (I avg mean) - [28188,2] as FLOAT32 +// { 28190, 2} , // Name: Voltage A-B Mean (Vll ab mean) - [28190,2] as FLOAT32 +// { 28192, 2} , // Name: Voltage B-C Mean (Vll bc mean) - [28192,2] as FLOAT32 +// { 28194, 2} , // Name: Voltage C-A Mean (Vll ca mean) - [28194,2] as FLOAT32 +// { 28196, 2} , // Name: Voltage L-L Avg Mean (Vll avg mean) - [28196,2] as FLOAT32 +// { 28208, 2} , // Name: Active Power Mean (kW tot mean) - [28208,2] as FLOAT32 +// { 28210, 2} , // Name: Reactive Power Mean (kVAR tot mean) - [28210,2] as FLOAT32 +// { 28212, 2} , // Name: Apparent Power Mean (kVA tot mean) - [28212,2] as FLOAT32 +// { 28218, 2} , // Name: Frequency Mean (Freq mean) - [28218,2] as FLOAT32 +// { 29884, 2} , // Name: Current A Last Demand (I a sd) - [29884,2] as FLOAT32 +// { 29886, 2} , // Name: Current A Predicted Demand (I a sd pred) - [29886,2] as FLOAT32 +// { 29888, 0} , // Name: Current A Peak Demand (I a sd mx) - [29888,6] as TIMESTAMPED_FLOAT32 +// { 29898, 2} , // Name: Current B Last Demand (I b sd) - [29898,2] as FLOAT32 +// { 29900, 2} , // Name: Current B Predicted Demand (I b sd pred) - [29900,2] as FLOAT32 +// { 29902, 0} , // Name: Current B Peak Demand (I b sd mx) - [29902,6] as TIMESTAMPED_FLOAT32 +// { 29912, 2} , // Name: Current C Last Demand (I c sd) - [29912,2] as FLOAT32 +// { 29914, 2} , // Name: Current C Predicted Demand (I c sd pred) - [29914,2] as FLOAT32 +// { 29916, 0} , // Name: Current C Peak Demand (I c sd mx) - [29916,6] as TIMESTAMPED_FLOAT32 +// { 29926, 2} , // Name: Current 4 Last Demand (I 4 sd) - [29926,2] as FLOAT32 +// { 29928, 2} , // Name: Current 4 Predicted Demand (I 4 sd pred) - [29928,2] as FLOAT32 +// { 29930, 0} , // Name: Current 4 Peak Demand (I 4 sd mx) - [29930,6] as TIMESTAMPED_FLOAT32 +// { 29940, 2} , // Name: Current Avg Last Demand (I avg sd) - [29940,2] as FLOAT32 +// { 29942, 2} , // Name: Current Avg Predicted Demand (I avg sd pred) - [29942,2] as FLOAT32 +// { 29944, 0} , // Name: Current Avg Peak Demand (I avg sd mx) - [29944,6] as TIMESTAMPED_FLOAT32 +// { 29954, 2} , // Name: Active Power Last Demand (kW sd del-rec) - [29954,2] as FLOAT32 +// { 29956, 2} , // Name: Active Power Predicted Demand (kW pr del-rec) - [29956,2] as FLOAT32 +// { 29958, 0} , // Name: Active Power Peak Demand (kW sd mx d-r) - [29958,6] as TIMESTAMPED_FLOAT32 +// { 29968, 2} , // Name: Active Power Del Last Demand (kW sd del) - [29968,2] as FLOAT32 +// { 29970, 2} , // Name: Active Power Del Predicted Demand (kW pr del) - [29970,2] as FLOAT32 +// { 29972, 0} , // Name: Active Power Del Peak Demand (kW sd mx del) - [29972,6] as TIMESTAMPED_FLOAT32 +// { 29982, 2} , // Name: Active Power Rec Last Demand (kW sd rec) - [29982,2] as FLOAT32 +// { 29984, 2} , // Name: Active Power Rec Predicted Demand (kW pr rec) - [29984,2] as FLOAT32 +// { 29986, 0} , // Name: Active Power Rec Peak Demand (kW sd mx rec) - [29986,6] as TIMESTAMPED_FLOAT32 +// { 29996, 2} , // Name: Active Power Total Last Demand (kW sd del+rec) - [29996,2] as FLOAT32 +// { 29998, 2} , // Name: Active Power Total Predicted Demand (kW pr del+rec) - [29998,2] as FLOAT32 +// { 30000, 0} , // Name: Active Power Total Peak Demand (kW sd mx d+r) - [30000,6] as TIMESTAMPED_FLOAT32 +// { 30010, 2} , // Name: Reactive Power Last Demand (kVAR sd del-rec) - [30010,2] as FLOAT32 +// { 30012, 2} , // Name: Reactive Power Predicted Demand (kVAR pr del-rec) - [30012,2] as FLOAT32 +// { 30014, 0} , // Name: Reactive Power Peak Demand (kVAR sd mx d-r) - [30014,6] as TIMESTAMPED_FLOAT32 +// { 30024, 2} , // Name: Reactive Power Del Last Demand (kVAR sd del) - [30024,2] as FLOAT32 +// { 30026, 2} , // Name: Reactive Power Del Predicted Demand (kVAR pr del) - [30026,2] as FLOAT32 +// { 30028, 0} , // Name: Reactive Power Del Peak Demand (kVAR sd mx del) - [30028,6] as TIMESTAMPED_FLOAT32 +// { 30038, 2} , // Name: Reactive Power Rec Last Demand (kVAR sd rec) - [30038,2] as FLOAT32 +// { 30040, 2} , // Name: Reactive Power Rec Predicted Demand (kVAR pr rec) - [30040,2] as FLOAT32 +// { 30042, 0} , // Name: Reactive Power Rec Peak Demand (kVAR sd mx rec) - [30042,6] as TIMESTAMPED_FLOAT32 +// { 30052, 2} , // Name: Reactive Power Total Last Demand (kVAR sd del+rec) - [30052,2] as FLOAT32 +// { 30054, 2} , // Name: Reactive Power Total Predicted Demand (kVAR pr del+rec) - [30054,2] as FLOAT32 +// { 30056, 0} , // Name: Reactive Power Total Peak Demand (kVAR sd mx d+r) - [30056,6] as TIMESTAMPED_FLOAT32 +// { 30066, 2} , // Name: Apparent Power Last Demand (kVA sd del-rec) - [30066,2] as FLOAT32 +// { 30068, 2} , // Name: Apparent Power Predicted Demand (kVA pr del-rec) - [30068,2] as FLOAT32 +// { 30070, 0} , // Name: Apparent Power Peak Demand (kVA sd mx d-r) - [30070,6] as TIMESTAMPED_FLOAT32 +// { 30080, 2} , // Name: Apparent Power Del Last Demand (kVA sd del) - [30080,2] as FLOAT32 +// { 30082, 2} , // Name: Apparent Power Del Predicted Demand (kVA pr del) - [30082,2] as FLOAT32 +// { 30084, 0} , // Name: Apparent Power Del Peak Demand (kVA sd mx del) - [30084,6] as TIMESTAMPED_FLOAT32 +// { 30094, 2} , // Name: Apparent Power Rec Last Demand (kVA sd rec) - [30094,2] as FLOAT32 +// { 30096, 2} , // Name: Apparent Power Rec Predicted Demand (kVA pr rec) - [30096,2] as FLOAT32 +// { 30098, 0} , // Name: Apparent Power Rec Peak Demand (kVA sd mx rec) - [30098,6] as TIMESTAMPED_FLOAT32 +// { 30108, 2} , // Name: Apparent Power Total Last Demand (kVA sd del+rec) - [30108,2] as FLOAT32 +// { 30110, 2} , // Name: Apparent Power Total Predicted Demand (kVA pr del+rec) - [30110,2] as FLOAT32 +// { 30112, 0} , // Name: Apparent Power Total Peak Demand (kVA sd mx d+r) - [30112,6] as TIMESTAMPED_FLOAT32 +// { 30222, 2} , // Name: Active Power Del A Last Demand (kW sd del A) - [30222,2] as FLOAT32 +// { 30224, 2} , // Name: Active Power Del A Predicted Demand (kW pr del A) - [30224,2] as FLOAT32 +// { 30226, 0} , // Name: Active Power Del A Peak Demand (kW sd mx del A) - [30226,6] as TIMESTAMPED_FLOAT32 +// { 30236, 2} , // Name: Active Power Del B Last Demand (kW sd del B) - [30236,2] as FLOAT32 +// { 30238, 2} , // Name: Active Power Del B Predicted Demand (kW pr del B) - [30238,2] as FLOAT32 +// { 30240, 0} , // Name: Active Power Del B Peak Demand (kW sd mx del B) - [30240,6] as TIMESTAMPED_FLOAT32 +// { 30250, 2} , // Name: Active Power Del C Last Demand (kW sd del C) - [30250,2] as FLOAT32 +// { 30252, 2} , // Name: Active Power Del C Predicted Demand (kW pr del C) - [30252,2] as FLOAT32 +// { 30254, 0} , // Name: Active Power Del C Peak Demand (kW sd mx del C) - [30254,6] as TIMESTAMPED_FLOAT32 +// { 30264, 2} , // Name: Active Power Del D Last Demand (kW sd del D) - [30264,2] as FLOAT32 +// { 30266, 2} , // Name: Active Power Del D Predicted Demand (kW pr del D) - [30266,2] as FLOAT32 +// { 30268, 0} , // Name: Active Power Del D Peak Demand (kW sd mx del D) - [30268,6] as TIMESTAMPED_FLOAT32 +// { 30278, 2} , // Name: Active Power Rec A Last Demand (kW sd rec A) - [30278,2] as FLOAT32 +// { 30280, 2} , // Name: Active Power Rec A Predicted Demand (kW pr rec A) - [30280,2] as FLOAT32 +// { 30282, 0} , // Name: Active Power Rec A Peak Demand (kW sd mx rec A) - [30282,6] as TIMESTAMPED_FLOAT32 +// { 30292, 2} , // Name: Active Power Rec B Last Demand (kW sd rec B) - [30292,2] as FLOAT32 +// { 30294, 2} , // Name: Active Power Rec B Predicted Demand (kW pr rec B) - [30294,2] as FLOAT32 +// { 30296, 0} , // Name: Active Power Rec B Peak Demand (kW sd mx rec B) - [30296,6] as TIMESTAMPED_FLOAT32 +// { 30306, 2} , // Name: Active Power Rec C Last Demand (kW sd rec C) - [30306,2] as FLOAT32 +// { 30308, 2} , // Name: Active Power Rec C Predicted Demand (kW pr rec C) - [30308,2] as FLOAT32 +// { 30310, 0} , // Name: Active Power Rec C Peak Demand (kW sd mx rec C) - [30310,6] as TIMESTAMPED_FLOAT32 +// { 30320, 2} , // Name: Active Power Rec D Last Demand (kW sd rec D) - [30320,2] as FLOAT32 +// { 30322, 2} , // Name: Active Power Rec D Predicted Demand (kW pr rec D) - [30322,2] as FLOAT32 +// { 30324, 0} , // Name: Active Power Rec D Peak Demand (kW sd mx rec D) - [30324,6] as TIMESTAMPED_FLOAT32 +// { 30334, 2} , // Name: Reactive Power Del A Last Demand (kVAR sd del A) - [30334,2] as FLOAT32 +// { 30336, 2} , // Name: Reactive Power Del A Predicted Demand (kVAR pr del A) - [30336,2] as FLOAT32 +// { 30338, 0} , // Name: Reactive Power Del A Peak Demand (kVAR sd mx d A) - [30338,6] as TIMESTAMPED_FLOAT32 +// { 30348, 2} , // Name: Reactive Power Del B Last Demand (kVAR sd del B) - [30348,2] as FLOAT32 +// { 30350, 2} , // Name: Reactive Power Del B Predicted Demand (kVAR pr del B) - [30350,2] as FLOAT32 +// { 30352, 0} , // Name: Reactive Power Del B Peak Demand (kVAR sd mx d B) - [30352,6] as TIMESTAMPED_FLOAT32 +// { 30362, 2} , // Name: Reactive Power Del C Last Demand (kVAR sd del C) - [30362,2] as FLOAT32 +// { 30364, 2} , // Name: Reactive Power Del C Predicted Demand (kVAR pr del C) - [30364,2] as FLOAT32 +// { 30366, 0} , // Name: Reactive Power Del C Peak Demand (kVAR sd mx d C) - [30366,6] as TIMESTAMPED_FLOAT32 +// { 30376, 2} , // Name: Reactive Power Del D Last Demand (kVAR sd del D) - [30376,2] as FLOAT32 +// { 30378, 2} , // Name: Reactive Power Del D Predicted Demand (kVAR pr del D) - [30378,2] as FLOAT32 +// { 30380, 0} , // Name: Reactive Power Del D Peak Demand (kVAR sd mx d D) - [30380,6] as TIMESTAMPED_FLOAT32 +// { 30390, 2} , // Name: Reactive Power Rec A Last Demand (kVAR sd rec A) - [30390,2] as FLOAT32 +// { 30392, 2} , // Name: Reactive Power Rec A Predicted Demand (kVAR pr rec A) - [30392,2] as FLOAT32 +// { 30394, 0} , // Name: Reactive Power Rec A Peak Demand (kVAR sd mx r A) - [30394,6] as TIMESTAMPED_FLOAT32 +// { 30404, 2} , // Name: Reactive Power Rec B Last Demand (kVAR sd rec B) - [30404,2] as FLOAT32 +// { 30406, 2} , // Name: Reactive Power Rec B Predicted Demand (kVAR pr rec B) - [30406,2] as FLOAT32 +// { 30408, 0} , // Name: Reactive Power Rec B Peak Demand (kVAR sd mx r B) - [30408,6] as TIMESTAMPED_FLOAT32 +// { 30418, 2} , // Name: Reactive Power Rec C Last Demand (kVAR sd rec C) - [30418,2] as FLOAT32 +// { 30420, 2} , // Name: Reactive Power Rec C Predicted Demand (kVAR pr rec C) - [30420,2] as FLOAT32 +// { 30422, 0} , // Name: Reactive Power Rec C Peak Demand (kVAR sd mx r C) - [30422,6] as TIMESTAMPED_FLOAT32 +// { 30432, 2} , // Name: Reactive Power Rec D Last Demand (kVAR sd rec D) - [30432,2] as FLOAT32 +// { 30434, 2} , // Name: Reactive Power Rec D Predicted Demand (kVAR pr rec D) - [30434,2] as FLOAT32 +// { 30436, 0} , // Name: Reactive Power Rec D Peak Demand (kVAR sd mx r D) - [30436,6] as TIMESTAMPED_FLOAT32 +// { 30446, 2} , // Name: Apparent Power Del A Last Demand (kVA sd del A) - [30446,2] as FLOAT32 +// { 30448, 2} , // Name: Apparent Power Del A Predicted Demand (kVA pr del A) - [30448,2] as FLOAT32 +// { 30450, 0} , // Name: Apparent Power Del A Peak Demand (kVA sd mx del A) - [30450,6] as TIMESTAMPED_FLOAT32 +// { 30460, 2} , // Name: Apparent Power Del B Last Demand (kVA sd del B) - [30460,2] as FLOAT32 +// { 30462, 2} , // Name: Apparent Power Del B Predicted Demand (kVA pr del B) - [30462,2] as FLOAT32 +// { 30464, 0} , // Name: Apparent Power Del B Peak Demand (kVA sd mx del B) - [30464,6] as TIMESTAMPED_FLOAT32 +// { 30474, 2} , // Name: Apparent Power Del C Last Demand (kVA sd del C) - [30474,2] as FLOAT32 +// { 30476, 2} , // Name: Apparent Power Del C Predicted Demand (kVA pr del C) - [30476,2] as FLOAT32 +// { 30478, 0} , // Name: Apparent Power Del C Peak Demand (kVA sd mx del C) - [30478,6] as TIMESTAMPED_FLOAT32 +// { 30488, 2} , // Name: Apparent Power Del D Last Demand (kVA sd del D) - [30488,2] as FLOAT32 +// { 30490, 2} , // Name: Apparent Power Del D Predicted Demand (kVA pr del D) - [30490,2] as FLOAT32 +// { 30492, 0} , // Name: Apparent Power Del D Peak Demand (kVA sd mx del D) - [30492,6] as TIMESTAMPED_FLOAT32 +// { 30502, 2} , // Name: Apparent Power Rec A Last Demand (kVA sd rec A) - [30502,2] as FLOAT32 +// { 30504, 2} , // Name: Apparent Power Rec A Predicted Demand (kVA pr rec A) - [30504,2] as FLOAT32 +// { 30506, 0} , // Name: Apparent Power Rec A Peak Demand (kVA sd mx rec A) - [30506,6] as TIMESTAMPED_FLOAT32 +// { 30516, 2} , // Name: Apparent Power Rec B Last Demand (kVA sd rec B) - [30516,2] as FLOAT32 +// { 30518, 2} , // Name: Apparent Power Rec B Predicted Demand (kVA pr rec B) - [30518,2] as FLOAT32 +// { 30520, 0} , // Name: Apparent Power Rec B Peak Demand (kVA sd mx rec B) - [30520,6] as TIMESTAMPED_FLOAT32 +// { 30530, 2} , // Name: Apparent Power Rec C Last Demand (kVA sd rec C) - [30530,2] as FLOAT32 +// { 30532, 2} , // Name: Apparent Power Rec C Predicted Demand (kVA pr rec C) - [30532,2] as FLOAT32 +// { 30534, 0} , // Name: Apparent Power Rec C Peak Demand (kVA sd mx rec C) - [30534,6] as TIMESTAMPED_FLOAT32 +// { 30544, 2} , // Name: Apparent Power Rec D Last Demand (kVA sd rec D) - [30544,2] as FLOAT32 +// { 30546, 2} , // Name: Apparent Power Rec D Predicted Demand (kVA pr rec D) - [30546,2] as FLOAT32 +// { 30548, 0} , // Name: Apparent Power Rec D Peak Demand (kVA sd mx rec D) - [30548,6] as TIMESTAMPED_FLOAT32 +// { 30558, 2} , // Name: Active Power Q1 Last Demand (kW sd Q1) - [30558,2] as FLOAT32 +// { 30560, 2} , // Name: Active Power Q1 Predicted Demand (kW pr Q1) - [30560,2] as FLOAT32 +// { 30562, 0} , // Name: Active Power Q1 Peak Demand (kW sd mx Q1) - [30562,6] as TIMESTAMPED_FLOAT32 +// { 30572, 2} , // Name: Active Power Q2 Last Demand (kW sd Q2) - [30572,2] as FLOAT32 +// { 30574, 2} , // Name: Active Power Q2 Predicted Demand (kW pr Q2) - [30574,2] as FLOAT32 +// { 30576, 0} , // Name: Active Power Q2 Peak Demand (kW sd mx Q2) - [30576,6] as TIMESTAMPED_FLOAT32 +// { 30586, 2} , // Name: Active Power Q3 Last Demand (kW sd Q3) - [30586,2] as FLOAT32 +// { 30588, 2} , // Name: Active Power Q3 Predicted Demand (kW pr Q3) - [30588,2] as FLOAT32 +// { 30590, 0} , // Name: Active Power Q3 Peak Demand (kW sd mx Q3) - [30590,6] as TIMESTAMPED_FLOAT32 +// { 30600, 2} , // Name: Active Power Q4 Last Demand (kW sd Q4) - [30600,2] as FLOAT32 +// { 30602, 2} , // Name: Active Power Q4 Predicted Demand (kW pr Q4) - [30602,2] as FLOAT32 +// { 30604, 0} , // Name: Active Power Q4 Peak Demand (kW sd mx Q4) - [30604,6] as TIMESTAMPED_FLOAT32 +// { 30614, 2} , // Name: Reactive Power Q1 Last Demand (kVAR sd Q1) - [30614,2] as FLOAT32 +// { 30616, 2} , // Name: Reactive Power Q1 Predicted Demand (kVAR pr Q1) - [30616,2] as FLOAT32 +// { 30618, 0} , // Name: Reactive Power Q1 Peak Demand (kVAR sd mx Q1) - [30618,6] as TIMESTAMPED_FLOAT32 +// { 30628, 2} , // Name: Reactive Power Q2 Last Demand (kVAR sd Q2) - [30628,2] as FLOAT32 +// { 30630, 2} , // Name: Reactive Power Q2 Predicted Demand (kVAR pr Q2) - [30630,2] as FLOAT32 +// { 30632, 0} , // Name: Reactive Power Q2 Peak Demand (kVAR sd mx Q2) - [30632,6] as TIMESTAMPED_FLOAT32 +// { 30642, 2} , // Name: Reactive Power Q3 Last Demand (kVAR sd Q3) - [30642,2] as FLOAT32 +// { 30644, 2} , // Name: Reactive Power Q3 Predicted Demand (kVAR pr Q3) - [30644,2] as FLOAT32 +// { 30646, 0} , // Name: Reactive Power Q3 Peak Demand (kVAR sd mx Q3) - [30646,6] as TIMESTAMPED_FLOAT32 +// { 30656, 2} , // Name: Reactive Power Q4 Last Demand (kVAR sd Q4) - [30656,2] as FLOAT32 +// { 30658, 2} , // Name: Reactive Power Q4 Predicted Demand (kVAR pr Q4) - [30658,2] as FLOAT32 +// { 30660, 0} , // Name: Reactive Power Q4 Peak Demand (kVAR sd mx Q4) - [30660,6] as TIMESTAMPED_FLOAT32 +// { 30670, 2} , // Name: Apparent Power Q1 Last Demand (kVA sd Q1) - [30670,2] as FLOAT32 +// { 30672, 2} , // Name: Apparent Power Q1 Predicted Demand (kVA pr Q1) - [30672,2] as FLOAT32 +// { 30674, 0} , // Name: Apparent Power Q1 Peak Demand (kVA sd mx Q1) - [30674,6] as TIMESTAMPED_FLOAT32 +// { 30684, 2} , // Name: Apparent Power Q2 Last Demand (kVA sd Q2) - [30684,2] as FLOAT32 +// { 30686, 2} , // Name: Apparent Power Q2 Predicted Demand (kVA pr Q2) - [30686,2] as FLOAT32 +// { 30688, 0} , // Name: Apparent Power Q2 Peak Demand (kVA sd mx Q2) - [30688,6] as TIMESTAMPED_FLOAT32 +// { 30698, 2} , // Name: Apparent Power Q3 Last Demand (kVA sd Q3) - [30698,2] as FLOAT32 +// { 30700, 2} , // Name: Apparent Power Q3 Predicted Demand (kVA pr Q3) - [30700,2] as FLOAT32 +// { 30702, 0} , // Name: Apparent Power Q3 Peak Demand (kVA sd mx Q3) - [30702,6] as TIMESTAMPED_FLOAT32 +// { 30712, 2} , // Name: Apparent Power Q4 Last Demand (kVA sd Q4) - [30712,2] as FLOAT32 +// { 30714, 2} , // Name: Apparent Power Q4 Predicted Demand (kVA pr Q4) - [30714,2] as FLOAT32 +// { 30716, 0} , // Name: Apparent Power Q4 Peak Demand (kVA sd mx Q4) - [30716,6] as TIMESTAMPED_FLOAT32 +// { 30822, 2} , // Name: Block Demand Active Power (kVA co kW d-r) - [30822,2] as FLOAT32 +// { 30824, 2} , // Name: Block Demand Active Power Into the Load (kVA co kW del) - [30824,2] as FLOAT32 +// { 30826, 2} , // Name: Block Demand Active Power Out of the Load (kVA co kW rec) - [30826,2] as FLOAT32 +// { 30828, 2} , // Name: Block Demand Active Power Total (kVA co kW d+r) - [30828,2] as FLOAT32 +// { 30830, 2} , // Name: Block Demand Reactive Power (kVA co kVAR d-r) - [30830,2] as FLOAT32 +// { 30832, 2} , // Name: Block Demand Reactive Power Into the Load (kVA co kVAR del) - [30832,2] as FLOAT32 +// { 30834, 2} , // Name: Block Demand Reactive Power Out of the Load (kVA co kVAR rec) - [30834,2] as FLOAT32 +// { 30836, 2} , // Name: Block Demand Reactive Power Total (kVA co kVAR d+r) - [30836,2] as FLOAT32 +// { 30838, 2} , // Name: Block Demand Active Power (kVAR co kW d-r) - [30838,2] as FLOAT32 +// { 30840, 2} , // Name: Block Demand Active Power Into the Load (kVAR co kW del) - [30840,2] as FLOAT32 +// { 30842, 2} , // Name: Block Demand Active Power Out of the Load (kVAR co kW rec) - [30842,2] as FLOAT32 +// { 30844, 2} , // Name: Block Demand Active Power Total (kVAR co kW d+r) - [30844,2] as FLOAT32 +// { 30846, 2} , // Name: Block Demand Apparent Power (kVAR co kVA d-r) - [30846,2] as FLOAT32 +// { 30848, 2} , // Name: Block Demand Apparent Power Into the Load (kVAR co kVA del) - [30848,2] as FLOAT32 +// { 30850, 2} , // Name: Block Demand Apparent Power Out of the Load (kVAR co kVA rec) - [30850,2] as FLOAT32 +// { 30852, 2} , // Name: Block Demand Apparent Power Total (kVAR co kVA d+r) - [30852,2] as FLOAT32 +// { 30854, 2} , // Name: Block Demand Reactive Power (kW co kVAR d-r) - [30854,2] as FLOAT32 +// { 30856, 2} , // Name: Block Demand Reactive Power Into the Load (kW co kVAR del) - [30856,2] as FLOAT32 +// { 30858, 2} , // Name: Block Demand Reactive Power Out of the Load (kW co kVAR rec) - [30858,2] as FLOAT32 +// { 30860, 2} , // Name: Block Demand Reactive Power Total (kW co kVAR d+r) - [30860,2] as FLOAT32 +// { 30862, 2} , // Name: Block Demand Apparent Power (kW co kVA d-r) - [30862,2] as FLOAT32 +// { 30864, 2} , // Name: Block Demand Apparent Power Into the Load (kW co kVA del) - [30864,2] as FLOAT32 +// { 30866, 2} , // Name: Block Demand Apparent Power Out of the Load (kW co kVA rec) - [30866,2] as FLOAT32 +// { 30868, 2} , // Name: Block Demand Apparent Power Total (kW co kVA d+r) - [30868,2] as FLOAT32 +// { 30870, 3} , // Name: Active Energy Delivered Rate 1 (PB kWh del A) - [30870,4] as INT64 +// { 30874, 3} , // Name: Active Energy Delivered Rate 2 (PB kWh del B) - [30874,4] as INT64 +// { 30878, 3} , // Name: Active Energy Delivered Rate 3 (PB kWh del C) - [30878,4] as INT64 +// { 30882, 3} , // Name: Active Energy Delivered Rate 4 (PB kWh del D) - [30882,4] as INT64 +// { 30886, 3} , // Name: Active Energy Delivered (PB kWh del) - [30886,4] as INT64 +// { 30890, 3} , // Name: Active Energy Received (PB kWh rec) - [30890,4] as INT64 +// { 30894, 3} , // Name: Reactive Energy Delivered (PB kVARh del) - [30894,4] as INT64 +// { 30898, 3} , // Name: Reactive Energy Received (PB kVARh rec) - [30898,4] as INT64 +// { 30902, 3} , // Name: Apparent Energy Delivered (PB kVAh del) - [30902,4] as INT64 +// { 30906, 3} , // Name: Apparent Energy Received (PB kVAh rec) - [30906,4] as INT64 +// { 30910, 2} , // Name: Peak Block Demand Active Power Delived Rate 1 (PB kW sd mx d A) - [30910,2] as FLOAT32 +// { 30912, 2} , // Name: Peak Block Demand Active Power Delived Rate 2 (PB kW sd mx d B) - [30912,2] as FLOAT32 +// { 30914, 2} , // Name: Peak Block Demand Active Power Delived Rate 3 (PB kW sd mx d C) - [30914,2] as FLOAT32 +// { 30916, 2} , // Name: Peak Block Demand Active Power Delived Rate 4 (PB kW sd mx d D) - [30916,2] as FLOAT32 +// { 30918, 2} , // Name: Peak Block Demand Active Power Received (PB kW sd mx rec) - [30918,2] as FLOAT32 +// { 30920, 2} , // Name: Peak Block Demand Reactive Power Delivered (PB kVAR sd mx d) - [30920,2] as FLOAT32 +// { 30922, 2} , // Name: Peak Block Demand Reactive Power Received (PB kVAR sd mx r) - [30922,2] as FLOAT32 +// { 30924, 2} , // Name: Peak Block Demand Apparent Power Delivered (PB kVA sd mx d) - [30924,2] as FLOAT32 +// { 30926, 2} , // Name: Peak Block Demand Apparent Power Received (PB kVA sd mx r) - [30926,2] as FLOAT32 +// { 30928, 3} , // Name: Active Energy Delivered Rate 1 (PS kWh del A) - [30928,4] as INT64 +// { 30932, 3} , // Name: Active Energy Delivered Rate 2 (PS kWh del B) - [30932,4] as INT64 +// { 30936, 3} , // Name: Active Energy Delivered Rate 3 (PS kWh del C) - [30936,4] as INT64 +// { 30940, 3} , // Name: Active Energy Delivered Rate 4 (PS kWh del D) - [30940,4] as INT64 +// { 30944, 3} , // Name: Active Energy Delivered (PS kWh del) - [30944,4] as INT64 +// { 30948, 3} , // Name: Active Energy Received (PS kWh rec) - [30948,4] as INT64 +// { 30952, 3} , // Name: Reactive Energy Delivered (PS kVARh del) - [30952,4] as INT64 +// { 30956, 3} , // Name: Reactive Energy Received (PS kVARh rec) - [30956,4] as INT64 +// { 30960, 3} , // Name: Apparent Energy Delivered (PS kVAh del) - [30960,4] as INT64 +// { 30964, 3} , // Name: Apparent Energy Received (PS kVAh rec) - [30964,4] as INT64 +// { 30968, 2} , // Name: Peak Block Demand Active Power Delived Rate 1 (PS kW sd mx d A) - [30968,2] as FLOAT32 +// { 30970, 2} , // Name: Peak Block Demand Active Power Delived Rate 2 (PS kW sd mx d B) - [30970,2] as FLOAT32 +// { 30972, 2} , // Name: Peak Block Demand Active Power Delived Rate 3 (PS kW sd mx d C) - [30972,2] as FLOAT32 +// { 30974, 2} , // Name: Peak Block Demand Active Power Delived Rate 4 (PS kW sd mx d D) - [30974,2] as FLOAT32 +// { 30976, 2} , // Name: Peak Block Demand Active Power Received (PS kW sd mx rec) - [30976,2] as FLOAT32 +// { 30978, 2} , // Name: Peak Block Demand Reactive Power Delivered (PS kVAR sd mx d) - [30978,2] as FLOAT32 +// { 30980, 2} , // Name: Peak Block Demand Reactive Power Received (PS kVAR sd mx r) - [30980,2] as FLOAT32 +// { 30982, 2} , // Name: Peak Block Demand Apparent Power Delivered (PS kVA sd mx d) - [30982,2] as FLOAT32 +// { 30984, 2} , // Name: Peak Block Demand Apparent Power Received (PS kVA sd mx r) - [30984,2] as FLOAT32 +// { 30986, 2} , // Name: Active Energy Delivered Rate 1 (PB kWh del A) - [30986,2] as FLOAT32 +// { 30988, 2} , // Name: Active Energy Delivered Rate 2 (PB kWh del B) - [30988,2] as FLOAT32 +// { 30990, 2} , // Name: Active Energy Delivered Rate 3 (PB kWh del C) - [30990,2] as FLOAT32 +// { 30992, 2} , // Name: Active Energy Delivered Rate 4 (PB kWh del D) - [30992,2] as FLOAT32 +// { 30994, 2} , // Name: Active Energy Delivered (PB kWh del) - [30994,2] as FLOAT32 +// { 30996, 2} , // Name: Active Energy Received (PB kWh rec) - [30996,2] as FLOAT32 +// { 30998, 2} , // Name: Reactive Energy Delivered (PB kVARh del) - [30998,2] as FLOAT32 +// { 31000, 2} , // Name: Reactive Energy Received (PB kVARh rec) - [31000,2] as FLOAT32 +// { 31002, 2} , // Name: Apparent Energy Delivered (PB kVAh del) - [31002,2] as FLOAT32 +// { 31004, 2} , // Name: Apparent Energy Received (PB kVAh rec) - [31004,2] as FLOAT32 +// { 31006, 2} , // Name: Active Energy Delivered Rate 1 (PS kWh del A) - [31006,2] as FLOAT32 +// { 31008, 2} , // Name: Active Energy Delivered Rate 2 (PS kWh del B) - [31008,2] as FLOAT32 +// { 31010, 2} , // Name: Active Energy Delivered Rate 3 (PS kWh del C) - [31010,2] as FLOAT32 +// { 31012, 2} , // Name: Active Energy Delivered Rate 4 (PS kWh del D) - [31012,2] as FLOAT32 +// { 31014, 2} , // Name: Active Energy Delivered (PS kWh del) - [31014,2] as FLOAT32 +// { 31016, 2} , // Name: Active Energy Received (PS kWh rec) - [31016,2] as FLOAT32 +// { 31018, 2} , // Name: Reactive Energy Delivered (PS kVARh del) - [31018,2] as FLOAT32 +// { 31020, 2} , // Name: Reactive Energy Received (PS kVARh rec) - [31020,2] as FLOAT32 +// { 31022, 2} , // Name: Apparent Energy Delivered (PS kVAh del) - [31022,2] as FLOAT32 +// { 31024, 2} , // Name: Apparent Energy Received (PS kVAh rec) - [31024,2] as FLOAT32 +// { 34352, 2} , // Name: Current, Phase A 3 Second (150/180 Cycles) (I1 3s) - [34352,2] as FLOAT32 +// { 34354, 2} , // Name: Current, Phase A 10 Minute (I1 10m) - [34354,2] as FLOAT32 +// { 34358, 2} , // Name: Current, Phase B 3 Second (150/180 Cycles) (I2 3s) - [34358,2] as FLOAT32 +// { 34360, 2} , // Name: Current, Phase B 10 Minute (I2 10m) - [34360,2] as FLOAT32 +// { 34364, 2} , // Name: Current, Phase C 3 Second (150/180 Cycles) (I3 3s) - [34364,2] as FLOAT32 +// { 34366, 2} , // Name: Current, Phase C 10 Minute (I3 10m) - [34366,2] as FLOAT32 +// { 34400, 2} , // Name: Voltage, A-N 3 Second (150/180 Cycles) (V1 3s) - [34400,2] as FLOAT32 +// { 34402, 2} , // Name: Voltage, A-N 10 Minute (V1 10m) - [34402,2] as FLOAT32 +// { 34404, 2} , // Name: Voltage, A-N 2 Hour (V1 2hr) - [34404,2] as FLOAT32 +// { 34406, 2} , // Name: Voltage, B-N 3 Second (150/180 Cycles) (V2 3s) - [34406,2] as FLOAT32 +// { 34408, 2} , // Name: Voltage, B-N 10 Minute (V2 10m) - [34408,2] as FLOAT32 +// { 34410, 2} , // Name: Voltage, B-N 2 Hour (V2 2hr) - [34410,2] as FLOAT32 +// { 34412, 2} , // Name: Voltage, C-N 3 Second (150/180 Cycles) (V3 3s) - [34412,2] as FLOAT32 +// { 34414, 2} , // Name: Voltage, C-N 10 Minute (V3 10m) - [34414,2] as FLOAT32 +// { 34416, 2} , // Name: Voltage, C-N 2 Hour (V3 2hr) - [34416,2] as FLOAT32 +// { 34472, 2} , // Name: Power Frequency 3 Second (150/180 Cycles) (Power Frequency) - [34472,2] as FLOAT32 +// { 34474, 2} , // Name: Power Frequency 10 Minute (Power Freq 10m) - [34474,2] as FLOAT32 +// { 34476, 2} , // Name: Power Frequency 2 Hour (Power Freq 2hr) - [34476,2] as FLOAT32 +// { 40000, 2} , // Name: Frequency 10m Mean (PQ Freq mean) - [40000,2] as FLOAT32 +// { 40002, 2} , // Name: Frequency 10m Low (PQ Freq low) - [40002,2] as FLOAT32 +// { 40004, 2} , // Name: Frequency 10m High (PQ Freq high) - [40004,2] as FLOAT32 +// { 40006, 2} , // Name: Frequency Minimum (PQ Freq mn-op) - [40006,2] as FLOAT32 +// { 40008, 2} , // Name: Frequency Maximum (PQ Freq mx-op) - [40008,2] as FLOAT32 +// { 40010, 2} , // Name: V1 10m Mean (PQ V1 mean) - [40010,2] as FLOAT32 +// { 40012, 2} , // Name: V1 10m Low (PQ V1 low) - [40012,2] as FLOAT32 +// { 40014, 2} , // Name: V1 10m High (PQ V1 high) - [40014,2] as FLOAT32 +// { 40016, 2} , // Name: V2 10m Mean (PQ V2 mean) - [40016,2] as FLOAT32 +// { 40018, 2} , // Name: V2 10m Low (PQ V2 low) - [40018,2] as FLOAT32 +// { 40020, 2} , // Name: V2 10m High (PQ V2 high) - [40020,2] as FLOAT32 +// { 40022, 2} , // Name: V3 10m Mean (PQ V3 mean) - [40022,2] as FLOAT32 +// { 40024, 2} , // Name: V3 10m Low (PQ V3 low) - [40024,2] as FLOAT32 +// { 40026, 2} , // Name: V3 10m High (PQ V3 high) - [40026,2] as FLOAT32 +// { 54396, 1} , // Name: FAC1 Nominal Frequency (N/A) - [54396,1] as INT16U +// { 56977, 0} , // Name: COM1 RTS Delay (N/A) - [56977,2] as INT32 + +} +; diff --git a/firmware/modbus-sim800c-pm8000/util.h b/firmware/modbus-sim800c-pm8000/util.h new file mode 100644 index 0000000..fc150b3 --- /dev/null +++ b/firmware/modbus-sim800c-pm8000/util.h @@ -0,0 +1,27 @@ +#include +#include +#include + +uint32_t getRegisterUInt32(uint16_t highWord, uint16_t lowWord) { + uint32_t val = (highWord << 16) + lowWord; + return val; +} + +int32_t getRegisterInt32(uint16_t highWord, uint16_t lowWord) { + int32_t val = (highWord << 16) + lowWord; + return val; +} + +int64_t getRegisterInt64(uint16_t word1, uint16_t word2, uint16_t word3, uint16_t word4) { + uint64_t val = ((uint64_t)word1 << 48) + ((uint64_t)word2 << 32) + (word3 << 16) + word4; + return val; +} + +float getRegisterFloat(uint16_t highWord, uint16_t lowWord) { + uint32_t floatRaw = ((uint32_t)highWord << 16) | lowWord; + float floatValue; + + memcpy(&floatValue, &floatRaw, sizeof(float)); + return floatValue; +} + diff --git a/firmware/modbus-sd/modbus-sd-01.ino b/firmware/testing/modbus-sd-01.ino similarity index 100% rename from firmware/modbus-sd/modbus-sd-01.ino rename to firmware/testing/modbus-sd-01.ino