From d740e88ae006815f248671ac4bdb96d1c6c82078 Mon Sep 17 00:00:00 2001 From: Toby <2287769986@qq.com> Date: Mon, 14 Apr 2025 19:29:39 +0800 Subject: [PATCH] init --- .gitignore | 1 + .vscode/launch.json | 18 + config.js | 12 + config.js.tmpl | 12 + ...c05416-12bf-4790-98a5-09ba194fad73.001.png | Bin 0 -> 11200 bytes ...c05416-12bf-4790-98a5-09ba194fad73.002.png | Bin 0 -> 266 bytes ...c05416-12bf-4790-98a5-09ba194fad73.003.png | Bin 0 -> 201 bytes ...c05416-12bf-4790-98a5-09ba194fad73.004.png | Bin 0 -> 245 bytes ...c05416-12bf-4790-98a5-09ba194fad73.005.png | Bin 0 -> 294 bytes ...c05416-12bf-4790-98a5-09ba194fad73.006.png | Bin 0 -> 723 bytes ...c05416-12bf-4790-98a5-09ba194fad73.007.png | Bin 0 -> 796 bytes ...c05416-12bf-4790-98a5-09ba194fad73.008.png | Bin 0 -> 660 bytes ...c05416-12bf-4790-98a5-09ba194fad73.009.png | Bin 0 -> 773 bytes ...c05416-12bf-4790-98a5-09ba194fad73.010.png | Bin 0 -> 510 bytes ...c05416-12bf-4790-98a5-09ba194fad73.011.png | Bin 0 -> 703 bytes ...c05416-12bf-4790-98a5-09ba194fad73.012.png | Bin 0 -> 785 bytes ...c05416-12bf-4790-98a5-09ba194fad73.013.png | Bin 0 -> 513 bytes ...c05416-12bf-4790-98a5-09ba194fad73.014.png | Bin 0 -> 673 bytes ...c05416-12bf-4790-98a5-09ba194fad73.015.png | Bin 0 -> 763 bytes ...c05416-12bf-4790-98a5-09ba194fad73.016.png | Bin 0 -> 496 bytes ...c05416-12bf-4790-98a5-09ba194fad73.017.png | Bin 0 -> 675 bytes ...c05416-12bf-4790-98a5-09ba194fad73.018.png | Bin 0 -> 776 bytes ...c05416-12bf-4790-98a5-09ba194fad73.019.png | Bin 0 -> 766 bytes ...05416-12bf-4790-98a5-09ba194fad73.020.jpeg | Bin 0 -> 76401 bytes ...c05416-12bf-4790-98a5-09ba194fad73.021.png | Bin 0 -> 776 bytes ...c05416-12bf-4790-98a5-09ba194fad73.022.png | Bin 0 -> 681 bytes ...c05416-12bf-4790-98a5-09ba194fad73.023.png | Bin 0 -> 1325 bytes ...c05416-12bf-4790-98a5-09ba194fad73.024.png | Bin 0 -> 710 bytes ...c05416-12bf-4790-98a5-09ba194fad73.025.png | Bin 0 -> 1475 bytes ...c05416-12bf-4790-98a5-09ba194fad73.026.png | Bin 0 -> 755 bytes ...c05416-12bf-4790-98a5-09ba194fad73.027.png | Bin 0 -> 671 bytes ...c05416-12bf-4790-98a5-09ba194fad73.028.png | Bin 0 -> 715 bytes ...c05416-12bf-4790-98a5-09ba194fad73.029.png | Bin 0 -> 1061 bytes ...c05416-12bf-4790-98a5-09ba194fad73.030.png | Bin 0 -> 696 bytes ...c05416-12bf-4790-98a5-09ba194fad73.031.png | Bin 0 -> 708 bytes ...c05416-12bf-4790-98a5-09ba194fad73.032.png | Bin 0 -> 687 bytes ...c05416-12bf-4790-98a5-09ba194fad73.033.png | Bin 0 -> 1420 bytes ...c05416-12bf-4790-98a5-09ba194fad73.034.png | Bin 0 -> 1310 bytes ...c05416-12bf-4790-98a5-09ba194fad73.035.png | Bin 0 -> 1295 bytes ...c05416-12bf-4790-98a5-09ba194fad73.036.png | Bin 0 -> 759 bytes ...c05416-12bf-4790-98a5-09ba194fad73.037.png | Bin 0 -> 792 bytes ...c05416-12bf-4790-98a5-09ba194fad73.038.png | Bin 0 -> 785 bytes ...c05416-12bf-4790-98a5-09ba194fad73.039.png | Bin 0 -> 805 bytes ...c05416-12bf-4790-98a5-09ba194fad73.040.png | Bin 0 -> 760 bytes ...c05416-12bf-4790-98a5-09ba194fad73.041.png | Bin 0 -> 765 bytes ...c05416-12bf-4790-98a5-09ba194fad73.042.png | Bin 0 -> 721 bytes ...c05416-12bf-4790-98a5-09ba194fad73.043.png | Bin 0 -> 804 bytes ...c05416-12bf-4790-98a5-09ba194fad73.044.png | Bin 0 -> 1325 bytes ...c05416-12bf-4790-98a5-09ba194fad73.045.png | Bin 0 -> 742 bytes ...c05416-12bf-4790-98a5-09ba194fad73.046.png | Bin 0 -> 696 bytes ...c05416-12bf-4790-98a5-09ba194fad73.047.png | Bin 0 -> 773 bytes ...c05416-12bf-4790-98a5-09ba194fad73.048.png | Bin 0 -> 1050 bytes ...c05416-12bf-4790-98a5-09ba194fad73.049.png | Bin 0 -> 1046 bytes ...c05416-12bf-4790-98a5-09ba194fad73.050.png | Bin 0 -> 1037 bytes ...c05416-12bf-4790-98a5-09ba194fad73.051.png | Bin 0 -> 1045 bytes ...c05416-12bf-4790-98a5-09ba194fad73.052.png | Bin 0 -> 1001 bytes ...c05416-12bf-4790-98a5-09ba194fad73.053.png | Bin 0 -> 1059 bytes ...c05416-12bf-4790-98a5-09ba194fad73.054.png | Bin 0 -> 768 bytes ...c05416-12bf-4790-98a5-09ba194fad73.055.png | Bin 0 -> 774 bytes ...c05416-12bf-4790-98a5-09ba194fad73.056.png | Bin 0 -> 757 bytes ...c05416-12bf-4790-98a5-09ba194fad73.057.png | Bin 0 -> 788 bytes ...c05416-12bf-4790-98a5-09ba194fad73.058.png | Bin 0 -> 746 bytes ...c05416-12bf-4790-98a5-09ba194fad73.059.png | Bin 0 -> 779 bytes ...c05416-12bf-4790-98a5-09ba194fad73.060.png | Bin 0 -> 771 bytes ...c05416-12bf-4790-98a5-09ba194fad73.061.png | Bin 0 -> 775 bytes ...c05416-12bf-4790-98a5-09ba194fad73.062.png | Bin 0 -> 767 bytes ...c05416-12bf-4790-98a5-09ba194fad73.063.png | Bin 0 -> 760 bytes ...c05416-12bf-4790-98a5-09ba194fad73.064.png | Bin 0 -> 785 bytes ...c05416-12bf-4790-98a5-09ba194fad73.065.png | Bin 0 -> 786 bytes ...c05416-12bf-4790-98a5-09ba194fad73.066.png | Bin 0 -> 511 bytes ...c05416-12bf-4790-98a5-09ba194fad73.067.png | Bin 0 -> 673 bytes ...c05416-12bf-4790-98a5-09ba194fad73.068.png | Bin 0 -> 773 bytes ...c05416-12bf-4790-98a5-09ba194fad73.069.png | Bin 0 -> 675 bytes ...c05416-12bf-4790-98a5-09ba194fad73.070.png | Bin 0 -> 671 bytes ...c05416-12bf-4790-98a5-09ba194fad73.071.png | Bin 0 -> 803 bytes ...c05416-12bf-4790-98a5-09ba194fad73.072.png | Bin 0 -> 512 bytes ...c05416-12bf-4790-98a5-09ba194fad73.073.png | Bin 0 -> 752 bytes ...c05416-12bf-4790-98a5-09ba194fad73.074.png | Bin 0 -> 787 bytes ...c05416-12bf-4790-98a5-09ba194fad73.075.png | Bin 0 -> 506 bytes ...c05416-12bf-4790-98a5-09ba194fad73.076.png | Bin 0 -> 668 bytes ...c05416-12bf-4790-98a5-09ba194fad73.077.png | Bin 0 -> 783 bytes ...c05416-12bf-4790-98a5-09ba194fad73.078.png | Bin 0 -> 682 bytes ...c05416-12bf-4790-98a5-09ba194fad73.079.png | Bin 0 -> 753 bytes ...c05416-12bf-4790-98a5-09ba194fad73.080.png | Bin 0 -> 786 bytes ...c05416-12bf-4790-98a5-09ba194fad73.081.png | Bin 0 -> 775 bytes ...c05416-12bf-4790-98a5-09ba194fad73.082.png | Bin 0 -> 777 bytes ...c05416-12bf-4790-98a5-09ba194fad73.083.png | Bin 0 -> 795 bytes ...c05416-12bf-4790-98a5-09ba194fad73.084.png | Bin 0 -> 775 bytes ...c05416-12bf-4790-98a5-09ba194fad73.085.png | Bin 0 -> 777 bytes ...c05416-12bf-4790-98a5-09ba194fad73.086.png | Bin 0 -> 757 bytes ...c05416-12bf-4790-98a5-09ba194fad73.087.png | Bin 0 -> 756 bytes ...c05416-12bf-4790-98a5-09ba194fad73.088.png | Bin 0 -> 773 bytes ...c05416-12bf-4790-98a5-09ba194fad73.089.png | Bin 0 -> 758 bytes ...c05416-12bf-4790-98a5-09ba194fad73.090.png | Bin 0 -> 514 bytes ...c05416-12bf-4790-98a5-09ba194fad73.091.png | Bin 0 -> 508 bytes ...c05416-12bf-4790-98a5-09ba194fad73.092.png | Bin 0 -> 511 bytes ...c05416-12bf-4790-98a5-09ba194fad73.093.png | Bin 0 -> 514 bytes ...c05416-12bf-4790-98a5-09ba194fad73.094.png | Bin 0 -> 502 bytes ...c05416-12bf-4790-98a5-09ba194fad73.095.png | Bin 0 -> 506 bytes ...c05416-12bf-4790-98a5-09ba194fad73.096.png | Bin 0 -> 1017 bytes ...c05416-12bf-4790-98a5-09ba194fad73.097.png | Bin 0 -> 1007 bytes ...c05416-12bf-4790-98a5-09ba194fad73.098.png | Bin 0 -> 998 bytes ...c05416-12bf-4790-98a5-09ba194fad73.099.png | Bin 0 -> 995 bytes ...c05416-12bf-4790-98a5-09ba194fad73.100.png | Bin 0 -> 993 bytes ...c05416-12bf-4790-98a5-09ba194fad73.101.png | Bin 0 -> 516 bytes ...c05416-12bf-4790-98a5-09ba194fad73.102.png | Bin 0 -> 511 bytes ...c05416-12bf-4790-98a5-09ba194fad73.103.png | Bin 0 -> 506 bytes ...c05416-12bf-4790-98a5-09ba194fad73.104.png | Bin 0 -> 761 bytes ...c05416-12bf-4790-98a5-09ba194fad73.105.png | Bin 0 -> 906 bytes ...c05416-12bf-4790-98a5-09ba194fad73.106.png | Bin 0 -> 2179 bytes ...05416-12bf-4790-98a5-09ba194fad73.107.jpeg | Bin 0 -> 73534 bytes ...c05416-12bf-4790-98a5-09ba194fad73.108.png | Bin 0 -> 923 bytes ...c05416-12bf-4790-98a5-09ba194fad73.109.png | Bin 0 -> 1497 bytes ...c05416-12bf-4790-98a5-09ba194fad73.110.png | Bin 0 -> 867 bytes ...c05416-12bf-4790-98a5-09ba194fad73.111.png | Bin 0 -> 1969 bytes ...c05416-12bf-4790-98a5-09ba194fad73.112.png | Bin 0 -> 1442 bytes ...c05416-12bf-4790-98a5-09ba194fad73.113.png | Bin 0 -> 298 bytes ...c05416-12bf-4790-98a5-09ba194fad73.114.png | Bin 0 -> 4367 bytes doc/protocol/PyroScience Unified Protocol.md | 1875 +++++++++++++++++ package.json | 18 + pnpm-lock.yaml | 325 +++ src/index.ts | 5 + src/serial.ts | 112 + src/test/config.ts | 12 + src/test/index.ts | 3 + src/test/serial.ts | 109 + tsconfig.json | 113 + 127 files changed, 2615 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 config.js create mode 100644 config.js.tmpl create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.001.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.002.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.003.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.004.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.005.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.006.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.007.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.008.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.009.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.010.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.011.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.012.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.013.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.014.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.015.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.016.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.017.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.018.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.019.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.020.jpeg create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.021.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.022.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.023.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.024.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.025.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.026.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.027.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.028.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.029.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.030.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.031.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.032.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.033.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.034.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.035.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.036.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.037.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.038.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.039.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.040.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.041.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.042.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.043.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.044.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.045.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.046.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.047.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.048.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.049.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.050.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.051.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.052.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.053.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.054.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.055.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.056.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.057.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.058.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.059.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.060.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.061.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.062.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.063.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.064.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.065.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.066.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.067.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.068.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.069.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.070.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.071.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.072.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.073.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.074.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.075.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.076.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.077.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.078.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.079.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.080.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.081.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.082.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.083.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.084.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.085.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.086.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.087.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.088.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.089.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.090.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.091.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.092.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.093.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.094.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.095.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.096.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.097.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.098.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.099.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.100.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.101.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.102.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.103.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.104.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.105.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.106.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.107.jpeg create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.108.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.109.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.110.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.111.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.112.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.113.png create mode 100644 doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.114.png create mode 100644 doc/protocol/PyroScience Unified Protocol.md create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 src/index.ts create mode 100644 src/serial.ts create mode 100644 src/test/config.ts create mode 100644 src/test/index.ts create mode 100644 src/test/serial.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..0c87778 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Start", + "runtimeExecutable": "pnpm", + "runtimeArgs": ["start"], + "skipFiles": ["/**"], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen" + }, + ] +} \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..817c67b --- /dev/null +++ b/config.js @@ -0,0 +1,12 @@ +export const config = { + port: "/dev/cu.usbserial-230", + baudRate: 9600, + dataBits: 8, + stopBits: 1, + parity: "none", + flowControl: false, +}; + +export const command = { + measure: '01 04 00 00 00 02 71 CB' +} \ No newline at end of file diff --git a/config.js.tmpl b/config.js.tmpl new file mode 100644 index 0000000..817c67b --- /dev/null +++ b/config.js.tmpl @@ -0,0 +1,12 @@ +export const config = { + port: "/dev/cu.usbserial-230", + baudRate: 9600, + dataBits: 8, + stopBits: 1, + parity: "none", + flowControl: false, +}; + +export const command = { + measure: '01 04 00 00 00 02 71 CB' +} \ No newline at end of file diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.001.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.001.png new file mode 100644 index 0000000000000000000000000000000000000000..76761e4453118949f4e38042db43521eb4b20d3c GIT binary patch literal 11200 zcmZWvbyQSew7xSmQqmnVfJ!$=OU+PtTGRQRIk5&I`);Qfhe_VXKzFS3`KFH`_If`YRQeA4)Z<#B7_T+w$Tm zR`KTnr7~2C{~`J=BD35RZC>N)7kD~xdfMGmb$P7$W|Rn`G=F;7l)LlBb?&pC*XHx= zN2_BG*yCjn&SFr(j?jajOYcJg?z?XybevzBT{_~T&?BVYW+IMq*!Gd5JhKOu_ppx@-!^IvcPdfH3j0qcUH(EW(Esm6vOadx1*?Nzg`coBUq>C|Rr#)g zCCD89qU9n%ZhDHHA|IrYp7q=97y29@G=u0+fN!gFUeLv*^^yQDU)0n;K<&|(S;&}b zy7WDHLM&Gu-e1n`2Zvj>Rr1r`HETVh7ObxRgo~el*^z|3H;3#W!Xlvb;jA|aDE+98 zHMskqLh!;M5j&+rW6__S@ePj%9fIe6cGk@z94Jx30CT~4C*Vd%g5%|-^!=vqo#=|n z6SXGamA)lsQV6xI=+#)*F5dBr1f5_nLb-6o{av#G|ucLwTP zEm-^2mZ&UVOTM@oYE99HUB*)Rkk%t($DjYrr-I$b?)a@{cU7j?sb=`dqONWXhb%2_ zv&J`GsV?Il11;mWkjFnr3;&e=#&URZAmszHS!4)ruZO5s=MBpn{;2)6FiArAW2z_x;(CF5 zhsx1EAYKY3+zg_J=;m&3D^%w2RiE0S2nNlMm6g6X6ChNDy31Wv=c90+|+*SYv1kvfZ0ql zA#g$s{bwrb!(rX)_Odbp@O}M+Uyx)%`o~{UYq-?F7IYZ@Bh?r^s`x1FBMP-#6JsI0 zs{f5?m@HcM@ZWxYXa14^6HQE!yw!4mv`yUr^+ec|YA+PENK#vqe?J!L{u!%_JBTk- zcbhdnLZp?`ux;QkjQTBD<<_(091Fq5I6#+WRs06n+GGazXQT*8?C5Y(L9W?b{oqWQRm;ZEa^;eMKRLLrm#E z54}5kg+&RP!gm5G6`&hjsF+7)mwU7Pyv@UMn&U^8?e%%Kzur2=m}GzYrDTfFj{Xn< zlslk^^++v$GDOZ9MvC@6VpKD#zualpv7i<>H2$mFaN@Z3xS z1Fx^o8TQ~dvmH~{hf`-iO8O$nSSd{*YuqS%%_(h5rk@-MgOGj7(M_!0aAz#BCPj%j zH25FDiL-cn{x|mb44Z!h>cG3bL5R6KBWidhxe0b$mgwISw!U5*DIFIAx>s1_nFWEH zAZktm`-0jIQ~$^Ss8_;@nmv#)84f-X;J#u_hB&+*VoZ#uT4Ued)A}ZR*ruvP3Cl&- zF=G1w^VB0gR3xpS`BlUZj&o%AV#Z%RlUvB&any}3a(}*8(_8*#EtVyIQq`*T53~s9 zgojhAfN1fk-Gc*SdQaU#FYhJF&)J|?bistqxY|-_DNiY^vU*~$Zenn2VM{?!$p0u?)HAJukX#WnH_}n-))n8V#c^HiNij>ah%F4=XOu2&GkSG<8 zPAn9AvOUuhCn-2|IQvUShTnS;3n^}DYI4r&z296KO*x3W|AX8$h7F1~A`b&ZkoXWU zXEFgH?A!c@PYCH0p^6kw{ry}{|Jw?#Bx6medk*SQQJZ}cot$!VcjZmHwp@Fl`cf`k z-h}#~dX-wZo>%jlMSy-w#jTXNzeY zJ-1@+Su_-QjP_XwJXJND%>E}exB!(3(~|jXjFf?F-D^r*?!C*Y_Nt=1d~0%d=uq~} zx3@&WNg9Rn8V9E6PWY%X5+MPUU?wW>3kcjOd&}pnW`K(?|CTR2W=SfyZNH1@&1$^? zp}v8EI=KF4N=WCz0ugjLni+70S)h+8j5G=ZO@UO3mG}KZ8NHDFnAIf1% zPEA$g8o=MvMN>h(!wTU$oacLgIwON$ceA|lJW@8O@;0lnLHwEeV!aA&e7l?h%l}g= z00gJjjhtS0ySAUNw2P&hws=<@9`p(3x>j5h_Po)2C)}poMv7(QdXeijVZ=lgt&)4K z3*>^l^pI2D#(DBPXv8ma=h!~?J^b_~PgJ7(@aaSB;wqriGm%SpVv_e;`%f+r$-wj~ zo!I4o^5vK}@uFU_=`*LfbU9d?+1_cu%|&BwouS37+9jL*$bC&Wxin9t(NKi4MkPdqrwxG3nl-YMmM&2leHRY$+@FqA=l>y1~QkYySx1lXN-{xEudG@c`y_=H%~h{IQT>^Nm+19(<#=GXY!*2 zfOzQHGZ49QFEbre1ubrNC#IjEaZwA13wt1!>zt#Yu+;Pd2k`+uFBW`rrEtcRoIgq0{2{p!?&TJX)U@FZPKkcDhLnqzPUR0 zYC0m!@pT&Yu;BI?zi|#5+$v)$xZH4kh$jpGY2&R3P}r{0;47mmTsFgSt2Ro*$ndvs z&W!vG>hFCJf@tLk+skS%(^a35pc1vHa!q_AQW#+eyPTDWePadR4&&d@?M5qtX5iMt zP>QWc6}G^WW_>#&s`yl;Dq?w~CoR4xbT{P60I+6nWa#Q+9QgJ~7`i8dJJ`v|Q*Zv; zBKsTpl^%LkbbH)oIA68)C%x`3t#wB0xS#5jX@V9(nVZcWFkcoFv;dPrA`>>+^H$7x z4|2pqE3&z9cs}3e-)A~`{h+6#FF8fE3Xi?0sT9DfbG?XXkvTbPKOk{bN$>s*D?^w^ zv37bis0lN}P0_13XFZ_5T#}4~sP|7oQZo46GC8DG^p!!x_S78f%ci&j-!9VtK{tzGwk_BbEqr+5i?3etCW zNsprzEW~$4C(VACiM}+3WUpNV3d1u$)G6Hvhs_DKl{uA_Z(E5u@nZ1$A2;LJQveS2 zSk{87tw)gWQs~oix#OA|Q~dudM5CDrTWZws0p^VRlz*KE$bs&4puK^q_#AN~$(@ed zo4degAS--6-{V8UBVY*Uj2|_C77=58@p_G%T<&N%&q3_M8Q4{M5=aK01{MimY`6)@ zWAxsh=q#()Cj0Ga%r!nW@m)M2dQ?gsId&I#MZCU{mNE!P#VoIW{`~p17paPIXk(a- z-~s}133KK?Hvxt;r->I6go}h_=4x#FGy)bZh%KMNI{-19GjS9f{6b*#PD8|A2E@&q z0{2wFtl85|(CIIb_f=?W#-ea;5H5`R1zaP97VyW~BzXEU!nx!`jga4iVSz!X| znZAg+;c!}Xk_?zqz_4WGn)&f62HR+Bj;3`#@78Dc&9l3|+Q8C%9xYr1B7f!Jpbjl9Em@*iuknm%enDZ>IxwGInqOcBbM<7lw_a)ak5?)% zY(ibK@YgjkoW+1iuZ55!MFJp-XUY4xU{zoAsmDaaE?yd=;}5I5LtCdGa`?St^objp z9ig$tLO2yViSlT?`EQ#=hK0%I>ZqZa{#{j*nE;e- zArrgM@K7dM!(4R}$M2PY%&{ELWotLaCKi4z`r{HngeWUBtqN+-`}AVc-6zvB;9(GWs;Ve$!HyWUQ(cBbp8tBHV0yCoM9N?bNtG-R^jI=3-oJBaC`@BFUFrpdRY2GUdh2!g)` zfg%>YxXR3yQJCp>W>n2vj{FwIUIOewHTIp(u3egX6Tjl{0S#_(6`0v*(qnD?6OZVK z(UA7&SH)8~MrB&w#(h-?+v9`~Gr2|Wl07{2i^+LVpnlQsw~`Epz1H#a!cg6? z{+ymn9IN1a%BZl3+`nb~T2xd-nP;Gd#+jJ*N=ZpkulxGDtj9Z%1jhPpbE zN5&iz({qCDXMgYZGfdb@_Q)AE5QG~@noeei@TuD(oUetk>v%Gi{jurwj zT!{1bTh1feKcb`0C5c!qSb=q$_W3Fyb~U!0YH%=oRUWnlC$1Ddz(ptF*{mk^gg6)DY=pdeHTx@H$a zYpqrH`Lok2my6wiRT)pS1}uG28$RpA$cQk#;!eN(Q^sd&75A+uaNF?jqxFVOl#Q8U zeq5Nj{<}vQs;8WUDC(D3IGri`{8{7Dm+NtjG^Z~hRRLO8BXtCKlnTEy2_z7JgJJKD zU{R3!?RR0S1pO82<#y$~@Q8R3YFjhFEjC;6sDucwMLMo=+t#rEtKFDG=E}|QgpUcN zy;JVpdLfe$b)vqvE_i&&VkI*f`c6@jFq8O{GWTI1rW1JgSmC!jjnPn5(@JKlZC`32 zo+4=v2S73Xu`!6=LawI0{pPIhn0xO*QBBmCbjdN>uhtLNV|}KDZHRjhAbUfyCU$dq@$op^m3be!o0 z``FeNh&3^dBT%AH;j+!;r@(RJ9?cwTuYB{?k#7`PENS&dg{UTd$auz7Uthv8+SXkK2<@Ga@`fYOFD3@H_<|s=%2vp8{bA(%}=pfjl5#R-o zGvs4_6KBcK_2ExXKe(4VSC;N8PUQAF{=yuPpLk`+;mu8e%&3Cy^(U`YjXA)eX9y zj)sQCz~XKwnes0e6#D4xl9xi6iZ&|y>^%w@B)xIK5k^38s1zsymu}NC=GmHQ!d*OH zOyBay-GGpjmOM?I&h+1jDTr7iwUI}LQ9Fuc$Kk3yxIQi6G-cOY^X%J9R&`snN@m{I zDPfrT=Q~f{+uO@J-Qc>gUb$(mdLV+(`zB6^h~qjhv=Nae|M&?X`!#FpzN46V` zjLv{a2w!PcRq#vpT|x6!DeI}AIrh>A))pkeX>Vl?3En<`_+q!&RKGdTvu@N4gkT4fV85%L{Z&_6_z}Am+pEctt*^Il z>#2z>N6uF6vI{7w&C`&L5P3sU1o!c7ST!VBAvl@wud<%HoBsWd{Q8k>Cv7Z!yoH-q zN@`|P@{Cj}@R{txeB{^?DJRENBZGMNRsrmVkrBgez~O*4I*7zlbwYH~Ywp#9kMEb+ zYJ->%!Kb^oH@iG7fi@M+xYd$Kn|Mg06_CU0N)MBxyQqQ!@KkRvuYp0Y%MJ2fzsZ(q z*tNuFYNDsDm)9{uTD?jT*OQER>W;&=7Vg+b8Y-fBzL$%xLq4{9M+_|nlJ*O`k>@`} zo|tb1Afl&hYOeyBoHQCJv(C^_3SF7XVhUhCUQF#3t*rSI+Fuk;wYv z@}a$A<9g8tvLw^|a@E9wO>@8X!g!nB-sS9b3ra8xle5~!aVgi*+$@o><*mxOo^Uk_ zRtVaj4IOHE``i3VM|8N%J>o5WR3=A?`aLi(@b9-*e;b%M%-Hp56=Rzh`5xH_SzObR ze01U9$g4{ww4F6)vPlX&(aw^L$8s{{>OfAD{OFrrSEtLimRzH;BW-0IMwDz@auGAKBJjyhWyJ9O zF*Axtu|a*{C4$@-$p(gUM$ahho~||TI3V1C!;Q_&g%2$Rm7hOvd;nYq0)mm-9py%~ zD>35Y>VCI^puj0ul6nG3XPkFxm@uz#82MCOJ5vWT@f|plzh-XRsRHvRvHZ>qe&r@v z?L-cj$58{=GGLp(L=b5~>BfQy#wCd|w$53vB+!%tQEd#&>7skVmfJ?V=o0!_-zxMC!BqcSKOx0LiK4qC1@g6vliTj11M5`sph8GYyBjr(r z{wG`Ont7EB5y{+rcNG7R6+j>(BV(ZXS-~6+4)XcD zuyt3!H2opa^Y!H_GjvhE+ua4%Ey{*HI&SGZj5KK(JyxQd--R<3LbdmR<-Y9DuQwf+ zbCIF!jg*RAt`mS%H@zNC-iUja4v--Bb{THn-vx58zbH=Tl9U&^9e+_Ctz+2z7-&Ek z19@C}>PTm$HS9JprTki|W_AuA3LTB>wt%$CTpr%a(q2&W64Db2q9x-8`BlHsM4^@>PRK+Y;eHvLCdVTuCH)oP) zQ4^a z52$g>8W3XD@<&8#$Iq&$>X4I_*%Q+r5>LX9YwL3H;6qczk(2ZVG`x82yY^d+hG2&I zb4ke>1d*FGhRP`n#j%7J#Q|NBVMf&Jm_JWfwhHL)j}CswVTrnK6g-+7!5cnlPYA?I z*kGSuQA|nO@_VIeflD#Gwf#hvD)I0oaSUWjZ#UpunSpemegOpFOUagh>`|_P+)1U0 z%nbXQi~p3!()Pa2i4qP}Q3f}l$9VO?NJjsrUeGvJcwk~WI5k;iTA{kCl@H~I$c4Cd z9#2{_zkP`_)|0n8YTwSjm1bWdU-uZjF*~s%9?7;8&mrVYU7rU92xgytMb9w zScI`RGGoKgWUS#Q0M-s26UKg~%y#}jMh>B!F?!nGAV12RHR7>e8$-))Oo#i`6mk2q z!daR)&>wa^<~3(75CEzZNRO)tQV?e^@GXvuf&sDP_JLgKbEiICurN5hkSXYhTK!SZ zF?0|3vOr8)eP%W?*wztDf(elXl#2iXh@r$w<8mpH15;j|k3wiHJR>I~?jD{Qu*bYy ze(u!!@ZOK@?L&w*rHY{hDe;x<>b76a`F+*XPmsMvtE<|jPh|2o?>!hp5>aw%r~$|p zn`zyx%Ur#W!F{KbUG@)TURcmclEEli9%27>Q-lpGj~0YqXa@!cb}L%N!L78lwF{b> z&gZ()$=T&*Q~~C?iFRh(uMyy9u4x5Q*uZVZH25r`z>x2xFFtU~njlWqAA#t}gTq8# zjAj68MV$K8ELbu`hoFGKe3S2?-EnQwwJCC2=67d`V1KT{?Ronv+wt-75m3@)bfsHa z$HMTyqAmsmxSI+1k!*avdORzuOV}fstkUw)OGXQNF^AzUWK~;zg~E)fHwz?-DOzQa zFw_zT&|5zOUSTHM(_eH$GR$-&E^OrCxv#k!=4KLPM;o(Fex7)K(sPa=a=H-G%8|ef zGCQ#PD}0ZKh(KR0UfK`LA1~_zdyB%>!{u1&eR{1?i*rptAYzgw=2mO`) zW$mkI%!tQdO@WjA!SW1QJJT=5t3Trdn78a?H7$?(+g33+ycVt^hd-A{yEl6SSYelhj2HM_vKDJx!;$DC^Q9OrI%c^fL@jlRqKcK=-%11ZPX08(qnXUw{i3gZdd zdzRiX0>B;p|9SyX|CB>NBA<9VXMjadZyVJIdTY*JHHq_@^G~{ZFL(hKYV$AEFLsts zY*)G1hSD+QSg-4-zbJ z809a(G~V-PNHN!3t`;|W#4f2u;WGoAbXD}kG!ICEY{WBR|Ni}BgH}_l<2(%tTpRxA zIzBOR!O=FUc_BXfHH=%sPo6d=@UVv`cQ)RW(8oEuNCw!o~6Cr3~j> za$4FD;8szP2-GuL-&h}SjGH9P58D3S_fhr9GE^Bg1_%%?#G!e8?pYq-R7{dmB*Dda zg0mMVj+~Gkd6MDVib%*fmnU0mvUU;e3LsKEuYTDn@c4;C z%MjG(&BK(7ngT(b#;5B`U0SlNf)ZU{2 z6iV%BqcigyVE`N|_=UUrF%v;bqnyA^F_;FOnXD}>b?n$|CfD#|z=nZEn2xftGA`Em z4kj!=kP5y(!82-kRpgU7xWkcBRKqf5c`>t&Jl2mPnIx_@9vJ@JX5OKf~TS^=~(yjQEjsh&3Ww~%FJqpM%gLZ<*O9?Yw32r?e&{JcC%6D6gP zC$GQ8GKfZSXg;r>F!%eE%@Hq2i;GgZr^~he$42Db#>WBx-*(s8$?1Zor_7+ryp4Qa zd_pExn5|(VNFqaP`rzQeg2{TN(ipSB4scUOpW-x{uIDEWarj<>mQ_i_pswh5>LrqK zRktM7Vb z5Vbc{SMRO@%jK(=L1n@#?hB`Mpfdz90pXOLI>W8v0@q67yW^ z=RUGG9z%zoBdT=TZp`*g1%1ZG#!>-id;aB^nZNsI*Ey?3Lx=s~Q(3uvH#5bN^|^KC z=t=S*DNv72C-MmZtXGSzMG`hfS%bQ&vKpCd31*6=30uD}T^U=oC)YN{5&CB)$ zkLe=e?JoM{J$K+OlCwNIit~|`_ZrNS?gZE~v>4Gz6_~j%M@T29a?FV@U`t9$ zdK72@lLW0LP>O6ndN~8F#szNDf8&j(XO{Ls9_FMUTuD6ucVhZR2loKHwb_1>hF71N zn_)jt;c~HSM_CTtQ-C+DG8+BEsuN(IYIL`@rfowX5um9&?l>WlOvLQ^=H@rgy#1{E z@4(g9Lxop-(Z6znF4n)$fx7-anhx+OEGSUHU@+~%EAr?xo}`|aK)M$95RTj4;@2>q z0JJl!D>DfIql~r(gP;tXcgxQ2-@muW5w+K$UaxkBj0ztH7Q~M`L-#P#)6@AZR3yMu ztFMQ~s5VRzXspZ6U+SQY{%&-6vMmZ@v5t$9U*VLUo}|yu7eaI-EZ=AGll`z_`^9ie z8lhaXlS^^&u9aq9a%)M7AI-0oyD+I4^RP$t;{J;HdKfz#LO(h@j0LkLng@04ggb6# zr@y+=pCR6ikBu1u#u%q@0RYpL{zfbN(KwfHHs(Zu;K2FdtgjQVIc#SOw;H)IR{Dg5 zO}_PWZLLQ$=0p-cMD5jMQ&SaX*gcy1Fu>JXmNl3bD~q;B7qRW_W@2KRfgL}38N2L; zAONjuY}joq%soDWyW8En9P}yjpBchS`;8n%^j-7)au3$TIZ`wVO();~SaPQtj8bgY zS*pM=2-h)9OzWUWd}LWkQ}id-y<#0Npg*Nfo(F$fS5*g1HW~(x zD6$V_hrd0y`xWaWJ5RC*s@J58l0M-P^|A6DFp>IMcU=@1B;|aU0X{;b8Nk-h%7U#J zZwRpxXwgn@5zsLrY??49w@yw@)VN>syV5s7^$EXF1Bbt z=YnQSu6yX=^o-Rts1X<*9(FUiml%bZc8PreeaeU*PJ?n~ux?L)!zMJHB)VcT6D|nu zBn6yNs~2L7+c%37(}1G7vNBEuW*788N%WPrNQPKfdI#QKHfVNvt*uu?$Zbg`M#gs_ z@ti{F1sz|DF}C#`%F0-G#bUue6VCfPq((>!n6KHr#Hsu1jtC@ter9a!2m^uy6vY91 z!Y1xCRxCGEOJ@kNjYI0-@?eq29|*|*`0=Ay zBD@Yns2r|RdMq37!-rE-Q$ETRxOXU{RVr3}(%EdBFY; zakM!P2zn$*CHeW*k-L`*Pq>r5g2Zki))l}@7|IW8ptqK91NjsKY=IzXejIoUnz#gX zir=xK;GEZ>@)Zv1`tsBjZ_k?9dWDyduQhFX34H?HOX{)FQ&Rf+7`aW((p?JDm-M99 zEq|>Jap>Y?SNaUsH3T~WhaLO`TSY#60I4Kk;Z{q>7wV>GZ@>D{MuY*B?Xqr*irxw4 z=k39+e6%w-ilDj-B*WeV1RurKcDiTnf)$)uBNLMuGJt@L*`a=7K0}K;Oz1k7D{z+n zuvOTucu6Y0;904Os00GAelP3{^0H4(q#<7_`bcAfL<=Y?E8Db1@OPy*TVo7ZU0Ig{ zNfug#z~B!D=1NdawoYZsbB~`R0Ax$n*zP60#JDxt8DkTS%Um-i7!i6XCBK}ps~s03 z*xs1FECp2VUh;>Bhszk08;%g6eidmmF~t1P5%1cvsI?o|^g};o>%KQ_V i(oM1WzsPm*7DtY?#IuS~zXxo=1rVw_DwU5dL;nZuv4}qa literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.002.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.002.png new file mode 100644 index 0000000000000000000000000000000000000000..e30bc6db8ce788d5118fc1060b46612f7c996ee9 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0y~yV7dTg^Kq~NNwz=QuYeRwv6E*A2N2Y7q;vrJoCO|{ z#XvPjK$vl=HlH+5aE+&nV@SoEx7Rj?Iys8CUi^J5p8e^J8{Moo7$;h`PPoZ^?P0nc ztHT4A7g5#W1&4y;+qa*${1kVRgMp!7`Q)1~AHRP3Cvg@dLqcOC8$$ytn-l|sm_!Bx zLqx&?T!II$UELg1eanZL;ec}J%*DmNlisGExqQ0Rx_|BKn~4kzAH>h@tvdJD+H;lg oV;%;E{Q;i#yBQf6{!NvhaYey?W+nS#pt~77UHx3vIVCg!0NZO@fdBvi literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.003.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.003.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0258afd0d103b0a3e7a9c38a0dc114c8140936 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0y~yU}^`lSvc5$N1x91k}GC4B19^5a@ax&ATjjy1@A^eLo`x7Cq1w0=l zCK*2wW7fT+l=dW8pOK+q{UjCLQ9Z9s~p*vT`50|;t3QaXTq&H|6f zVg?4jBOuH;Rhv&5C^+5I#W5tK@$HR`y@wnG94_9pwOqo?B<>`wcYrsBSNc-->;nEJ zeI9e?t9l=w#K6dU!(-3%9=FMVDwG%)9w^$TUoW*(s{7W%$dFL|+2;PS!aw~Tvy_y) zG%IHbP0l+XkK-H2Fd literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.005.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.005.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5f5ee7dac991f4c5234bb75bf2ea5217898de5 GIT binary patch literal 294 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 DeUo2- literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.010.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.010.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6aca608048f367d9afdda9c6386eb7e4c9c88a GIT binary patch literal 510 zcmVT)X$5JQ5?td*PYuKQ4=vJ zEG9!@F^ZWY7BCwkFaJz7Bkq8g-oNAnvJ9kGcjdjp*tUo=Suo$L8yJ1~B zOobQWbr}B(T28+fR>N$18_{%|xstVmu%Z=28+%hlik$#1I&%4_*XPGZvX%Q07*qoM6N<$g5`bW AD*ylh literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.011.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.011.png new file mode 100644 index 0000000000000000000000000000000000000000..253e5857aa43953555d8fd657fb6e6e7e9f9d236 GIT binary patch literal 703 zcmV;w0zmzVP)r)K7?&RT#(d@9%lvduJxc zVa7p}a-pJ7xNsAR8&e1ogs6o^tJ(}01VxKbXmLrf0)<+*aS~iROJPEh{!IC2;i482 zMzj%zYcm7ZggV~$eSU2knLCZsZ6Q8z7U%Gs56^ix=fKklV}aF6?utpq@jZ+toy`S} z4Zu3XpU|0x#_cxzei#zu{{$y--(XR{NyfW~EtrO3PO#RZkogU3yba?kp|Nyw9S;pg z9>>Ke$iHURueGg_JJz;Q>)A*hu>2$8;~Rr7FT=X!t#~xKh}ZN-o&p_2daqIQ)oys8 zB^4O!Tj(pP_FCm>lwY?qjvPky@}B7m-ai#NGgWx(JT6viym3rX9h{1s{SLpiG+zMU z;Ia@GP|npEZ|_6ZY9PQ>JWxfRwY5dot9#JQqaHTlIq*x$IJXz-Ri%I85-gB$R${B^ zY+76ofC_dX<|}CTf&sKp{sGs35u@QQFbYON3&4Y3L4fk|vSgpMXX$@AhRFLLRey>mJ-NemV*rCWVTdzwp_#x1g2}_fi)%YOgjTcd8`TocKhnj#Gfx(i_3nE5>Vy@=y lFEb3!AA-~hf8i5}zX90%{k`xb)IDgEK^O<{|8tk5Noz`C z8w+9_v@dPJic=An78FFmAw#E92tlK`_)!HxghLcZCqJkbvPgxXh+rL5d>s@-p$Mjn z(jkNpnzYrlB=+8q$H7LLn3f9qpN_lZcicVP1N`Gqvq`0t$Y!%`TI+*Ch<(f)22cht z?Yizu!!VYWQtoCzN+y%-)oL{c;4%^UnRy<7CL#}jPG)wQ`9@1iOL}5rVi5qZ2hzyM zNKi_755OU2zAdGE1fZa`UXfCIrIcN+>mCI#2H>4#StlnaC+F6pzrjQz5wval7BdgJ zuA49n_^6D!TyebsXnGI-PD>y~a#UO=)Jn4`8Ry=i5;S3L$y{ED0g< zo528ph&U7qeE_fpK&TERqE-O5lybwXHl|Q0*vxD@j^nQbZQGs$;J0nN^)EaM1Og!< zl2Xd0I#6pp&CEU_M6Xh+>F;TbQi>eMIRc<)+jglA1n`}Ro&q?V&1Ty+17M1c?*Q0tS=P1T;o-nW*wE0B$M5$i0qk)c=el7S%e6IG8-&B*QZN{-3L#EQ zDO>yd`@eK_bX4N;I84)oQc6T35iu|@(AD1Fex8WV0l3oL-Th>3qoBrF7M49=5l=5LJmHM&P_@e;KOrxWtyNT!`5$(sX4&x)D6#$FO z{7GwlwXd)5YqJ)%UPURHOnS=Ya>VQPZe0bn>$=~x)^q7}+CoFy`fvFOft4(*+kAc0 P00000NkvXXu0mjf@(o%4 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.013.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.013.png new file mode 100644 index 0000000000000000000000000000000000000000..1508d45ac905b0d5074b1901d40fe6d7b43f0c2d GIT binary patch literal 513 zcmV+c0{;DpP)T)H`cbVGzdg-|og;jEXGY z3JV(>iA@ASD+N2Tw$T(KqF7kzXApvgAc&22R(=2rv5$qIh>%8DqcL6xBq_WU=CL?$ zB-u+mLIzGVXWst|GtUfLY>i>gRQ@J9IEXG*Fo$1QZID_S!nQCGrb91$3-jS?cpvVD zV_~cgtQn>X=xw+bP8Pt4a5>C`kKtBmZw70JD`7d@3F9R}W8K#bJHzd;5U!_c&0x>M zWXU`oc4S0o`qfgKlhcUpRWTeZ<^sk_z))6 z{A;C7;wNV7z@Wh@o?L^p@;c_Y~fs)^u_!GS|)s^#9tj6UpC-T+1Im0yp6t?M)98t z@51A<`-4&|!QF5_db)VXU^Q5?nb@A|iiLW+Q3VGs;%xZsim zjpN*7Gm)9WNmA(P9{0Tu_uR|x!9R}bEg0(tL^H$-P&2p%5|D&EWv~OsE?6ko>PQE$ zwgB@%Uz5^6q`3PX`X0l_4wNPYja7h6h%3k&v3e~YN_}#XYxuz4;Wo$T=%ldU#Ngr|>_@p< zf)%ok?qk-+zmDE`m0nnyB6Wgx*?bPEVEAO1hutQz*rt#?cB-AGmvw&*m1sXqAECG* zXx!mQTjZFB7)~h-Ks+)$YlqRvC#ojps#!N~FwW|o>wnE}eE$TVqExm600000NkvXX Hu0mjfwB#bG literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.015.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.015.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2279dc608269c7ec91662c033de97842f3d64a GIT binary patch literal 763 zcmVJNR5*>T)K6$!RT#$M-+RtXCTY<+ zQv4Hysu{+`g^C4Th;GDQXnZ1O)>v zB_bIEf*N!YqLgdA%)RGxVG}yz=rqu8`&}M*&pq#f`#c)APt()^BuQc+1Ox1-pwcw0 zPfSd-Bt7T7KW%1BGuxANtE#G-^?JS6?RJY%_%Nusxw(hU?2@F{&1_22H)ggg=_K$x z&^NO$%CdZKZEbCL7}XFqZDv;`Jso4bQWV9NBuV}}_+VpWW3t(7o&zobd(OFY-EQ}X zyU{~%c6Rn;yGDNR#9IXT&u^f6FYRrSW|>gw$S)B%JLT&-4n z&CFhiF?L$5){RjZK$d0I^78Wc&bjlzQ?^7-?k8d9std(WoCak=l1Re zyEE4B_ivfmF-Z>$fZqG#lB%*S%OijQm82rZcx(Wys_GZuIPl;RFilNOJqCE-Fqs1= zisD-!I_J)W5XRLJfHX~=nY}6LSMU9A10b+(W=p`ut*xySjPE#&M&l9Str+7*p65Rg zfLWGBNy}yyYqi=(^Yin~|3TI1bWS+u-j?)ujPZl@_4U6Fmv=?*jYi`YN!Ng{s;aus zZnu8~SXfxF#l=Md^m@H%@BN3si!sLYD=RCXF{*m-Ph+;Xw_lcY+00H!x(<8^>;ew~ zF9E5U{SLf8Gc)t)a0&huD}>;Bz23BQ?o~-=foFjxaNEponAs;W#?RaB_D`c4^`D0y tLU4fF+}u3)aU@9+LkJaP9@+ake*^BJCNr^{`ndoA002ovPDHLkV1mw~X%+wg literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.016.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.016.png new file mode 100644 index 0000000000000000000000000000000000000000..aef3d715931a604816307af182632b62e64779c2 GIT binary patch literal 496 zcmVz)Vpd_Q544U-^tY>QM`bc zLI_q`=o@IjMijJ=fC#Cqd;)75N$opW3R;MuND9GPu(DB*#0y4AP>dq#XK~hG9A}cT z5ZrJ$oW1t?uWzr*;eTIEzs)d$X&l5ZOyDclu#684KZc4BM#JgwAS{LT@U7l2!(upF zLAQi;!j8%fxE5ZAOJQdiNu?z;^*tTt>)b+LrFD2V zyeWm_L!@QCl%D?sT35PR*O}ZhH?7ZfxD_6T-Mz*G;axbB0hR9q90}*bt8lEl-<5h4 zpRhCx>=)A__Sm4X3*3t@SRaT)H`TYK@`UE|CxKUyV+=- zAc7Hsl?G8z5fs!!0yZ`l#v&T5Vx^U+AZRKPNo*_?!P2dK1VIdBAC_qX3Z@EZkQmu0 znwQyo=d+36Zg#^KInBT@{NT)-`CyC7s%;J<*A3xL*ef_<&Uaw$dl)m7fDdC34`aR# zQ1%wmO>okiZUOr+ejxq;NsM-h8I!-)Lh$Y&EQ6^AD4T?E$@vk(4GRCtyn9-L*+y6u zq)J3PoO73i^*iiErZ{GQ09$o&35}RFo1_gyc=W@=^<$`EX$d$D`fx^Ie30j$xUFgT+%|L)j zlwLNT33ZmVc(#w`BEY)5+6g*pil3Z^s;^gBW3VbkkImQ zJLsyH8wN|kX`m=rC<6nsMNH$~bTtbb=c-EeL6b~ZB&I!lDFb`xiRIlRj01u5H!^k1 zVGR8k$GqYPIrz2V&?IWey7*4c`MIo%uZ^P)Ay@HJ+yrVZprM@k`2xE8|4>6kI7~2; zGS@Za&~0R&Ogsn16HttytrWzk@NU515VFw~cz6a|stE!Jx%Y4!iIPI4kcNc_zUE-LRvvD7{RN(e2aaJ4ZFK+u002ov JPDHLkV1nPYCGG$K literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.018.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.018.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c9f9bd16c3e534057d761be700d02f225ba4fd GIT binary patch literal 776 zcmV+j1NZ!iP)b)XPg$Q5*;G@AsU0$2&RF z!=6$xkSSzRSm0mKE(nS&B48z?bQX7WhobUT{>2$hitrY;W zA<$aujg5`fd!Cmec~(SrlPrix70E9Eo&gw|nwol-&1R#@{E{~Lt~6irBZca z7#<*b5Wsd3SyW2BS4w?IBod!{dwZiwY@?yIR;@Mof6osKr!DUQr><830000!XCTE=?Bp530R%N1DIGvQXMsm# zF#`kN5fEmas?8@2)V09V#WAE}&f8n|-7%>m$3NcRX>2GcXqcoZHe07-!FtCHQ*zfN z>2~BF%8I_Klf7RW>z9dTgs99Bge(ugWpH3T3 zW?(qLGF4^nmB4qp`TM6{J)E1*!f?RvR{g&~`(JtWH4_&5PFnL{M*iB{z4>;3Ul!Wc zSU&!~>S@VrZzhHf$-Bb$%kD3GymWW}`>*^zcTI{@KN%=@?d_><&p1#0#gjuW-M%Zv z&@eYp^5wd#LFec8UK2n6YWl_6IbV*ywmv@p|DOk;3pp7MY`t^O`k&6!@8+`&&!s(I zXu0e9$~#hbzg}%FKc2{U{QiDmK&{&q&%W9(Z*5iNxwO;vwTwWK^?I_&T)qqpYJ$Mv z^iecnWSHTU!Ng$DdVz%@feU1=h?6iwgJz2w14A$eP~kEG(iJ|kFD++Vq7_wTf@ z)0N&`UJMNX)JvcGQQdI}?{lbh6Wo2Zz;kfv7+SRK!e|_>*^|vZDzgr#o?~^A3Lq(fcx%%?ORWWBKl>~kN z&VTR3vbggnUIr!G{5EA^D7ZQ~bZuVA^^-4u{M#$P|A(n(yxq1h&wYSio4mYGQyUog b&-rJ}=-7AW<gTe~DWM4f3y3yR literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.020.jpeg b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.020.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0d26a5c2438b8e099ec4f162b22d6460f3c13af7 GIT binary patch literal 76401 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

v3+DW6^sVer@$jjvPw|`jWqouw`c=T0$(V<9 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%0DHgn_4V0)UK29BlN2>uP^Y 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 He^34k5cs9b literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.021.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.021.png new file mode 100644 index 0000000000000000000000000000000000000000..969270d87496b53e3e1817d2d5e15dba293c7730 GIT binary patch literal 776 zcmV+j1NZ!iP)TlTT=rR}{t1dEb1KNkRfc z{y@eC5(YDibm3BPVL%s2M5KhT8(jo#q10VBQf=!4an(&1hCmiWN+FvMS3z6^VO+Sf z5ScQwnf#e34cI`ZXlWz<}a7 z_5gGwptaW2>-9nB+zDgM8A+ogjil!!OC*2X+S=MGl}hg5+n^n6eSQ670P_Go1KNEeFMsau(h?dPe|SZ@KDnA-QC^I@$vEf5jQqAvXZ_e zc@e-;CX@MkVPWBqw}94Kv$?tXk@tQMz_(!-E)&jX1%PU`n)LPct@ZZyc96Ur1i?zVT>b?B%s)-W zm=7ftoO568IeV}60{KqTOOn&pTJ8g_wT9$rl24p-wKik6RX(5pQ_@|MliSd@0Px;Bv}9pgYELB$wf({ zNs=sEYhODAfM&D#Gs!tg=bdviQ52=$W%h>xFJkXf#?CiWI z>8hk3QmNGKk&%%Xtv!`Wr6ZHcTq1cLz^ZfZ%F@!(Z*749Ff}#R(cjdiT6GaV4CCyl9rPsxz-A63j~0PiHX$k@bGbxXC+Mn$dfbxo=aNs-roCrtu>`m$&8JSvC(KSo6Rbh%O!gO9O(f5vt9wzo-S3AzIwF)0000*)J<!NvtlF&m%U1&ZaTn6(}3ZL7adJV6Eg6 zhALS{?!e6s6n_C){jhLczGSEkR$DhbI9aIdr`(2$*@4s8`(?EbKz9pDe*&N5@}a__ zro?LA1Wz^P&C^fP4OQhKo{_`))a-3UuK_}~=mV_6-i3VOEj%lQ6{?V%;PY4HQgAj|Lkj?lD#K>G|>zVAw?_#X`P>bCX?HhNef&gDBe`R!C^5Gn;%YK7W>4vH( zp9T$=6FReLDIU#*NvRx@uLBEY9UOrtJ7GM#1dMeR!cwS-As&TrK;qDrlv|n(W*hFo za?9r}8icP+#Bg~O9NXPVsGZj(m P00000NkvXXu0mjf+Bqoi literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.023.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.023.png new file mode 100644 index 0000000000000000000000000000000000000000..839091ff040b171d6a61bcfa2ba7f44ba504892a GIT binary patch literal 1325 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFH*>H7NnNkqtw4&U*vT`50|;t3QaXTq&H|6f zVg?4jBOuH;Rhv&5sOG$A0?wwj&WjtRm|LM_vHV+*b80O5M?Ws5U&dJpKUe}(qU)VEMCx6eM zd-JC~c^kWSx9aJCCCN+-1$Ea#uDgDHc0T|A=k?`UFLNjDnKpasuW$U>pXy3W!+%{_ z3{+#Mwe@|-*RsDBC+Di%l*=nye?R2v-;#fuQvR;Viu5}Do-f~hZOQl7?^dbG-@Yg^lYzlT z_V|T2>y}P_J8NAq9}B~QpDSOft~|SGZExr@>1kRa>k)Wq0>}_|>XYjSLJH z_P@{7dDh4Ow%hik(0#M@>~&SkcE2rRV)(E*Bz5vBh2^r_&m$yQT@`Lx@{Mg|0>t7cYHr)h<*WB)uW5N&t-QUz`g!Z$Z@==_=T5)-?q3`*xIY|u7rW;6>%G@D?|%NT n_Hq35`+wi7GcY_5|D}J~@Z85A^MA$z%R2^7S3j3^P6t#wsjy?Q-CXe@mgTRSpyF!;7jBQu&HK<{2 zdK7%8MZa;i%aw@Xlr-C&K{_S`Z!18DU?ePUb~#omZ>~^!EI%*=tj_zgq?L z(7#2yr-f`Yzw2ko$ne8|+N-6L-%h%cSazm$8?y>|tsyZ_53Z@niIoA+&V?xdLKh4Ejy-%l=`{6&85ElyvcxuJKz n?}zw+(P{HG~fZt!s!q_C(I@K2j4 z`%8>tLJh0RKK>vkl^`JzxnZ~A_pU*a#9?!KmS^?0l}LqqV!l)G!QukN*~-agr1>*TX%Me$2t zpI-H6=jHm+7!neIYRG?$))Z{+6Cye}4b>FWcj5e(eIOu)g{C z!N>fduZQEZZ=N?hfB%B#uByL(m%o2+cgp=Ww?6|zL;gq4x_xCutM#V;FEwUh*u%4s zli>iz;3Z^VMyI!5SaT}%()^{L-%Nea!f?Rz^*LAd`Dw%FcpUnpPb4Rk1FhheNwTan>1HZdYTJHVo^y9V6 z3kF!J@X*U}&tMpN5y)HBce()M$F3nTAltKMD}75~$Zfnm;;t<}C+(YwE1m}H)B zGJVP9DC^QGZy6XYBEOb~U0e5FHtG{7iK^TTiOOJN_)x#{mFmf~n_s$t35}uL6DVZh zG#H5wm#(RJs$VzXeD>dhNvmJg+`AjU_tRORw=%DmMuyJ69(4Qf8-ZDKZC;(KT>efz z-4>X=LqqM~eW}zh-8TPc2_M4&*_F}h)C+j533m2#VCk^w$vt-af2W`Ab+>=3{1%ui zI)8rOze#0o%=N@FjCp9S$- zRZcnAKWWLTxEdw~hMLv;-i3UPYM-C>E_>6zAJ=yKuap1!^WDv7tKQr0w!72@jPM0Z zueIN_x$#DC-T!~*F8AwCntj1%QpqD*H3kO#!~bg-7-oExw>ffh^Of!0n?MDkr>mdK II;Vst0H8V^Jpcdz literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.026.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.026.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec8d0b1ec986ada8b80cfe1d4f6f46f53a3bf66 GIT binary patch literal 755 zcmeAS@N?(olHy`uVBq!ia0y~yV44MF+jFo1Ne8ElZXm@{?Bp530R%N1DIGvQXMsm# zF#`kN5fEmas?8@2)HT)9#WAE}&fD7?^JG#*+8(}NbA97MCnpb=3krHiMH)oBj))cr zYwD`xDb>0>%r`iQt_I?CfI5b`Cf+WblHobf(YHJd1+<;Za&h!pQOgf(7-rV zW$u;j@9lpq==*f9d-`el*^gI0-z~?+aNu9X=cm8ku3pp6|8DQc)5rJE`#*EZ_3QoT zvMhf+OjM0u#~)t1L*}dBbS8!k;Z=8UA1?X&ZT)$xpX(;Anf%1Y{<^hyTuSJ4&pQ8C znVa5}=`t`>FSdGLR`luB&0o*l!*jJPZ-O;2_r*=uDJZa9~LK{M?QV< zEa&elc`MIQ{rk^LerlvU2{SZYFPg}H_xk+*ccR{Aa5FIcF9rz;(uDZWan`FU+?j#l zM*QioOT)uUZ%-~?82MG_rTXeCPwV&bFf{B9Te;lR{$+D&adDaWth?%SckN%&U%rVC zC=>c}`=nj>L%-*p+q0OH;Q+_NK}+mkGI{mx-M25SdFNX?Z+X@3?nnlPH|tezs+7(= zmFvB3(v$8v`m?Wo%9vfVDfar&$a7WY#*7R%%(tGp{_@wC1$_0ZT)deW44&unuFQ8X TZ~UYROtlQ2u6{1-oD!MO!XNS%h37KTKol#U4z zjfsLO6}&nPtO8C+nMy$%o-#8V=F}Yft9R08dv6No>6j?pxx#y^LbdLGxV+knfg!;` z)l9eck2oU9@rbLHFL0gdTZ(h7KVftS`bGR zO|D>nW3 z*J-cT?R$5wx#a%&Fm(w*hKA2q=0174DsH>=RF%0`^!fKyRBSEU{%!C5thMI*n1Mb> z{JQPxy4Sy|{{K#|xBIQ_xxXss<#QhfhI=P{V@?6R`0NjF+?A}5hs{jD1jfMN>FVdQ I&MBb@03vk{o&W#< literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.028.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.028.png new file mode 100644 index 0000000000000000000000000000000000000000..db45bdf2bf7462e762a0e9d123f1681f84760e27 GIT binary patch literal 715 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFn{coJNv+ly9zcqv*vT`50|;t3QaXTq&H|6f zVg?4jBOuH;Rhv&5s4Lgg#WAE}&f8nM{V}By#~%K+oa-?8tQ5=Eqj|j3#F;gi<})-t zux^OEo6pD=*m;ki;i_y+s_-PW*=l=A&NXLP?G8AoG|z9@PQBuyf6qIj{~4tVF)&C3 zcoxn3{Pghd{WW__YOkGq8uT;S_KOh%L!bNeC9CemUEB5l`UI8{!B=jtui~if4*An&8hFJ&mLYHmC3|Vpgi@L+SKpm z-evmdzb(8O>mBO1`JJ3yZOyO8X8bK`3=HO>iEVQ5eepZ>D$()M5Lr>lqW&j_2lXaU*8`N|mdz>6IaWABizA{JZSB>)+h|-xp#gMbA|^UG(i-^?AF!EA)Sv zzGr555b^fc-4ONj>ywJ*XT@5223`HB7kWRfyrUK9;H6bt<;*=do!$E{~dBXyW_+RTk113BM22WQ%mvv4FO#o}}7p?#R literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.029.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.029.png new file mode 100644 index 0000000000000000000000000000000000000000..2a340b9df69e6ca0e8bf8ccf33d4fb3ef0a5ef76 GIT binary patch literal 1061 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFCvdO<$-T2Ktprjm#ZI0f96(URk=j{)9hc3d)x5aJ|5>Xi@1N zrjw;_TyJ!(O;C=|j?(bR65RbIs?F8xT(!=mxo>7QXg^7jtep4i`@ETr!F3h&K1@JU zUwtW&~W(T-hDAAy?5WL`S$N`e%-<*9w`(vk{8_!~&85)U zsei3b=6i0k{k!41%=JtByFdR7`dhqwiW&oh_~oyetMb>>>;7)L)1IbPue#N<%wF&N z|39DF@5Je+dICLvZtd&uc0RA3O}h90d3yCX?zu}={{l+(7pa&qGVGX;|2eSyRZQ%! znbbjY8V(AxK}S( zeJMTt_GRaAGtYHp(_fb`F#MZ+YTNGhX`A0f2Zb;(e3)}(r}{!ph65b5AUcc}?zEE& ziNB=Bz#y~Yt0e2rKc9Cjd(HZmnc=|yBcFPjN=o@?WHs179dBPQ)H?22w|~;F&qCiB z86GgKjpYyed;F56<=nUTGs>P{Rk<#=EPmgVx4;mLxw<~QXl>c)sh2PAT>aVa)zN%b zh64+$MW#+Iy$kp9` zYqv&UzkJio^WBrxUw8j{(7n~nKKI(wgR|^zF4+P~;+N)L-*s)eT-x8SE3JVkqGH}Z Zww*4E9!WbXZU^Rb22WQ%mvv4FO#oMNwZ#Ac literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.030.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.030.png new file mode 100644 index 0000000000000000000000000000000000000000..66e7e14f0a8fe04230ad6a8fafe70f648d303d17 GIT binary patch literal 696 zcmV;p0!RIcP)b)J;fKQ53-O|GD!aWQ|cTqhCq(O%e-z-+ch{jRv zLd1`7pTNQ$PV8DK4tkgt9s^r}>qH~NjNm}uuaA;&fEseyYruI_?vby%MM83af)5w# z2>S*Q;y9e+ROCHUqE~~{K?2b;ptn(y6kZIFNH_py^>(#pAHq>oua?CC63sa>bt%y2 z7%mZN-|VGaFoi+s0w!syA1#Y{(aj2$UeKKsa?M_~F1Q1O%5j7tw`UcEh~kWYM$9|V z!>FzS=MY3U;W+ao(TYHT^l1g=5nm&zwKsHsX)%6N;%Mnm3}RPXLn5iJe^3~GpAwg=?`LL(w?P&)@wjS@%L z4NRdV>4=Q4#fpP2>Z3ZloxIZu<`Bk2vGxZrixyrJsG4T7_FJ*NSpJE4OE&#dh_xwc ewA^z2FYy!7*XR0lm0NQF0000jl)r0JQ545N=f1pTXf>8r zOQ1tRBsADTEI3(pvb2f{)*?6w&i*J=5wx#J7ykgk(MeK8XzMQoiHo3xP(+(Whf)QR zR7}#eNt3*H9AZpp^JCKQb~)#K?)h~u{C7EyLDk@>K~-A0*LP4gyvlZw$%V1)1BmIu z^E{0C0^Smv#m^+}ZQwXwYhX-$q%!9by$b9DT>PDP25@!Plt% zLOFz^rV8vhD2Vjo5@!-^3aV8CMTi4oBIWj(Y8BX6rbVgsWb&Z?zo*JoC`nX%m};=> z^)v~fJt)b_YW)F5T#&a2BbC%!ONA$^-Jk=AE+DnQQ9N*?z#xItV5PxLHIuOM`6p2M zj>t!l8lZ?$SbvAGfXZF=XZALQIx!#q&~cP8ga_n%M@O| zCy`JlC(DzcLO6n-ROS-mT}Ne(VsM;ulG_ffKb&Jz=+m`M3hrTyTtGOAASedqC+IwCMd{eF$T7)p4R1VARpAX5%ga7? qws#blTS!gQ5eO4=gl}YHaI5z zBW)v*r9{-O2-Jjdp_@Y2uG+T45ccXht|<2&!23;$TkZ<&Z8s___KpPPAQwAJ`X_BTM$Zy{C|st9^@ zm{o%v1(rb*7z5zmkQ$nzx!Kt4#mZfv!R>7zUe~J;YUcd$XZw} zeoM2qMZ!$HoC)LaX#uYlPuFNH>Oyh=-o}uNoIz>;#qz=cB%|@jGU1=k5U+7|o!+Gb z8G8-bjfb<#n0+KP+m#oVtxJcNA=L_2fznmEz;Zm~>VY2KA4}~B%WS&3KZ)rBzRnXf zZxc9yK&4>gw2`-C+myiY^a)uhm23aQ%d(9?VArh8Tb5J3Ok~4s5_2cH`KQ;jMU@ES z1kO#8SWC7Zx!WNPVqBq`(5^T0zEvTs0KFrYU7MyRhwncJm9x0eLfm%F-b;jlZedE0 z{*lOyEE#^u7@`N`2BD=|V#C3_o5g1%xcRG~bI7|#;_zI?&i!8TuTcv05U4}yK+z6H zS=#X1fW9AP_^a)Ri^Wwa=s z4f_pnT_aY&^!MYWQWpq#HR~N+0VVM?h=LOJBt7S literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.033.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.033.png new file mode 100644 index 0000000000000000000000000000000000000000..1d96218d660575f3a30098c2278765cddbb05ae0 GIT binary patch literal 1420 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 UQrV;kkN^Mx07*qoM6N<$g8TkwS^xk5 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.035.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.035.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1917277bc44fb96797ed57b90b1d1a5bb422ce GIT binary patch literal 1295 zcmV+q1@QWbP)Km2GI1Wf;eQ*Zn-(IosUU z)U87CEr+#Utd1gK)|r$LWE3<5i=whDghIiRC_I8x1by%&g^~t>glAwuABxI$N)4%& zl|mV611p&?&9}{+o#(m#eQ-O?Ip_S=hyHMXx$fur-@p61?)$poKP($EDlEM!9VBk< zsC8C$gJRWr=|o8H-tOAEOL5s)G;PJ@|2lD4eSFQKb z3g=i-J688+GJQUM`X0i-^cGlqQarH(4refLm-yz0Me_{fhSyM z=%)%lbxp1@m*?VL7L{wvMTyex4-sv6E#29WsvJ1q1x;q$V&avV&~d2)f4+34?a*$r z6<`mxQkW@ZMYxh_r|L}1^`3QorM&D-ynWC9E_vHzX7!=d#Qt~|1(+U294Ldm1JBT< zl)-#2{3vlSbS00r^l>?WFl0K=9fa|r%NZ37GkEJgy&bs9ylVR6wNMF+H?y`GSocW% z0yrUPH|eHYC@I2u$5_mIq9`1;H4N6M(%ZU#o>>3FL08fs0UWy$uQbS+9rci`JpccB zIFmmLN(NZjl^FJv9ZCS@&V?uYVjySr|*e=eO# z4-43oC5ZCzJj7h@wPDUf-*yh1cQIQ9?Sbiy&!GHrfZOS+!+0H$OTx|zo3NptvDLdU zwt&4-cH_xM(%FVl3~H`qaPvP-m7jID&PVPYj4f5vZ_OAN^s(7+*2|Uw^<_@Y-@t?{ z3I;+7Sr!F5(XQZpsrQ+6nk zFT}H5?4B`n55|^)cdvf2pzYL9*=R*!0JAZgg}R)nIr1)h42}TQ!er-o3~3?I70VVi z!Vg2ft^I1qHk3{b5)a7RGDA}^t45raQ4Mq=9mLy)O1tiZmIW>GaOD!R-7qn7ewAdi zF|LvDW`sbD_{+>bk36f>&@s4S4|x_c8QgdEH&;hx;RJ_`@decoy1#=s?iBXttfoCD z2A6U;z})%1H9ml=4QhbM6P7mJ7G;KBd^002ovPDHLk FV1mcfZq@(* literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.036.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.036.png new file mode 100644 index 0000000000000000000000000000000000000000..91fe9cfce8537baec938c3e1a6f505262d171187 GIT binary patch literal 759 zcmV*lut-hQ5eO~ci$T=-$Dzd zn2Dm$f$1%zprB|IEo(80c?N|txiD$%GVr-=V+2vmrWpLQconz`j9^wRib#kCbR@;X zY%%4Z{QvGfZG19LsReC1yUV%!?z!Lnz6<tFAT%yLqkJl0NfGi`@Wi(n7E{r zx<}FmaEIhu+qM@0SjLzGB+~#oMC8rN%1T!d1fMFQQVAOy8#^D1#hwBvgkji~OeW`j z-)GgKGBq`IR%@LDFdK&9waTPcv@wxLBy8J$M6xI%H~ahhzZVLHZ7={R6bekI(=!VT z3$FllT9$P@nM{rpi$x6pDoUr6x(MJH$?kkU|E;<+0&7BTsFf zszf9MV7RHN>Emv&NI?+jwY9YzfEtpgqVg#KXl!g$Bu|rkxfiHXuInxXcnzS%^E|Z$ z1OO3fAX)C|>De<~mC67bqJ^q37DyiK?d{#M*>_L_$;E9z*L4kmQOmL}{8hAaIR@Yy z$g?={xvuLPV;+jg z`s(WHjlsdets4F^%afCnSBx?D0n7q;Y>XLRUtj+Mz;Ybtq%r0?fU5we0d(Z^`4WCN z%atkG+S*(Ix0O<7NFD~DN!E(UGRe;*pOEYu7#LW@Zof?=lG57Ry3cW(BUbluwA2WfaDL=l$;dw{a%5 z2(090gf|T3G8jZLqT?SzUBo9Cx^UA%1Zh(Qm9Mzaje;&*2;st3ek6jR6hRXjQE{so z#=B6)P10bI;>2ni{z$QRxOYF+Hzf-)9PkYURGM zVLv=Om%ueC6IQE+PtEwkWS1apb!ly5WzoW+%Ji+FV74j1PSDcG+1ZYjcLq_js74W= zDYQ>V?R$`Y7Nn1R_3Ei4PQpA}hG4_#H@c&q=!9fLvt;jn``*a!^}dF}>GqE0$bBfY zA`Y&1|Hnre0Wdz>sIbNncc+MoB02@96-LmVo3Rb zM*aRrlhv_hqLcxnhVpSCHh|oH8`h0+_i@P@W2hpdvtB!Z{(P4ZH!QO}2U;I{D_kjH z5-*$h^YwCaf6KS8=R+|4Ajjsq^v4l58LfEE%vOh>pS_=RHc6ZWg3cPOos6!&<9+kN zx5D75WgQkeKM_obP=>j8XecAPjP#=m?&vQo2bS?ar16gefPhuQnU$$Lwl{i7kf z(IsqsQhYJzbPmXZ!agctWMSuP)p|Zx3b9qYuJ_NTVJp~S&{qq>^1aFSB-9l)=Ot|O zxniCy90waf{3g@aavHZ_-I7)rZk?f5gdMZA?dZjwKTS3T`+y%|aT2>JH@?GQ7qArQ z0W!f9V$3W%vSw^##CyX0@rQ2Idt9kl?5tE+>>S-9%i2QQ)Xm%BpV9}V*;aqyQ^CJy W?K9d8Sohih0000b)In$zR~*Oj@BhsVyJHu_ zrZvK{NHhf7E+tS9^db?oJ@sJ9U~&n$7^U@6O7WPNV_RCmoDyRiC?SERrQo3lFYzYY z6p92CcS!_MB%!uRnzfnP|LdVnTo*UCpg$Ox_vZ28|K7a!;1x$&^+!=;GMP+=h#Ud- z8Dln8wGxKm^+KWW#9FKW2^=0C4%XM#-|>C_QxQ1{Yyg{p2kdsv#UgUS_xA>yBTB}`MU3Zcs84{74s(v*zG?YmllTOw1ybnZVkE))ZnVDH{UYn*WHA#}Y&be=a z6I)wbZ$AeDMnpb#&i&Bc-Th!EEKRvwu7_bb1E}x&@2AUW02UV)4NwBEy$othp-_0@ zoV($idpC+A(^w%uUPK;`jEuary2gmepCZzhwj06UfsWD9(N>$iRo(*rD3waj{_@Jo ziUPl=>e2rrEi5c#fy1i$tF`tSI6psM7m=TgF;S&bIY8?pxt-qLUO%7Dp9MC9Aoz`@ zedy}-`c>!LJ!8zpfq{WHcS5bTrdTYNfOEi=TrO8lzj^6PUtizm+S=M}=iC`%%>JI9 zo?Gqh?HkL>%kC*I)>_lq*_l~gT|Fcsmw|_>dU|qlvX(l{RmkArU@vgVIrlg4qljFo z)oK;b^WF%8;630J@F8$Bj^j_}=H~A6qO;tH_V@P}gCIB$921efz%C%+-<#(i@O@ib z+vTybu`PDGZ5sQdC<=19++J1fsMqVej4=uDR~*L=k|cRtE|;|#doB3~N(mFZ7U|){ P00000NkvXXu0mjfbPjyH literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.039.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.039.png new file mode 100644 index 0000000000000000000000000000000000000000..46d43dfd941fdb04f93bf05a8049d95805a4a105 GIT binary patch literal 805 zcmV+=1KRwFP)b)X!^FR~W|e@B5ycnK3rh z7*a8&U{ftR14_+5Fjgq22!g#stF00Q7m5pQQFl$iU1%3BTClsiDKogRE(8rY3pL#g zw3b38G1#W4A)`*l>LfFB&+8(NCaIZ5XrJYI51)I_bAP~p99e8V%!WF>Y%E@@Mky2R z5b@JmtN#A9^Q~e&osSS~NnrYFI#~XwyxvE40QeLU2h4yuGg<|?5t%>3w7+qA|IH^& z!Tx^qr%hXSi)YZFhS;DQzeM;7ssVNDR@Kjd56tXB-Sms0OrZ=f@Ad_lzM2l=#nMg{ z{ocf~k4sOFUmw5qgfHhGEj^HS@zm5_Q8_JU7fL>HVmLEg`3Jb;ht2OV9cSWjU#bW?JByA#eD47T}q&*U<>2tWb)4fRg;fW#kHqtBaR0J%&qa`(ztFuNp1 zUnxGisxec5yMImEgHez zVBIaCh?8~LY<&vQqV*1p87Ee0iY!Pf%$Xn)7@Z8v0j(yFz+&EO;&s5^a-o>90@HHi zWD3ycmQ8?^5KA?#^sh1Gfg9~cY>gNrjox*3+FkX=k0SJ?lgZYlc)e$PgSh9Qz+H8< zJB@V($b~tN$~nxsV|}=WbEzEt}RaFI}`b{C83A&pA@PL%x;<2SC~!4$}VwOy`3_V zpUwQY#fR=nPkYbIWap#=lMglq;`&7NV}qM@FNcOQg>hc>Ex$x@f498bl(B15Q543%bCaieP135Z zb`k;+GQ2@t6hyjI9g4U;q|~+wC7VtTF2Zdsxai;_HYi1x3=a_;oLmI|1BpUvZL83s z6{AD?Qr~^|b7-HYZ7LP?n=Y4+ALks-cYuE^>GY|!R&#T6xl}4OXstaXB8LGqMWkko zc^O5~QV<03UV!5Je%5u}izIJ~$U%}T09qoF25^964}jTJDm7Cm6h3LKZ95>{4l9?- z=`alMk-S8*A|h2|%;$VQzt(6poUX2}J`p)-t(}VF`0V`r{8a!o0Nhcb@B6Onx>Eoy z1GpB3;qxE}Y`YnNki^*7SV2UdlFS%mE>x@4mBgnKV>X*T4&Vv^9fskH%^9`B0DvOG zVzIbHvJ4>aIL@^1`%Yp|o7Jf}jwb-T3&ZeH5ClIu4Lp(7+O}G)x`@mI7<65?umuRf z1uz6)#`C=GRdrMl1U8DI#{l|B9@_#`O7)9~17JaGy(b_58eSt((DEVHqMv=(38z(d*e9X q4bls#xuQ547j|ND~EG>WOk zv?@YFrt&te2r5_+RB$K?0oy7*sC3fBMaAVVLKo4o6m%$l1RjdGD$=#$;!w0f{0P=B z)IqU%FYn!ZT#}NesUM*K@!WHM_ndRjxxhab+ZnaiYJPrxLo%5>EF!x|ZWWQw0OqZ= z_ZJoxp3Th67y$A+AV)_>*Ci5(VKvH-eC-X(cCpU=P2TH9toq8U~! z7S}kAGbthm0bDi4+yU^mR;&H!>gwu$)pmuAO|}H*p-_5RvsH3(J6+OeQBH3P7daw?9%8Mc)9t29VcUt0iEq zR?Co#jWO|`!T`W^T_G8Z$kMc^`b{4Iq)2A}1~@xAn-q~A5&6`ptkJ`-0G=tO_G_)% zZcnR3gt=U9Cx8se7ib?a( zNAgV^$5Wo?_52DtI5?QdX0staLf1o>M}r^is*S>hcRXxz!8$Y06GDL0KNfu9ERcL{{H?IKh0`D0HD^Il}aVE vxVYGzOeWLDm@tZ>?*P8~zTa-o|BrqGm?<%C?l2sj00000NkvXXu0mjf{|r!{ literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.042.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.042.png new file mode 100644 index 0000000000000000000000000000000000000000..0cf8cf96f1d8647ed8097972ef3f187f9f643567 GIT binary patch literal 721 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 ZM$L2Wb(TtDAAkv!!PC{xWt~$(697b(AS3_) literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.046.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.046.png new file mode 100644 index 0000000000000000000000000000000000000000..de745c22719084df311e34542f256ba996f987ec GIT binary patch literal 696 zcmV;p0!RIcP)T)H_I(VI0Tt@9%llI(9Ir z6ru}VXox82LQ9+=f^I}jQcKYiv_xY@gE>SEMKm-vL`0-5LRbwJl{Ex`5_BV$9Q@FcJk*X0A}!G~n^;OsUeA5uuGpgxAUA9OgF zH?~d`;H{7=f-i7xG;m4yKtvaYBG+HSXbX5knI6O1D)|~{h0WgW@UDoKz&4yThIm@& zWRQ-h84q@#w9-h<;jj~yBHuEkzpX>N(KmolENXydiFHKyZZ6~DRM;4(*ae?QoSs6g z&yf|3Cw6OfX>1%{o0)-q%dL@z}IA|QEr^d1e^0E$NcWj1i;td&wK3mU`&vY}qbf%Z? z#B)XhX9amkJ2XD~61WS7f@wC?In2HIh~edJcvAbu>c#VFlk6z?nB{Acnzxj1O0l>b zwpzYv_$BM=d}!YQzhUfaXoO9Yn-K-@vP$8OH!3SW_ zuu5Wq&3l5b#*91V8&z>m#<~Z&JggGg8llxd-nhStblRs!vQ543%b6%cJDg}d` z0+kf>JtQbNR3|0arBD}zCpbhpNL>UeI&{%q?9{Pq20PTI!W+b)pr8~%gkYBACYq{}3M5t6M^=YkVnE5#oT_mD403{LW zVCFGqeo?7ZMsvB`(Z;5z5jHR|;EBk%h|FoNhqcy=nM_7@JwXt3Boc`s0JlWsr7>n` zYHI4oA3&uPmrA895j_Er*IJJk3WaX~1P#h&v$3wOu3jR_1DFZJ@SgAcAy9XeR4R4M zvaGy_e2JpyexXpr_mxoO~e4MiO6dJ(H;;0wAPCNmH<4=<#O$Z=#I$)2N#sFLrk(-|9C0cdrd7ibrynIeX#sJI$c#oX`>?_zwz#V2D zHpV>DT0d}IceCD8EEes~&d#eu^a#LOtya4+Jw3hN6bJx=gM)S$hJ!?O7eHJ@W|(;{ zilUljStmr~3K6A^F|T5=*wDnp#8=eCv*k!_ZEf8EE;Dn#h@2uK8^8vDS!2u$5zS9d zPX0tg)(^TSWwTk!aU9y(+M;AKDXCN{Qc6i9=)dU~XZbJbem?Y300000NkvXXu0mjf DhT>6k literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.048.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.048.png new file mode 100644 index 0000000000000000000000000000000000000000..87becdaa8d05cf8246ce64bd50e9bb023b199dba GIT binary patch literal 1050 zcmV+#1m*jQP)(Ozeu$Z7X>X?Dp*hoA}CfE6$C*jxKVNALUChj-PA^mncQ)L zwK2AfS`d{kG{&Uuv}uzxow@JN#l2T2cP7ouu0J@u@NnMW`#sNl&hs2z!>WyfVG1|k z6Qk!0PT===1gDB_Gas0j_I@sJ1|QbyeU-K=)t#X|)$9E77=PPGS1PXx7aFd`S8zLy zW7!a78{U9dFpr0d(-(q@)Dk-e2K!X|Mio*gBIk-8UKg&A{H$5I|A3jN=hb-&uK$~9 zxEVjhi}()ygl93pc3g!!a2FoJmuon8oes<8E6x2SA5E9Mx2Hd3b ztuT;bZJvmR93O@)(!j+Ry8!V(3J{L}g_e=sV$;S`1?)V}3bYva;B;=yJ zrC;5XefjSEOukMk4bqD_-mu=1~ZNchi`qiE4 z%j?J48&lqf|KR9m%tl(qeq4{;qtDbVdz3dx{c5i|wHc#QU8na)<=OOn?3<$mjp5#m z7w}xMenW1o;Lo@WbK^iUM{RFBu}L4$IsJTMxuv`IZ4+=iusRxB(YcYw|MtlgJu>x* zl`~s0>X{v25N+EyHa7hiW=D`)(N#E$m&bvQGkCeDU9%OV#-&xZ7svOF{@xgF(Qw~f z^rWuQG(LipqoGv738`na-iOwmybCIo;X?PUb}LIJ;C^S=p6)ViU7OL{u@}Fq*m(omYrM3%7+6;fuKlVAvTJ!cv%<%=V+QvtK!S zsPgcBnSC|DBQo7@`C7kq|6Y&}uASRp)Wm;-pW^GdCtNWq&TTY$VJ6&!2e1qG;HAkE z{%e*8S^0d)^_P|h``q}XToP&X(jx7kOdXah&u}mKQYSy&!NS_CO}3})hQIbc!$Wew zu=c%(Yw!WQ8~?x;@RtkSP9nWU-kHjeirwL{s`_np{;6lKOSiXDx2k$$I$xdU=kHZ# z*Lti=_ox-U1NY)a!#Xx)cq)$@?y;ZX^u=moq#kANT*vAW?+XLgfxZE7Ld z*d`cjiMCa#D3nqWt*Es1MJX6m1jXXVi{g`r53=|a&=*B0RnSKzJ_w4jshG{)#R$b# zYO5F$l!70z$tHw~`Pkk0`*7#Bo6RoS#itGompk{&e|~fBnR5oN)+R84OZxv*vn+DD z(rvvNYYY^RWq^KQPk6Qi7lCuYB=85|4Yb|@Ih1aP-V)_oQl$3)*9rbLnDTJm!{h;2 zHf)X7D!2gF2fPK`6TbfhtN`199l!WHYJ_$Ibw#f7QQrC4$W`9` zn#I1VU+QwGGw<|#Wd7&K{FzZ!?q~#Nf|~{B1YZfZ*Nd@Wmk~TFxF~p|o?Q;53r=t6 z%}?hkKb%7w*2b7DhFt28%;zHWr*bTAUt=do3*Hl)7i?9XSgf&6362UD1bb`kbCez| zI2FezKaoZ29;5ox`z;e*I z949H-!n>AQ5n2H+@Zi$PSRy(T05`S>*BbzrtHzcDEA6!Pwj$&pPhHwH`tM`@ylh7I%scLSdR zmji!4%saCYlO5=R{$^_EanvT~Uy%5vo3=BnDn+OOM+EbNrv)1tc`zj69>JG_Q=y8i zvK>cVk@>R))2Aa`>TaCtWaB6kQF$eDerAl)Lv=S378w-G3SJ9uo~F#whKN%wLGipBQCnXL1usdN!1>2)!9OKbNPH9Y!71I#vZ|;r&(MC14i#koYE2 z0=j_1zyL4-ya@c*DD`BKdw|kjZ|P&e4QBep%$=mdyodIb<1R0r1$CM<_!sW@0JiEP zQSZvs0qg{x1Rfzik>&UkIw0?ZotdSI(P$n_~Ihp^P+nDzyow8?(+=07*@KAwiD z0c@pqe#5xpO8)8~PP8+`FqIY(H4uC8K5*UO7GTRVENp`1U%}UU>#Ax00d{k}xe^(` QwEzGB07*qoM6N<$f{-BEd;kCd literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.050.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.050.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8ff3d43e5c7fbcf37b30d057af4c29c4377938 GIT binary patch literal 1037 zcmV+o1oHcdP)r zEo$NW%a~Tfr1$=x7WaQiuU8#+K5!QQhr{oD&+mWE^BgYYh+fI0j%%?D3o!%x@I6K` z5tLI|U|1ISF;K8Hit?V41vSNZOZjVGS*+j3-sO}b@`7;L{=N|};AtGjpJ-wLS61I^ zFcM6h4=QDBWMDcEN91e5fQ%!-M9O~5!H|p(f_FBtcUYXY;rL%n;0}CTrC!I6I99<8 zVm?;j34DQ9gTH&h?Ub`8it?=#%Tj(=l+8~$b)as>-~Z4*z)+KWB64kt9JJlLq^o@&9jE4T%{7VI&9WpX&VyLT)>Z~};1=Qp#)ESYWba7q z!pv&Ow%|-*AQV4OQ3p(Lyv!UgG8W$41vf+cMm8@+5R<4?0|b4jmrkF&6rma|v{Es> zlk33k)2?HKmk2kn0-Wq5TJ735S<`pJr3e*V5ey`UmREnT1Ginfz|NoQh0u0uDURSM zgvb_0r12~)J?G|~H!_l|g{xa-bGt6MP1=?JNoV|`i^MIs7hmD8PI9q0mXV_}?_12G z?)ug%Mwu3c)zTkF)pwlL%Bq6bH^fgH=)3xsQG!v`v3VyGEcj6ST(LQ7M;y?wq z>wK@1QCSb}itv8OL6KXP#m3-ZGFTSn-I1{*BCgNU+Ce_LQ=IjXILGd)72SmwwF~U5 z%Hc`v!@mLV_Hyi8t&FYA$-?t89~9;W)6gu_$&B1nl+8Cc>;I+uMbZ=Q48Xef4W3!S z{aeBPrQMyUSgbSFQOsjj$xz9(X*5et?&s)oPWO7tUH0)G7U`B%7u45900000NkvXX Hu0mjf;W7Dw literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.051.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.051.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2146d1d9fd721a0500fd57edcbb134e281302c GIT binary patch literal 1045 zcmV+w1nT>VP)&K-I3U!8AS&I7Ae5qHqm(X`HpF?8REw#K z5*JC$Mx`XphbE@A$-Mh_@$QuL%}g?btN!8gc=sI+zjyAr=N!0IB`|>t%l^MVnUKpP zC$yoz3WEUA0^AMU6P{auXA>jcVt3%g6u1MC;wXosmBtQw|u z;R0AU@Gj5~Yy~EOt6_f^a0&PbIJG{YOkfclG1IFUdl8qx{sgrNdL8zcjI*)lSRYJR z11y6%!F_^X1ml9&1>4pfYc_m8C0Gy~R{~#EXHk36#V3l+&lR0MDWLs>D5K;^T@l?@ zaC##$KM|QfAE8_=Fca(({3sX_^awIF>^2Kt5X=bP6u7kAFv=E)--*mm4^w*jJZeqn zn2-&k%sH;-BJ(4W`O)vto{C%)WCZUECIovnO8#JfG(_hYCFE<%SQ=jTUJ zCn0)e%Ey64;D>sg1~cOym0PG^AD0NIGTfq#MP<&Ea#eZ_EHjk#*uWYFs2%5&lL%5X)J0()lz zZK?@)l%#Xa0T`xbm_f{$v&RNeMLDV^gF7&~@TDRtxFM1Re~~J6E3NPYJ-|WWG|6QG zU<4L04VkR31NPR_Lx)k;Ie!@0O%O&uR@|Kin?-GtO)P$YE9jWhMTW=?nAjz2`fdSJUrcQ=*P P00000NkvXXu0mjfheXaq literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.052.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.052.png new file mode 100644 index 0000000000000000000000000000000000000000..241d79b7169f8e9af608aa931d76562fd97768e3 GIT binary patch literal 1001 zcmVnkW{gggA)62%>^U(I|q*Xpj;iL4z7p1EG;*7?DvbUea^6po7eU$XkU5 z<|PZvOPYHA)!^UTbKJ+1Tbua8Kl#3Izw7l15=<&GUYx-feKMFtGA-Gkyq8>`{nTU9mOPN`NMKU}2GkLsT z4(G91K3^-!gPY`xKEW=6O>#(Al(kxs%T_dBq@J}y$s?B%*6TMzl6A?Nq@#DB%~94m zqx}3w+1?sgMwgsdE6Tq%I6ba$p~j6L!|&MB3RxYeunMsy_7xlLgHst);fBY&khkfk{vDbG{}zQSQh22pEilRQj~g3 zx(Vn0Cv}gweHe;it=3!}<8ZS6fk6hIkWLZfFGomLMn5#lV*i5rzt<4AUR5{aE`x8d zs#f=@>Q#t5#X%et#rzeQ@gNHB$uO$hnGKr6ZNoQMh=HwG38vyfEXC=@-ou>C%w-X# zjdX5uD^}9UwHaP5#M&d;f4ZRG)=hYNav*spx$Y7sJTcjstmw~#yP{m(73FuEDP!{PjLu?rKuS?E7Gp+>|WTVt=4bjZxT30H8Rb|UAP8ER3pzaw*ZDOVQ;Y@5m9OO8xUA{)bI(X(`=!)8VjotHUmUe)*) Xk;8(h{!ifC00000NkvXXu0mjfd!5-F literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.053.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.053.png new file mode 100644 index 0000000000000000000000000000000000000000..86dabaa3b62b4d0023fd606122c282e4ac8afcdf GIT binary patch literal 1059 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 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.057.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.057.png new file mode 100644 index 0000000000000000000000000000000000000000..294010500b9f50c24c0a5a04e5191f37aeb1c73b GIT binary patch literal 788 zcmV+v1MB>WP)Tlfi3TWfaBFc{6X4m&rKQ zih-yJlNpmmT!_oM=oGq1OBWF)i$O3!oq`~U;zH=+3nKUjWaT2*(nakgV78XCok>y-gn$|N@j>jT6)&^{`lQ{xxh0HPf}xyd0c0VaZdx}+}vDl zY;3ILoSOkKE2#jWL$XQow|2YTj-n_z36P76i$&+$7m_Xkc%Ebvzgwvh0Mu*t24VGjz2uzx5x_-BE4f^*6vy$|si~<;`}_NES!>IZzV|%u9c%5^ zOG`^H9uzxh$XczI4}#za00l|!mCNOpF(y4|0D#qMH8VLmc}CJIfM4P`z8r?({XWA+ zqmdmR9{xnqOp+uYmdoW0V@xst0{}%)l$1)Pp8$Le;QY|g&^cp_*9Yu&yJG-qByU)2 zo5x+#7~|qNzAfoHk{|V0kAa@&y$s;hG)=FCVQ7zn^%91m1Mn@$H(RaND}6u!rvYU0 z`F!h;G5teD`li$A zJm>??&d%!*sv;)*0MNs{Z2E{;sEB8no-&(Gi6-QE2Q zz?C#jC#R>Ue_mKvc(As%hUMjDN+LT)WJ(sQ4|L7@4NFv9<&+A zps67l#)t+AY87tAg&DMo;w_rRIRAnRi5AhVmVt|)%_GnVR2K*JD?8{e zXstE#^YiV-m|;mTT-WXMegEfvv+_JI=DO}B0IvW9wOXw(I5@Zl0A{CYZf@>`G3KG9 zGRbGY@2~HN0YI@>3{$Dprznbg0JJ-f)4mgK7bKaMbQ!?YR4TQ$AJj1GXmfLOLeeOJ z?rb(2s|RU}xj<5`>yBA#qr*S|7#SIfNWKQpkxV9=cR_0{C7lCMP9zfHQLyb>0l+s& z3d1n5=gR+E#u(Kn6o3T)=PQ*;(@_yg2*dCUNkej_KA}jK0BC)Ez0+EIq~skP9kEy} zc3aZ;($dmqJ%}(214%OgdV?T1c^GD`HOXZ1x};7?FDEA_!#!YITiY*^j{u}e_T+N8 zI1bo#&+}qI5L^M!2jH#aIPcK7Dci+-K7R|qb4eco+}qgLC}%R6-3LB9JKOBK?p*-) zNiLAg4-5=^KL`W>77B%~D2kp)Y9l!X;5~rflFkC?BpH`9TC3H1hlYkKsM{!KA5g8W zt#3-D(v0IcS0&vb*$%)3uqvtF7&B3=R=*UB#SI+xeKn@_JkMk@87?m`vs^AKo6Y|7 cgFW{81HsfUUdyvqB>(^b07*qoM6N<$f*)T%P5=M^ literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.059.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.059.png new file mode 100644 index 0000000000000000000000000000000000000000..3f041668edebf3ef383b46c2f6e049fbe5688347 GIT binary patch literal 779 zcmV+m1N8ifP)T(!py~R}=>D@4HWDUS6~* zVla(ZBb{X7lXlU+!D7ILMII;&_~Ih8mLe`(iR6a1)U6aM3`nNMSv?npu0;F`TCkf} zA;cI;h^V1yAo1nRvb%OqCVgE zuK+j?;E{9gn&){BNHziNbtQmLv}XSO~*#N7&1hFvhHs%skIK*zsgZs{lSs)AVi2-VOC7m0GRV zzwHSHU=Bb9TT8qn)LKhPV*plt-~S)P*39Ne{@2&ncP5G=(^F}yG)>Er&H?y+eSN*v z4#M-iN0ROW__kawA9+{G$;rvxzVBZoS&`I8lEig@^?E&*bQM68POxLg#) z5p4Z@h2#K$$C6S>5A!^Knj}f_Mq>}KblRaouSr~@j_uRRc%nYlJ z5ha6$IPs^rg&=~KDJ|^Q8$u+3ugg&B0@TyCg7k%1{W;FCM;X{vs)-+ zL2wgTk`W^Dr^wuUZaC+&$qX|xaZ~8i9nQyd-jDA)z&D0lU1+UUy)`uyk|>GOK<1r=Pdx)j*#QyF1Mq{0Ja*2_q-pxHR;#67 z6LMr^q%R19I{;1rr~r86oO|#4z7dhUwe~Q{DF8=AU2eQ%dCl{Ib5j{x^Vs06;YhOQljj$sbA1EiW%W? zlu|DM^rdOq+mX;Y*9%}R48v{7npkU70I9XM&=O8hPm5A&RYdw078bT#_HK~O0mvjt z@}VUpDI{N$+~3pF(~qzGpmwy@6p@nv{wov;Yc1iX^j`ogBqyUN^0yOiadELg@@D|Q z7mG#PAq;|Gh2(t^8TWnvRC5isB8sBCh}_&fK4^Y`_SRS~mosr3-y?a#Id{Pr^Jf@_ zX0uoTFp47OdEUMt2riQR$vJm5Ns{}uTFrhb1OQG$&NMKa+*;T zdD(1smr|-IB0EGRu-3+zOy(WQmD$-@^QG*&@ENBYGM^sX%N+m!002ovPDHLkV1ko$ BTuA@` literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.061.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.061.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b842beb23f8ecdd2fd5ace26b04c6a64779100 GIT binary patch literal 775 zcmV+i1Ni)jP)z)K6#>R~!fM@Au8_X4dsj zV^Aap!I(6MJ(dbRwB+PLZ^G0f*;DE$)Qe#7;Gr+=q4d;355-~$302UcJ$Nhhu;4)j zy;Sxf^$?7XqJ;I5I5X~h-(EIrVv{uB#V@?WFz-F4PD*yt(D2hz2R@>v8`^p$|%6mVRW!cpgvL4S=mq&#ePXANzQdTom-n>0FWff63O%3#}n3C z0zeOxbO^wHNk1n^@_I9D<;d{xa9h%^0FI|=8uUO(lr$#kah7F|y7l_sSZhV{Hh=@| zc6*=)PESwMd%u_DvwFS0C2ZA~Ed%I;Vc6dT0l*luC~2V8YHir;>m>++3V=!w1nnMZ zt@X~i2P8-P`ug@_lL=ZKYb~8~hXFjTR4R*WZYb#?fX4vNjgOB9TkzOwwYHHwZ8n<@TO5FQ%D=NCLA<@fLze&m002ovPDHLk FV1lzHXsZAK literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.062.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.062.png new file mode 100644 index 0000000000000000000000000000000000000000..a5642d587cbc2bd653a8547e17193520c3e85848 GIT binary patch literal 767 zcmVTl+8<2VHm~FdB^KqKN@i; zf(bOttHG3iM1j!8Ah?UvY$R}{+ddY-6{1a>A|WCuWh@u>4=7sQwvrIYSlN_AU=S`u zwBe3--uG$aHH}G!@T?C%o{#f9z!8h}cs$SB^?9CW{s+ihE|(L_U(-1aJyK2Y|04@+1ty=f3Z69|Yv^@Ngf= zJjn(CkF?fvj^k_rK%r2eZQDHnZUVSO@`Z@p%jfgIY60WQUISQFN{yGxCbw07%5HTrOuDV;+#~R7zc&nVI>vw6s)n0rT_oI-O2`PNh;H zIaaM!-z_dKt^$CHO;Hqek?be=xLhum07xxZtRM)gl}cp_z^6naG32_g+6$yo>Wqk_ zHa0fqeBVDX8nLq3Yz4q85gBM{X|Z;JJ2~qnS+p!`^RVh-d7dXEmq{KA!!W(CWs+?o zvXRYZ>w?7+k&xuJWm$iKp67{(tO7V)C=}|so)`vWOq+-_X|4AyMT{{^Bu^xh$#bah zBr!QTNu^XjfDf&$ty_D6Fvb)C6qQo9T-UYhsE(ylsRO`uV@y7i$>@E+-rn9d08;=i zHa9n485zem$a!PTh~qfRK@bRP&B}G%rerdCM=5m!z;^(75h;jBq?BqC zk$#dx09LftUtF?aXIL?p1|Kma1 xTl+8<&Q5eO~^W2G1NlYfB zM3E^!KqI0>5kW{K32g#%v8}k-#^Q+2~)8p|eoR2%>OWs51@> zm{F07Xpr8yr$stVGBy#O<^A~ayO(<|u+K47=Ed_o6N|-6XJ@CWudmlcB7syYwfBZf zgVtKjWHN_EZMkh~!x-$^ct$U9Xn zipVtp!z8=9ySo>bmX->CGn9BdewE~70I!1}xEBP$N>5Ku$s(OjhihwV2LaqCxn_)s z`@a8i$Fu~r)@nAJJquu(n^C62KaO&h_>6YV9e7Bmf){5i!QBmm8Ag zGD#^E3Vqhve=?87VoGv=WGbJ}Z-k>RAz3KJR&+ qHa0dY05mr@6M)-(W)*wB@A(PRmNO9*f&Kje0000bltE}zR}_Z-|6boXkxXY( zNJ%Kdyh$1p5hV+El3j_57L*4nBxF$nZN;U!%S~4z;wE&_x-y}(`qn}>(sc!8pq&tK zX2{0a(iV(nI+>Sw_jfZHCUFv7=)b+^eEjF!a}MyH#e?3WC^7(Se}8{IP1B5|7hxDS z0eI(}e`ny_++5IXHcv>p0N@Kr0{}b#OY)KTe%ToFuuv#G-wQsp7dAUPo88*lx(?tg z0M7s{T5JDI)3il0CuzzUb4yZfb#?VJfX4vT(_s`vnZCZhYXH9X-v2=IRv3m2=bQjQ z5*8K~SgBNojWOQ?7)g@k-00}&lO3lWpmWaDYPD%eH@){)lO*{$j^m_POPq72QmG7( zybItXlINF}mYxBC*$Jvvs~?lRLh`pHN$&3lYXg0;So}Lp({D)@0DSJ8GrNE!LrKHN zm>Y2%Z|w)`hK`JkRK54h0A|+L*KIeDl8#IIr(UoB(cR>OG(SHt0KWn_wYj<3-vK)3 zNOB0k+W7eRJHgsj!5FhavSFs=S9etb2$;rt>tyb$B0LK6<$8qcd!0rT;N~LscZ0xbM_L8L26B84^7mLN0D=RB| zKZ#RQQ-=o!2frk_AnBg9_NP**)ItvzoSB(9DQT(g{x*PL!Z2(AK)GCI5CjEl?RAo8 zz4yz_X7jr^jyF4i9@TJqdiqn6HvpWGbOb<|bluu|>R}{v-@6MaayqMH> zbWEK3f^=#&S+uKe+_{nGLUHj#k}RUBvn#rB(S`7kLW@WVg@!V#fRP|?C5Y=;x^p$^ zfPcmq97zw4ERrQ-rr}I^()A=@^&mUCPGXVZJ#>@sma4`(SzW-9l@$vD` zJiAe&^g=tyXip!M37YF0YBm9Dq~9!^7S-Fpgsa_!_{oZnxY1kh-mi z<5-O`b&~tq?RFup5F`t#`p?+dSWmE2-5SXalKavM6+jEXm-TwR*X;oSsOo@-J1 zTWN)=s*gw>@;vVddR)m(tBwI^6pO{zX&^{GR@JAT=UooNFxLZ*&1Ulefb*()qf{z6 z0LW~;j*gD5W-^(qG3K1_`wt6+!jopR`OdCx!KSCDzi`gYlJql~%+;Bhnf4BaNs_qr z_4O)%TO@xEg5di~rIJ-uZdyP9jN{luQMBJ$I}6}gx7)q6va<4GyVKjPCnhF7Bl)v2 zCQ{XV0OmyG1<4HndyFwh0sH{qUsb(WE|+WRtMgv-E0s$B>gwuu#+YdU$5mBGS^z$P zzeHqCL=tQ5^CU@jEWvKmWE4flT07X^-+x$D_mX@$Ffh<8l}he?xA1?7H@$f*61&$^ QT)X$5}Q5XjB&-V^yOc&YE zC_*f-nv&FHEhQTZS=cFmfNcB?Hj1T%jfKKOv73;E1vS|ivcNQqNliCdj>qDAZtj?` z`y<{ui_?3~^S&9ehsPiY_TTC0`L3*M~)qKII z0SjkyWq)QU2h`EVc|64GnoP0V{qQR68T8U&B3ug}8XZ%lb0EA6cZ)99iMyO@7bh)+ zD_zMnRjrC=--OrUV%Spj)+%l~9v+0R;d1KVsP8CM>F!SPbSJzF&&qx!ya?x-I&0*q z@G*h?IEZ~}c`T^a@E$8of8s!k74Yu4jOe0&k6%kMzwHNKfocE%002ovPDHLkV1knb B;rls#HWXQ(A%4ST*@HM{N$JOyytxm{0|w+Sbs8GamZMGQ1uB`O;Bt|(DFc1V|WL=4=`{a z#@bPw7ig?r$c}}0T4*=00`tW%Cb1G2#d;xgwgn2B1r4)dk6`_nd`AvBqOLfq>4ViU zXssQMT2_ql7&tiiYIl+z%HvE$hsJsc%aQMahHTm*^tVDP+yp7atQ9~01+1jxE5HcUm4W-gjtt77{%>(gSc;j*!e|*NFob8|%{{P$KRh!) z(Qy~3X9!{$$Yi1~g@(oh$MdBJ{+*1~4UIzkFxR?f0wKacs(3^AU;Di> literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.068.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.068.png new file mode 100644 index 0000000000000000000000000000000000000000..bc25f43454ec78990deeac32cbefc4d20ae745a8 GIT binary patch literal 773 zcmV+g1N!`lP)b)ImrTQ5**F?|ZY;wuaPD zni`R)WH3cZghiL2Lzjr6maR=b6VnK@aA}paD zim;+UhuL}ab!oRP)C}r>eQ$p6d;d4@0spwT+&~Zn27sBFnQ1b{YzN><`j|?krdwNE zqaX;9)q?Ep?Oh+o@gb5I0qi6BRZ>DS1K=BgJ0!;!78c&-^LbnQaq4%hudi=Y9LKkf zF^46MOS(bw1AqiTouvIFuSq(ePNy$RdPY)9CL9!fzT?xbRaXz2_WotnY zuv98}0PX-d2;g{ITic6D3s{4>VHgerI4$X1dwcuja(x28o}QkKuIt{D)RZL2iP6!~ zcK~22GomPJm2?uo{V)uluYdu7#>U3xlO(xHavOldKMt`9vRp3jB)O?vF5minn@dI{ z)zQ&W0x)ijIa9Grr7w=->;~|%v$OLP04-1btii!SS!Rbe}ctgkt8=u`mh?P zCM8IImb505$<$Xt-}hy${RE)#Z$L=^u#Th_7Z<-(!5|1^j46`bQz#VHt`-~`8lvMk z2P92-o~J4ZK-Stf0Lq@{<+9nVvkH%;Qprn_Vxp|{8 z<`T)Xl7c9To=s0r3rnP6E|=Q@;2z0FNe@Vl&d$!38X6i@UteEmtv#9~$pwT)IDgEQ544U|GDp*w6;iU zibG2g3J!Kq!FK8(wK#~l2(1M{1s6dS5!^%w3U<)JQ5U6)LquF06ooWtr_v%76bBcP z*3W(@rj1SB`#AIilbSY)&vJ)*`N6&SoCE(kR&67N+z|*CU^fAsCZ7a17kOSRz{@cx zrZ8U<_!Kp6frBz##%MP&BUo}~F-b|mJIP-YLFNGD!BiD|h7vL7ZyI(K^dRtVNbuR9 z5J80unjGL#0g&d+Bl9Zn%vcI6SY&6^$rUz=pd_hR{t zz?B;XEsnbqZ4Kg37gltun;zQCXgArtN3ggV2G9@QdxnJeFf10T!4G5BGMt^@lP;6w(68)0b_ zpLSfr)QRj?4@Bz@trYjgocWn7y6}W=Ng-F!DegIH9(K{$obw-sU3B#oimw{$-fA2* z6yS_Er38~^x*zi{TZH)#5)r=Fn+=$;D?)>H-recO7OR4=Ji2La$wThbEY#!DxL2C(;A%ucr3Fg1U)C3g%rUCvrzW{gC3d^X)+h+g(002ov JPDHLkV1l!=6!8E6 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.070.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.070.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3be59e7eea10cee4216116112bdcae1b705913 GIT binary patch literal 671 zcmV;Q0$}}#P)zls`z-Q545N=lq^et^7}D zC`3`CNJF%Rwph^=Q3(w-Nrf#DG(HLf8zdc~C2-9Kr${hTGb|{`Eh4DF%0W}9#DDMJ zZ;Qoy>N9KV3wOGl&pGFN?mh6o%L-ix`6$!~8Vsr(Y696gNKHkUXoeZX;+BAYD5)c~ zVaY{I`w`^^b22J{Z^%BFhr8cH^58hOlpE`7VS}im&f^{2doX=YqMc32swQRiyP{QO zV`u|SNJ-}ok2hbU@`4rip`_Mhm&;B`c4YwuUcf>or?m|76Hqdra1^N<^k^~q)mChN zoo6HH;uwSo{J{4eJEmsCBNrN5w+6{@@Pnm@*cvNASv42f5CxF;trMcwJb#iE$L~ z8Og^i%S*zF9p7u_9cDBts{1g0D|hQ`X#Q(dG!F;yco|tM#)89=AT3d9roj+H4-}2J zV2io2o9#mb{4qbOw^Pz+q^bgZErqv-U>b<_7w`3-^%E{a`A@K#MDzdv002ovPDHLk FV1k6D80!E4 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.071.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.071.png new file mode 100644 index 0000000000000000000000000000000000000000..947c88ade62051edfa2597554c3b1e3a02a530e5 GIT binary patch literal 803 zcmV+;1Kj+HP)T(@#hgQ5*;G@9*vE%A__}{9fTn0BpyTq6Au$~S;#;l?2xCZ4)4%Oh**>ez357(iKt7^X>VP;xaJy~ z)^~)=bkBx~}U&h$f}fSpe&f;}ih= zu`Ejg;EKTZ_V!>Rk+{svw*mALkAfx!6A&d!2mS?-CTX`0oVrVR=q z9x(HY5MrE}KPjblg%BEmRsi<_)G_nZmX?+=DW%%)4-{ikO0l`Q*-u1Ii0GB$ICqlC zVuT>NF0v6HxZOl%S5zIL{~~c0M!7hBaz4&j>%WK(lpHhup0~pVmVi3SN0JWay%^e0;nE5L+r}Fu{R*7Vq zrVv8h0002ovPDHLkV1fdbYzP1V literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.072.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.072.png new file mode 100644 index 0000000000000000000000000000000000000000..c1962f3f7de1eb9bd5fe412e57e7e3963193ee41 GIT binary patch literal 512 zcmV+b0{{JqP)T)X$5JaTLe#*K=p)PBYV# zaYa%nB?}uVB_!F1e?YRgQ55A*uwXW3XD8WNNR*9@lEs8AOXb)2F+>rWJ{He+H1o{8 z*Bv?a?df^W_q?BTzUT8j{Aa6rIYJBTa0I*2!6!VyU3{!q_$x5=w+>F?JbqxlJlo|b zZA{~O0jF11RoEErgty^r*b&x-@i0~1&xP0FURa-Am6o6z;d$5}TFuSnr>(FjJPWtN znr^V6a5}sShsqiDw6gy|m=7mb>@TT54%fnHKiHC(R=8Z^Mw`xE;a$nDXZIU1RoEBi zQY&Funv-Qc?b)^N_8wobtqB~)2)?cY2EWvLoM-~S;~O>)T5_=ojA5<`{7}|0g99sU zFVNX#o-h_}hS{)T5L%cFkHXb3)O1#1XSpHMsn4??Y&={EFN#7|R#kL$yvSfCY$*b6 zEm^~1Yq%KRgj1;-`sWOq&^C@@M&0rIc%U8-Q#gpjYKfh}?W*o{ci>|A*n|t%tDZh1 z_^BRY4{-@Eo0{!64=c3_IwiA3;OCOTlTS#~VI0Pv=Y4;ywGf%2 z$)HWx6yj%x0wG9pw>o$z!rN$ev5OHAbn(z{bm-opOF@ebJuHGccnLx%(4aw(6V%iO zqYR-HYFoIy-!5vut@$VFxxUZ)d7tmg^9BC1^nM1%aa3Ddn`&=w*S)>HoSmKB)6d-? zxm>Qv6PuIZXkz-h9bt82>`E*F{6=4R>Opj;-e zF(v_EO>2ESoldVbf&oA#lc{!fb!D~I*8%h?rTRsLH9)V|+X>(dfcxv~>!0dByIzjt zn2n8%mm>0v%^1@`@*K&N0N#kmNGg^3 z2v^N^9cf`b)K6#}Wf;ft@AJO9D|?7z ziP#oHI*rYxE7G2NDY604i{K#)ikPs$5>I-O-b(XA54QBsmh|8sh#`SOk$TC&i<$+& zo+^Tuz=p+!xP&Y;OA~f$H}gDRva*{dZ3O!}&OGy(A2aX!!v7q3+RYGxtJP|LV`D@5 z`ubkj+}!-TUa#xo;$kWyc3?0`5}(iKUjyC+-UHqMyqRr@$Xzr0&U;^u<9I!Upxw`A zc4Nh2F_X{dKL*a5nFDT#$W=3I0AoJiAjba;69UZ<&aW0gwf9p~J)z?DX$@zuh@ zLaY1j-Lp$eOGmQV?5v0!GPBY7`T3O|uv99&q^jQoZRgzkv$L~}y}oZJW+oF86US8b zE^ujRXz0rjg1XLtsvZYk2d>9){P1ZQfQVQe$15W8wV9o()oLD~1IqUH_Hi@IL{aqf z?mxF*LI{?o>5n23w_2^E-5}okqrhKlYirvF!8&oyZ2?U)8|VRnM$z(Dw^NbzTiJ2iHuL9Y2yS=iz;R>*x%jG^S7K{EM;K;~`cg}raX61Ul z{;&s(qUb*Gld66)Ffb55t7VcTesFMb6nG2xrd%$kJ>c~8^kY@M2t0PqT^k!4i$e%* z4@-8o=bOM6zz^AM_E&Z`!0r|@K0ba5m^U*Ok;_pO-RbY|Z+8Z&)#@QL`&>jmGP7Sq zZCxd;1!08%QIj;ZQZ;Ox$|duG-Uk;A|lU|m&j=W@BrGcz+=>~}bHqmz@9`DU{@ zEF!1P?4)zTe?Q$Li|ppXGA-i8XtWz)WM65VHC&l&pU%DT#~V1 z6iQQSq(n*CC~Kwcl%0jLQL?us3pHyiC4YcqHf)IurDPImM#HesRg;OI#rs@y=gz%% zW~`igH_vm<_x#Rz&UyLYt?G7|`g{<>7(oLAn8#;KW4i#EZXnzU z4_hKy)CvbNiRP-t;V;u89BHxIfjcm>N>IBs)ib-f9T?0N=vu9T1^nm)zEn$ZtN~Wx zq`FnVmfVzAejl!;E}^fLhuj@Lg$v8ZENlq3%4!|%H-~LYa5qf$n!_q=4-dktaJ-B~ z)$t94P2qO<7Ebl7s056J`{7Ht7LJ9{us<9M=Ssqii#&0000007*qoM6N<$g6H_%CIA2c literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.076.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.076.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ac52e1f58c3ffb974682a8749ba8be1b870107 GIT binary patch literal 668 zcmV;N0%QG&P)z)IUhoQ5eSY?{luVLbJrA zjJiXEEg?iSS{4QoMA?v0Q$u?~25s3CG&VF<^k+$Oky;!qH7hKoh8%>Dup-O~Eb4l@ z_jjHK^>Q<j0-Oa0g>J*PwWZ)~kVB|J zO#BU0T1irvLM(d+l|}F{m>4H9wMzw4lvN149=;Soz$T0sZ@mjEmf%T&2F&y9Y?}hi zG&sTtV!DcW+&J|o$ykq|#`e)@-?x%K1sg(fbaD~I6WUW4iE9#5NH$L7lO{cg;&KM%)iC})LFg?WRN-vk?Vrd zN$^HkU4R3K6NpU`Z4C(>r9-gbZ!-v$`M_!0hY%T?Ajl$CfhI7|3g-OonTh)8%`Vs{ zV+}*uSE!A!Aq~}elJYWAA0kXl!}w#!F7nI#=k)`1R0c8{t^M-=0000 CA{_Vt literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.077.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.077.png new file mode 100644 index 0000000000000000000000000000000000000000..4692d586026612ff39e936dee289141439422fc2 GIT binary patch literal 783 zcmV+q1MvKbP)TlTS!gQ5eO~ckj&ey&M=) zgqlT!H9blwS_I-sYLi9i=2?NMtpe9=gkTsIGn*A4#}NKys|2e*jGE&zK0 z>;Vu3P$2on_x%sHZ5Qgnb-hdG=jUy$^=$y708Rjik=zd82!Ii-b*S*4EY%0Aw;5F$`m$)_RoWVE{L^*4M|!$BP?)BxPV= zV6Rf@v4}hmg5W|jnatO*C642mrfHrOkxL|RS(bHmY;3GlV>z46#tg%_BO(gGxv8nC zyytnWmvJ_m^=;eEMx)WVh@AC(|7kj%{sI81GSt-6w1;F@5CoUo+uJ_@s0*uTW@ctB z2!bmlS4j3%HlYF(5jiL#znYtypZsk#DoQ4kKS(}QO7-URd0hoMj-yE00Nx}LiJ%b} z0HjhWMk0~dBzNa>IaOm>DHQ|otx;In7JT0?l4M(3TdWG~=;$EH&j5C2GMPr&0|0Pc zSCmo-06$k(SHD+*uIq+j7``I8Uu&H}W0eE|kUSo|JMMTu%;^G04_W*1qd1hi_B3I#T$jWh?m}#09 zMdTEKc>vQS-vI~!Yz5FOB7FefmP)0O>FMeBSXY9&;SUcFn_(CpBzYRZaS>@L9}TlwD}fVHn1L*Ykhv-Cm!C z4I|{p!5o+)wM@;yltVjHO6*8WNe*A)gfmA-R#plpav(|VtF(iaBax3G$v3qPoBjXK z4?wFM5@1;stjeGsSOUBSo&!&s;Jr|s z1<)FV+!%C3d6&g%nQ`D9u+(BsupT>PXR<8m+KR@?tHV^-Ek4zb$`>7c5V?=2rp&5u zvKn4l%VSh4;sH*MCLtcbju-sF;iR)qA$G~yh_!bV23p~3dEboH1No4!9s3mM>Tu-H z4)nRw8&3N0{=N|3^y6mZDefzE87IBL`}#wC-H%&JgZoj`&*xg?-NM&Wo(}x3;pJ*W z+1yAcsMm5w&*Tt)0uu@=5o^;J&NZ`Ud^%W3jgS&KZ`jOa3Vs43EXL%&z@3@0R;~nI zNE#Js!&Kk`!N@42vxR-v1UQArVOw#A372$a zGIr~uo#e>ftpFC_nax9q_7<2s6UH>#u%5YHKd#u(TmyETfOU>vB% ze6@TjiJ`L^9&ADr<+Xo2u*SLqVFeT>m{b(=ljMQ5Xf_bMAYo1mX}$ zOVdiBfhIyQm4Jf|qSmGApkfw>G(uO4xQOWR99&$?<{~sPl@6U9ItbCBQjn4sQ%#GK zhY~FnLs61KUhePGlq4jLgP!^4dl)6iD06?DPIsirT8p&yr zX1WnU?PV%=>>P9M+`rZOgPEH>3`Fu%|XGva8 zr_-O?@24Hz*w~1ernv~rdEA)C$C55k&I(OSPGd9+%shFU-o830hLR4T<@?V4j4#twjA07hCs zt+f&n=Wn4#9LJHp0#-m0AEC83BXN{$1~KcrDa*FSS*eJxFsS_!{M+4G=05XE?194B5Ne4 zMPxV{jV|YMxoS7ew(a41y`CmnHBIwjGMU^#hZc;-;}Za80j$?*wL76u=tJ{BKA)%C z?LGtG5r6>zu|OcO+W1kOj>V~|snc5PCnS%F$SaadB)7EIg8(j&jEcyL<2W<(^YaBX zt(n;Yl+n@Ax3+Cxs?}s!fWGG(;wY_IiTEEZET)Za@KQ4|O8@0mM0&Z7NT zF`h+e$VV?r%O6a@t;D=b6^LA~VCV?DLvTA;Kp zVkB)1x#r~jI6aiHBfEeX0)P)d1MmqzR#nv(8yg!dxm?a~3ikE&MNHGY3g9|3 zZvl8lMDK$j_|42wA;f6_SD3j9;94@7d{x`6sKum|iV)%w5#0jt+;NAGGSS+%#Q{cL;0l*}p$B9J3Zif8}_xAQ~0+;}B0YDT0l$wH003Dv^y=?R( zc1KFdMDziG&@}CM2qdC*06(|4w>S5K)$H43=3fAghCpWi#mv!IET%NvT_>*VMu848!;m z0?Xy{S7x3eqVt-jos?2GJ-TICLf7>{A{u1o`{U!|ehAFx^S*7{8308^Q64TWEuE55 zs&$S}qobn{UDwYL(F8NUX68H*G3phk)9GVEh^Iu91n`KNpE!mGxIkhIs%{@z$$=g+qUn{&dyeM zutp&8cUB{jNW>6AbOT5MXeXi{01C{!>^M$&_t(`74An>}Yd?`aP0_yP4}{bsg3}R{ Q_y7O^07*qoM6N<$f^=S0egFUf literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.081.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.081.png new file mode 100644 index 0000000000000000000000000000000000000000..a337d239e8239364f06bdddfddb97078c835f181 GIT binary patch literal 775 zcmV+i1Ni)jP)T)IVq>Wf;ft?{D78CA-JT z#+*S3rvySolEx|;EFx%Sxr~w`5EU0hE!5)luy}=Qv=IpgSq@W#YcdvMBV6NxqNI@{ z2Z19-Ll%Ob8}|ymo!QCEW1%bAcnJ~xweRzO-k0~!1OIb$+<^B!SYKZs7#$s*F|$X_ z?3|hHOZu+WYF(e1naRBO#c4p*YPEZkBzXq7WM=0jwSWU)5V+UOew1|C%)VS*UA+U? zaiHes=SKzx20j9wEQ;b2NuL6@oO4}ZD9f_3APAlZs=(D!sq}iiUO(ueePFFtDSI5W4zwqAMkwuB3C@7Um&zac=f1&Tx>-9ST?og4FR0Cc#vzI!Z&b8&`<$s(J zz~<(rO-@eU48!neNf)y$`)XrjV;3Ok6@_7V9(Vz`R;g4PaUAD&!+MG1xSJ%&s+oNa zyg4^F=Z=CGfQQWN%F@zO_av;BwY9YZ_*l|oV`F3Y_kq9&P)?HMTMpgYNs)wet_dW- z!+oHn3UK>0(Bb5HegGUuI(Kx3w}6r1;o-r514kd7i%~>4_}M zo{gf&9Z$jH;^GkSE^xujuEcR%z@dlTXf&)^t^Uw%x6ep=I}F3$r>CdCuU4zwMxz0L z{whULN@9Iz)veHE2*SYeSrUzKLGQmA-oUBhWP*h002ovPDHLk FV1oT2X(s>x literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.082.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.082.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb03416f3e107bbdd01a9e659ed67525f99be1f GIT binary patch literal 777 zcmV+k1NQuhP)zlut-hQ5eO~ckg@6Jj3Z( z3WCleMr{@CT13!5yH+tUM$lrIg%w1lEehJaMH}glq_xPPT)1*pLJ&xcwU$%XJ=>Gahz~Zz-%_FEz3Fw;4**?k_Q27iiiLx0hlJ)KR-V|;ks^6JFB+Ca=Dys zS=JEAMk|-|vM-y>TD9|f`^^l)xDViL7={-`<`tb3kE&-46DCR1EmS{euNSt)f}Yn^CoYkM<2J-r#R{L|(I01p7$Mk)_7eF7$?C9v|YXJOhIUbK60&t1sgzx(kyTJfpczC#K+x9~M@03zk(&@C0 z?2u$T$qtfF#>U1fyTN{GaBy&gTD zM2%1T*tgWq8_X7JR!!XuKR>Lqn5CIy7u`D8XYiq0VH^3kWVj{B7FpO^zAjz)) zR!gPQDaUdC_@6t8B(&BY0Afn14-uegnsWeVwAPnqW@fB zlgZ=?fFY760Gvsu)4N%hTrL-DXlS@W@`#8$E))tOP?Hqbb=lR`^-*h`P)glQBogIJ zCNt%_F0mB=0U#vB^E_pmW^WjVw*cI=ZF_ujaxwsRD2IGL-&n0y?}*5G0IvW%6Oly# z6##LPhXGszaE#TlTT<=R~W_5xi8bqpCXhv z#l$X>k{IcL2o@sUxUw6;lF+xxU?`Lzf{3oAd07=)3BgTVIT=i0VBF|_3dK#0l(z4Y zYEveq%pfr#NC=b3yZ3Zs!ptx+ik{`=+}}NX-?_jCmUoyz5~C>ca=Dzz<#Hy9qBr_^ z(E0TAbgJ2Gp0L)QA$eNT5o64{we~lXPaBQKvr?(F3qXefna}5s8DnlsI!7`l`PezP z2_Q@IEPxomqut%zn~RH!>#fjEAg89LzL0bufRS`7l}i0IFfd^E3}G0idwYAQjWJgw z{X_D*LZMLGgSGp;s= zeBb{lnM~dU@TGI^(!#>R^C*g3w*f~{r1A0b7n_@#e*m~4>92{2iKtSk$n2RCi9|oi zivWt5Oy+s#usan5fg2hc`bAQayu<^jMy&=_-E(r0lTFV4@;$8UnQKxK@10AOTm zYiqC#NV1QltJmv)AC|6F&bbW$uRPEDybb7_>jkir&1T;k_F5Kzla%UA_!7X8WHQ-@ zgA3m+;m4BFB>!sz0;mJ1OSvZtr#wxm;W z9Dh4HI$GW5bbGy8tzK}>{Rp5BK-oF>nB+^6SxM(fUI6gST6?WnEIxT1raN#Cy1cx6 zJdsFz4d5F9r$~MRU_;Wc0Lqen9v&Wk5d=Zo_dKi~41&N5!*G9jYinz+QmI(HL;2rJ Z{{z;MH^4}4n$iFO002ovPDHLkV1g-DeSrV~ literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.084.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.084.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd75754b4cce974cd7f83a57f95ca1777cf477a GIT binary patch literal 775 zcmV+i1Ni)jP)bls#xuQ547j=f0OOOsWu- zQm{j48zCS?MK>vQb5YSy(g>}Ht&^LBQ*TD8prAvkpo58}yv5?=AP7#n6o*J42}Fvi z61BB$NM23Oaj@0C=j+Fyzx5t|oO93rUf>@?I~{7R6#$jb=hfQU8im7Qsnu#cFfhPc zYu>X^Ypn`}Lbu=VKMUX-fPMh`04#~fyok&yrC!Biu|>Do^pcfIrAvOlUyH~A0JB6i z1z=S~4ieEI5#1G$N~Kb{AtG;xNIW|f5gHj8xd`CCh`bb$n>{@}p8;TEVnQ;R3;{r? zRO&ShV^Ty;GxLyb+pjIlYCD8lYgH^3PZ);rOhg_r^JFfUTLmC+AtE$9JRCJmbBc(L zGV}RtHd_J!wOLfHR)dCN+yd~S)oMM+<#H=tG5{bVnVFgSN<`x#5+D+hL#ULp0R$3>#ExNi({8s-A~FEf9YP}d0)WcpaxZpy zK`x>I_P5*ZqC+SmA4OyVKzeL!?61Ikp|vI=x*#I&!{P9PLl_E$7K!LN5v6V0?%S

e-96Fh=xBhM`j_x zBFwxDU>?A`P$*QIo}O;OmD#<-gObVQ@8wyR#cs)ez)J;fKQ5*&EbME`-4N)f6 zLMoiV-VjodyEZMNC~DCno=~RHN(pRHp}V-$Cg>9?%bn#W9Ei4U>Vd5aL6im(jXr19 z%uL$zyqy46lbkA*N~8IF z{%st`27oLJY-?*#GY9soN4d;(Ag;ETu_08foE*L>f9*5BVhJO5p^5NmC1T}$!` zfV%)*12|%>J>-+XM>}Ol-cKR90l?Z+Dm6s%k2)+Ck|6nt z^2|!&H=(_GllIsBYD*;Ic09FAgRDmM$3Bczd z2zD*()>6@0Qz?}OkV=x|MHT2c&U+D=0MI!(Ihk4xSSS=ck|zN?!jIeZ8*FH3D3H8K za<5YAKomvJQV;+{QREkk#j^l*SZi-(vsnww>tP(n5{6;U^Sq4!PW!(9HVnfzEiEnO zIF2jJsI^wi+QXumKhs4p9`<1VM0~WV?vOB=615%?)KTnc~F6 z#0CI+lu{=EY!{J>j^o^(KOh#JHc=EgK@c1!c?!T*0JQ)-{HVuA5qT*hmy#rToXuvd zuIG~TP;0Hm$H!|(ZX&skWCbkD&d$DTYHIqbwO&zY|BrkJuPzSUx@6mx00000NkvXX Hu0mjf_?B34 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.086.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.086.png new file mode 100644 index 0000000000000000000000000000000000000000..996beeceb49b770c6469e5087d141a623505cbae GIT binary patch literal 757 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 DCJA$_ literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.089.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.089.png new file mode 100644 index 0000000000000000000000000000000000000000..28b2a1923b9511e82228b54d649a2d580afd3703 GIT binary patch literal 758 zcmVblRs!vQ543%@4mb=sZ~Km z5NRk84U)m3gH93@MN!8GMeLwpz)=uITy7l{)J;J;Sf3T75Cs*;t&v(u}z&{ojJ1>{Zsd~L$^gQn%fGs4~NSY$~1i-_5 zKL5#D>;4L~)|y(aw#hknTGAnsGm<_7_(rlFzk zj^q21b^tgY$ML>wHoIqXa&k`;MSDpe1TZA&a--3>RxX!Q$-o zhGF>j*PW7a)>@8_j~^h}FKK9YcJ^GQQi%Y-Yeoe@koA54s-$(E=N$>daH<9LTf@V{ zDijJe-}h%op7MSF@yN)?)I7_XOlA{+odB+Ob#=X34AxYoQu!7|(Je_Y02~W~z$Afm z&TR&e^?iS6q3JE8VzDTaHv#N#x-|e`t)($04`3{p%Y9i6>{p(gbE7{EW;V{V3?K_& zcDb;oj4_g=IF3`v3Pth_fQ{4B)83MVge1W^x0<8@Fq5oM&bgNW)<#jZ4U2EkJoWYU zk>p+g&pJ9f>PaBtI3AZ&C3z+Yf)&f)v0ANeA$b(Qo&Ns*@AH6#LgBr0?uw+{ZEbCb zOQlk3DOgWW&xTYgbzM?5olZX>DYRO%)|!cliL;VUO1dQJ_T1duyJE5U`%l(twX}0? ztE3AgHv<<*HkK!O8bCLIRV32@z5;kn@*c?>VHnP#WuumwCQGG~*V);*#u&5GIhSrU o8c}S0@1ONa4 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.090.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.090.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb1ad147b9c9095f5d9d4be6357c1c2ac880f99 GIT binary patch literal 514 zcmV+d0{#7oP)b)K81eaTLe#*Kh7Mw@XH3 zHX;oXVZp-26QCqnk_Fj}rIKf0FDZ{elXwJUF$+l+QjX z=y(_lPs7*nGF(p`v@h&WedqSEUEb0}FHm4&q#K z-mAWYb9hpMOkif|eO$4dU5B-Srh0>B3wXXetN$v00D`Bo0w=hu%m4rY07*qoM6N<$ Ef(OauQUCw| literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.091.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.091.png new file mode 100644 index 0000000000000000000000000000000000000000..198d803f25fd05818b94d8f06474527fb98f4d88 GIT binary patch literal 508 zcmVb)W2&KQ541T&m=)aV?Y!H ziHe0k3a!+XA!rIg)7hjE8#^1p*22<%z$S&Im13nJHX=$OVq+y}h=N3-2x6h4qio9u5oPQP|y2v@<*n4^p33YZT~2_#7^zYg|WgDtrm2dy?(Yx$v-@eJ4?ci{V3Y zctcV4&6Gk$=~hyy9eiVuV}s)peq+1|gkRXQNf_P6|Iq{ni#UX>n}Ai=SBhEb083-O zE{Ss+HKkNHi^ur6E)%wgdtpB89n^yj{cxBKE8$F!zBqO~EQMQZx1!jmvrHaD-{Sh!v^cfzh_b^V4zg_F366IjB6dN_<@3g2-TH}I`F90uN1?7%Th y;z;>k#=Ls^ysc^z*G22WH{exyqGh=Lm-qu$0jS%ZqZ^h00000x7k+! literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.092.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.092.png new file mode 100644 index 0000000000000000000000000000000000000000..1f81b3d4c8d70a53cd239117bf65bf84faade4d5 GIT binary patch literal 511 zcmVz)W2$!Q4j_2-)>Cs&qj!- zL4<{XU@TIoU@b^GZ7j6aMoX~}L3{zhLeNf7U%^fcseAwtML}33K|&JI2%=Gt9E-i1 zd?uUSEi4@P_==f(&YZb(F8?@c+a=P@4dD9bR^t zsCU?K6fMjTv<~Z-USI-a>wwyT<5)5{SSNns7YvJ7o<{_H;nIerLE>Y&o?>RoScEVJ5r^ zrwU1JQ(e96-}SH*u5Ih-0@@7E%0qC!_;002ovPDHLkV1j7# B)(8Lq literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.093.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.093.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f767556f733ab53f0e7d58ecdcf75bae43f5b3 GIT binary patch literal 514 zcmV+d0{#7oP)T)W2_!Q547V*VAuW{gJ4F zQiL=_LSqq=!D6!*Nouk*f`5RqR*SG&Z8lPaL?RZ1NQ59FVNpeq6a)Pjo?E_cpKnXj zPjd4l=ehTtbI>Tez2QoD8g`YdcT`vt&V;G3e@T{MPk2){wU&dmW!fF?hRX}il%GdRUDmAxYdhB! zPK39ihridVuoExw^Px#07*qoM6N<$ Eg76XLF8}}l literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.094.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.094.png new file mode 100644 index 0000000000000000000000000000000000000000..366156edbf4c72d3448bee2f8866b881c89d6eec GIT binary patch literal 502 zcmVT)W2&~Q4q!P&wGiS}PXzVlOBbf`zS>h5tet3oUF?h!G4Trcf{mDMXE+2=Q3#EGC;D zyFvyouedYcd*;r$kA042P(r#ny}UH!zkvlA#|fOoEDm7>Z?S~6hK+%eLlcgN$Kg}> z7UsjV@Gh)}*WpGO8wPeJEQG~yGfah%(AM{KcoJ5_y>M`lvV|}gW(&~lkk<)U!b-Rw zIy(V7)#hTs_8eFk4YvwznY2gB0SnsQ*B(X0Za{2x2diT*GotT z+S+S$t?>ctgS@tt>AkL{4sQm+B)%FR){9^G-46^tW5$r}_6eD&`Yy0qT*MJwpA8Fb za1n3tW6MrB8eWB`>7KY})F5ZVS`DV{Pv}i-HCzn`2EdNh1DFrfyCsf=J7w0}<+HW` zz15boxl(s-o4P*eM7SH4!^`>!T&UM@DLg39d^kJQeTVTn`C(WJUkdU)JP+5x^iIll srPs+VMs+b)V*pIQ4|H>ZxUk@P0%2s zXs}TWMG&#DF@?b(0Rtjd;v3`%1X~+l!bWUUs7OE%R1gtGY@#3{LgEh?5DS0evY3OJ z;f)hR~deSuNcJy_TxULvCwT>p$eD6Lbwt3hQ3v2Ae;*?!{acTHl+nT9_GW9Fw_cM z#vTqY!mTjU1{x0c!fe>qDxs5fEPM)QJ1!5$!sl?hyyLnR`or}w6E-y)Rk&E>4)j9S zn41b;!XV3=RM>~tYM*VSKH`_!W-Fxq)Lgsws>)ev5(aN^zy>52qCI8)!(YN;%(=4q znO;9inLm$Nd|%NCTf*(|AnaU^sn}+!IAfyCHhtlEco(jPku{9nA5Mf<;bs`>c54+T z!~1YI94*7mUvDr>hc`vhj^@Q};ZR`=S8)i>@Dz*ca5#m{m{AAFVly1pim&ZBf^l_x w4XfkpkvhWW@MGQhYJ0B+F8JLwuKq{;0egO?;-C(3O8@`>07*qoM6N<$g4Ph%O#lD@ literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.096.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.096.png new file mode 100644 index 0000000000000000000000000000000000000000..275116e2f8e722942c24cae745a8005ec398013f GIT binary patch literal 1017 zcmV`dz*(L1oBKU8XJ#({GmB;$S>LN*4i;l79^x8?Q3lyu zpV3dHl{v}cQKnXSSmW9d!{1U8Z|L6uYJg0`a%{meJVn`ns^K^e<3=z#&O`Jut(E0v zk{e%(*YvLeHDEfi7prj!M={s{=|DHOp$*${GU~9%7@)IO zlzT(04tXle;%F;_qtt4iceH5j&d6Am9;p8q+HVLziq$jzRtW8?79@nv}NTw$T zlE=xaqy;X@j&nt=ryAw0fl99JlPxJ@?Aj%Z^KyE%$OGr1eB3Wr^~sirU@FPB+h!-cqB8DL&^2zqh47#SJbvui}GGouIQC-(P#W3XH<*Yp@Ar`_sNeY`pAOhO0qwh z(#+X7sIKHrvg3ls3kM>voG)^JubhNFV?cIQqrB5!)OMsSpcr%JLoC8RJpU($jS72$ z9;{CzA7|vEEbUt}DShNmJQ2}TWURl`$Vlu7~nE4W@eqpmQWb!aCY?%0KilNVgp*8QQPc6gvljrls0wo?{mbWy^ zCf1&^ZN%(fG3$qS)CcWod#?52OQ1%Ie!~LH%gH+pbccK}>iwUE1v3rLOF1e1_e81e z&NS3o56Eke`WEhElSW^egiXUnoE*`1L%QFhZPTSm>c3%HC1PV_ocxNB@j!QR0vphs zukXEKSsx=i(S>90d3ZY_PKekrO!uxv88@>&Iki@lJ41BgnDK9~(N{W>)5+yzX)#P6s786Z8s+7xTzXYb8K1sgvgnhY{Y7odxuP8GFLLYHPCd~q zo3GwmmY^3$aMi2fx>7x@-PnzT(Fk|Ss4_o7kH{qG^Di{F5wST9$VYg9+juq}W-L@cl{V(qm|s(y6DsWmk4hd?xP69a nO{e^1>>XM`GY|h#{~y`kr~{Np0VawJ00000NkvXXu0mjf4uRYU literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.097.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.097.png new file mode 100644 index 0000000000000000000000000000000000000000..bd039ce820830c10cc2b3d6d1791f112f687e091 GIT binary patch literal 1007 zcmV6F$OB1m8hK@+5f*q~Jn9q{T=C<-O7(C}>e4 zWTWUbj!IG{{+XHko)-6xU2ikf=&FA3?4B?0m*+X}IS>EGB$349^BF1U#811a`SA`s zi)C1XK8)fjF5*^D&Lr?X9rt;5+~l%~jwJ!dHKCf_D&lg{?qNs6R5*`8cWK5XpE_*(W=qpa2f#qtrP^<9d*D6iWO^ zEUx(VW$E%5*F(&S|EN)tKSo&e42vHKX$URC4Re>7$~|Jd(;q8C+<4=$c=t;ai&}+J zqu~vB^p4z}a{hgbe<fnYG$~(c4`*bY-vjO;~gBkCw`WOi=y0ldQN=CCi)}e9ht}0Qg0U; z!>8DcSCh)W$SlAC+{Vdko*FG9KMk?Dr&53QxSWO0IKzU8qC9}xh2rFNb4}8n989hx zZ%=jVwpAnxlcUMaWYd)VaaX!)Mg3r{D6gEYDDGX)AOST>#+kHn=%ua-@KwDIELY9-hFGnFxJ!Une`%fBpV}I z_;foXk0^^{8yF7p5I^JJ&^)b*#ye<*zu!X_FfpCT!+ge>CSPGin(QlejN-x#CnmPq dIxGL5$zL{Om2bQ{7|8$t002ovPDHLkV1n;6^6UTr literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.098.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.098.png new file mode 100644 index 0000000000000000000000000000000000000000..1816666127b6b2a1cac8858d13c79d5037f461af GIT binary patch literal 998 zcmV}72wZSUFfX_%IFQY`z_Mo~=oL%|UI;prZA{1? zdvYoEFdutzvxE)^c@epg6_F32C`P?y3lp)07bVmowEd*AWc?YLtAf31e55XD7gPi# z!9gJ(LH#KiU7bXG>n0+-Tfef>9$Toy7D`Xi!FowP7mNrV2|lY^!tJCw1@8nGe&P2o zV$(?3!lS3?qxh86T4(IxU77U@MdbhbLGZ0$QP8IkUDXV!8-n2q3nyX^i)E^P+ZJz# zm&cymC|ejVp&Vq1v!nSMSOdzIwsw=8cnH?z%y&wx&66t^v8M4!2oHhpfWjsrQbKLO zOPbJ^EwKo;nrE)t;N`$B@e#R2H(LR|swD)l0_@=ox{LJ;IAmyjmBV9#_AeP|8b1hTa0n4r;Pob00+b2Z>Na2@CZ-U82n1>i8y1N;RH0oQ={wdN{h zqg0Q}a@R4sO!ijBGr@vMn|PUqqTtth;5{|w+R&>=g{lKM2^<4jNIRhdJO`!?s`c89O?E1_}WLXbjmlPm;rsUe66F0;rc8|ltY-kTH&G`LY) z8yXib5{#3&utaCx+~eZiNhir<5_cYWoBQtJo$uW5JNLmy2HWk0AOa2mr-4DB6DR`- zun1HP{BHai6ny~)s&Lwz9~5*Nl<_X9!D0-R32X;{hahEZhk$dyWuOAQ22!8{I0!rg zt^={b##X-UcR1wn=PRJ87Q2DOvq+X6jK{b%$G}O>{ry@ zOi*4hDOeI57q}gpw(jo;Vpaqvp75kCaka_B{89-WpFl17Mbr_avDo>QgvtqRivIrt zM+M7*tD&J=A~@9++`RdaSKlP&mlLO}GiXmfnNw}C`Ni1PZq_-CRSW=qz+GBQPaOs# zYxFyU9}JEHeR%Hvv=2U*o*m3hSA9 zdt)4g=P^ci0Y2Xp6wnR4VgF+4NDWfQMge&9;|KCBbGhcJbTtYR@QN&BS~g=7bc1qL zKKlzeIQM~kWk%#ap>1tbP&lGLfdX($EfRbi3>X6alk(-fj6xoc?U{UD|n zm?XPaW;a+^HTfy9krd9h9(~z7^vW~|ysp7)vwMw@z_&u!ofq_mwR%Fk5TN~n+kzK@ z;d+S9peS*=6`Nm~BRyZ_-`*J%DJ1j+a(|$F3H2vVw-e`I%%Nd5glMzNwFejjE&-2# zSzv+e56;AOMS5^_b-Q#p$=zGY53c#Bw*S+U~(yYW3;FKt_9 zwfY}&WX)L!f*kOUEFQ{a`Lk>0Od$6ybbJa0sP;PYE)D#@q5LzX+r@m8cn`V1lN6mq Rkq7_)002ovPDHLkV1hEft(yP< literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.100.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.100.png new file mode 100644 index 0000000000000000000000000000000000000000..2610ecce883c61858c6de73616264b30f6b54827 GIT binary patch literal 993 zcmV<710MW|P)E`lO?og? z8U?XRdT^`In?{7Tdq^)PcnWy&;7Je^FP^(MJ$Up|JV;Pbws_0MQ+8%!n-Gl$DO!>c zNOK5^DGiB9Vdr~#n6Jx_?6RAld|(*Zd7s(md)|5fz$XUl6d-W9I03Tk-W4jyeG~ZO zO}@3|w-gja^Z_S%Cu(aC0fV_OM*W z_VD)zQubR3xC@*GHiC$4;4m-@ya%2DcYv+DV?tJkl8n1%I*ZuAm@{l!;xK5~;Jr6J z@!s7j!xrrvQ}*PXU{NqD7!^bUm%9!LZVOfg6M}=`5D3|GbS^Q!n3!hkXtatVA@|=k z#m1r7rMF|}S7Vn>Ore9>SI}C_kYGXZP;fM)u2o!*U_`JixG(4rVuoV#3yDh~PNAa} zw1*F}DbzEKMq=~JiPQaOto64N)F*f>m=_#VhYvnDcUkaGP=3Z*f6b+j6Z7+RbWE*I zokJBx^+=Z!=ik*(c~89HbV$RMR?f5$RS--HCT98T+t~Tl8jUMz>C9fdK!wCKS$CQc ziXi-PaN}#BA9!luyLlmy0*}Cc^!$Aq(f^U?sbO95Cm}^Vk~H!X4m1Uk2|58R0b5;) z31?vithdO@u))&iKKMU@1S>Lnx3dbSC-?j_V26D)y?_Rg8Xvy^cEK_Qo*i?Q=-b*CG@qGHPq9K=kqeLOK=PfWELG}!jk zg6l!lJ;6Y3WLUUIf?>go;H{vP8y&9Z((AGFYq3l3)zN^Et7K!tD#%q)G>wK6(@bJ| z8>3P_#jS>G0k{g>Buh(`Y`AU$M}P}J8F&R;0~Yhc^=DKlIj)*?Q{ZG)HB0BPXfqN= zQm+d#$|idyaqT-;%&#NuQW60}z!)$}HvNla>qk9^oB=+x+Kq&wX&CbOF*6%AC}9*O z)-lynuPQ_{Kfs6GyHTfk<;cY4<5IwPv!qp!8-=JC_`d_=O@8|&?UTa4(rC5Ti4LPP P00000NkvXXu0mjfk%PY# literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.101.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.101.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c15e5c018a0e1cb34db86ee05d072619c1a5a6 GIT binary patch literal 516 zcmV+f0{i`mP)T)H`cbVGzdg-`QMtgEtUG zgOGrNplJ=LSokSy0*Z|wR$AH#UJ5^e78aJ4f~BC1*l0kokrWXLnkZ3;78at9#d(dp z?z%Zb1`Y?#JM*7s=AAigvQ_^&NPX5q8+)-0@9_~oDtF6}hLhoHcpK)!(G00l7!NnXyKt!}ZH21qX@#lqAbcp5^eYV` z;ape=r^4uv#8uc`pz~pBkke#%5$=XggVt0<=}I`?r!t%fU&GAMzVybl!u9Ypj8Uis zFoR{hsz?)H9qMt3-MS7`11GVhIqbKs;T!gK1K|^PYFKWUbueDy*MY%n?8lC#JuJx& z6_tO0rDqG};~YjB0^2x^`}p2-658QTSO^CPuy@kx_Ve4|FK1zW4{3TiNW-1h}UKS0000CkA literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.102.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.102.png new file mode 100644 index 0000000000000000000000000000000000000000..63d091ea8b5bdd0de9e3b016e15f302784d032aa GIT binary patch literal 511 zcmVT)WL2|Q544U-?-_gxYk%M2KS$NH5n33)8H{5e7Vs3a_)(Fbz|?Can8Z|BUcqBs?ZKs!pCyx zj&8v1;dYo0#~V-nmA|u8xKO&N{!ADTZ^G5k-VD}JZC`j1Zf^J{oDZMF@P^Zxp{;N+ zyjp9!wYGsHn8$~1a%g6nRZD7k9av%)zSuf!Emq4j*a-|4v0snN=n@0!`7N&lON(=A zL62>9hV`dTszj)Xj^HVHgJR-#MBzortjT zSyPm3uR*#{tY`DSy)Vo*l1En$->758((F?SYbD0E{o@3-sZe> z<|w)9uD9p8-|PN(uKVU6qci9-<-S|39+^Wr<$E~76oQS|iwSJS2xjmQckvRl3yJ#( z!!n$}1#G}Hp5c29GJ#dNg-Lu_EL)))&V*0lYS>iInl>8FhPUB*Sd+F&tMkz?6V8WT zt7EMq>Z3H_ue!{;#G7d-3_-@>lNGHW3n3De`R$N&HU literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.104.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.104.png new file mode 100644 index 0000000000000000000000000000000000000000..094d1fb6c7a469b422beacf0dfec9f16df22ee45 GIT binary patch literal 761 zcmVblRs!vQ5eO~dGF@srC1jc z9cn2xsQ5&%Iuu;}QAzGp@CVBUBNkWn~*g?;B|NZX$zIzVvkHu#5LqkIvbz>tgq*bCsBh}@0EVzY@vA^;$j^H$>p zkx1mEZQG9l92Jo(VHoxRIAh!PX#i)9F?|5ukbD>f!5yu2-J@y;?CPiOSk_@&B z0|1h+EUN^7j^jkCK+p3;M7{!OOQllH%)UulYl_Go02_ruAzuY*t;HBK58y~75@|#8 z1l6g0c`tz1nM}r1fdC{7!!&>|N~v1|0|U`*yv}l6_XL3R#+aG8xw)_wi1qdL6_O7C zTq>1HJ-+YT&0qkSPN(;g94GlU8jZe0*=BV~DJNipR4Ns1 zX=yoZj2Q>8OGNtO@%ZP8)i(8NaB#4-SS*f^90Bl2M4kh9Uv@wTfKwvU4PeO_b8TvB z>LY4Gux0bL*4Fa!@-Y#)0l)*Wv)rCMfE5vW6pO`@iA17=hD0^}O%dVn@UYt0*x0R< rY9(m_$mjFH#H@&00000NkvXXu0mjfaz9bT literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.105.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.105.png new file mode 100644 index 0000000000000000000000000000000000000000..617c81e67ba03c3c6a123319788a144e13217ad6 GIT binary patch literal 906 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFdvmY>$qOIVV}KM(v6E*A2N2Y7q;vrJoCO|{ z#S9F5M?jcysy3fA0|T>;r;B4q#hkad_O1(I6={2z|JK;CGa)J2!{<+?&IZGcM_q)Z z7w_G8 z-z9eb>1&rvzV{vIa6XstYay$y|1vw-t8#PBj~~-j%6ES%UB7czh_){S!#uC0`#gT# zje2$QW3KqDyIVt^=3H|RfB&cE+w9jnbxar;DzwD!{dqAt#WLFa{jZ|pPuz2tto~JX z@1^(7J$9d485m@iX#f0u{^9AkX$%Y>?g#^etw(?s#E;;NuuH$Cm>3Q`jFR8~Wz*VN z|94KsFZWG9_g3|EbGkh*LxXeJ$@QN1>ngU`+3b7kRJ_*e^3>w&YnOk|WM??AaMhEi zOU}uL&b8Y2vtNyYLAixi#Q*tkCvV?qlu;r0>V z4LKMZ4u5`;Hf_n|+_!oDPMbG-e%-rx>Asq$|Ni=K-yZj>wugn`fxy?>S9jj_&h6I+ zdP;Sq=Uc*t>c__!xfE*WH)p;qAT3+7-u+lGiAg$^ zvYLPMyX3tU_rf2(a9EZ7wF~=rbRgICb_=0v&2ICT zW{=q!tDuG>h>m5}2>FxK7T%cYD%BbE`f46O5RG+L_3X;~&@zD_hVVYM?GipcPUJmM zR5k7*_FHOc{bvCvFD=zJhUA(b9mhu+1M=h{0$r+HX3}By7#x=m_Dl9x$OdJB!zwuS zi<&yFP&rOHd3RzEpZr=rqnwx;ePrg2md>hLReL zqMUkILB-X?u-TvQ3=XB`_JnjZv|WErZ|J8Yy6!+ z;Zo>!m}A+s1?vG=7P|4@plc(9;iR zv?TRK7uUSJg(+4ytNmyouj$N0N4iTkBJ|`!iBKu$NOJP!qpiLiOyCh`PF9l#A`7$o+RABPr>__i0 z_dzr$r>g@yT382gNpOECEU(HGCle}D74hwP^H0QF9ce%9rqR75Vz&9NAJJ@JlR$ok znnAx}EaDD#C8~0UEXmTr<8|UwD~1+=ra%H^29U>vI&tM4C-CI9*Y^D!?1z=}3hSJ- zwa^ec9~oA45v~>|(7X702OQmFw>i>Pxktvs$_}@?hK5_&dOz%*J{IyG&yjZ4K!@-+}e)fzy2jz&{*-FvSxAg2dkqXI_UZ$!W-Qj+x z8ubiqg_c_{+&uecP?S|4@xP;V7Uo+MPYzgfaqD!9y|=&yz@ZcOj57kQjczt33NkNr zW~fn49N$#Fj|RY<*tRj9{rwT~spjAH9g{5c@WB^BQ@t&ZHGx*-e&opF&iSwM@M5hg z4jW9&Qb>10V#g?RWMp30K!#+tb7j0OnwiuThQ$x@p!5a42J*=lu`Ni(=Cc0#XU{JO z`JU}K<3IM*zft{1OKfs09lcI^#srZgHI6Ex9NF7@hyU7^xoCuzkYLF`^Y)t}MHTf`WCf(xV-4G~EcnM~| zRuPZ#)IH`KYl>jM<;W#9Mo!MCaoWQ^#fCqirUB(0LWhSJb)^WRbu2AaWc5^Is~vo! zDrP`gw>Q}blksHMtRCy#ER}~L7PHn`lzB%{x)az+DKjM(capvFQM_u(uAbRu4u*OC ae%hrZc4NQva~(7QfQapku$s`l$NmHxmIP-2 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.107.jpeg b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.107.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..78866ecd90aab9cfaf95a27ea00628af443fa61e GIT binary patch literal 73534 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 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.108.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.108.png new file mode 100644 index 0000000000000000000000000000000000000000..1402e8283c9a1cb0ac193f18190105be5655c385 GIT binary patch literal 923 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFdvmY>$qOIVV}KM(v6E*A2N2Y7q;vrJoCO|{ z#S9F5M?jcysy3fA0|T?Ir;B4q#hkadHg?S^6*>0sdyVyOH}k-Ycl``Hre@}B3ECjw zvOzfCAwR`YXAc{<_rbSsk3?P0^5S-sR(A0%yZh$J@94KF&6;6fQf7Rxxq4=1V#R6s zn#l|d4$WSZnq_?Q_x-rr{ypfuPx7CzVA=Dp7SGj&h5O?&F2Thl`OCKVbhtM}JPGB8N5 zb$i$I}i)Gx{bjpLEOnY3J87%nS*^p{d&^?aiFE?R=ixTxNz3_AA-%aRMVI zii2i^&bj?7RaS1S`1>?}`~EvW6V{{)0RuM8ZrA2e$&;JHwtrq&xzf#Vn^CQm?&pui zryIt>p zp#OWn?)m?1{ykkf`Kt~KLxS+zc-y^2-+yF0Z+$+0XX)Ex5AT+~X9VUZh9Bks*kT1I UtbD!iKpBYd>FVdQ&MBb@04Pgp{{R30 literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.109.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.109.png new file mode 100644 index 0000000000000000000000000000000000000000..a16bb567f96058a3728efffca93b803f9aaadb54 GIT binary patch literal 1497 zcmd6n|5MXt9Khcg8slM&c<$x(Y%NbCom(CF+U^S5I2I|!G6Kr6_yb~+0hq

m4!CB;o@Ra^Lot!SW|9ye=u1cNuH+3OGZ3z}?O6o_S9ujz6+ z!z0o!w0*O`Sd40I|-I~D~ zfRqeO7i-hlElvIXcZy`W!mbE9{=Ibtk&Ucd3-Y8Vu=&bVJoR>E6NA%4{}hRC1n4L8 zX3&aF@M`A&5)bz$b?+)z3`m8de{*aVHoKNQ1CwL4LpN4O$odIi!`{EP;Bw6Q1X7lc zrI|0c+})PnBccK@9OIoT-njqvb9fzSZ3Hk!{Ku$2RB@#AJ@*;q2j3aC11J<}M)FHK z*0uzJ;F=*8^^ZS;+oaF!+ZXiP%IY59DwNJ)Gf$iFqt?AJcYsAqh~I}BgL-bstl>~{ zdLuBnC&?(JYcZxe`~I^aj{b?SMtkRag-F`zGF}4uhMldK<05?DAw;!>zw?@Reon&c zmE2;vwh_@hO%V_2f-<{NbiI8SiMt2y)Yz22RGO$5I^7&c5ujo zI218Vhl4oO(_NXT8>m!!^Gq$|O n*?`pfY*-z|ecT%k<`bTug;Ng6WU6WzpUr?CW@KqHOTPRY6u(Zl literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.110.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.110.png new file mode 100644 index 0000000000000000000000000000000000000000..705787de28bb62b212e100b8b7ed63803a41e428 GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0y~yV44MFdvUMG9#0vM24Co4+b3f9bEg?`-_9 zzFRVziJ>4Y>viMceirZs&}{S{B-BvzxDRFNj6YEZ`)EkuU7{rS(!bl zdi;Ceq%YU*|NZj!t-gNo-o1ZB85u0x``_EvObW?;-K{>u+}U{UlGVR%-+6y(tF$iz z!@p_ASN_Yk(Nn+4!q5;t?*a=$LJKX3BZelct5&CM56fL1!@a= zb;+i8yYCh;F?{IPx$3R{deW7`vQw=L3>8za^k(}k>aPd%;9$Nx%WV3@P@)t@<6`fqRgTLzMvbUXTap4R&LX|@au=R!l@sr-GmNoT!m z+CM9Hh6nXQ^}ke27#SoKX+~_6;|txZdQ*RHH2=HW!jBoXH`MQNGc*`)x*w|h^6$3j zKHi=Ce#GRfL}s5{{`=0)CrRZ^yug_Ep6j=CnrdwO&E5-d;xAR+I=Ok(pQhrI3Ie0bsHUFVjX&t_owqdk4+{ga{Lk2uvB7>euIRnIo3xEn0r3(O@9p00i_ I>zopr0LYk66aWAK literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.111.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.111.png new file mode 100644 index 0000000000000000000000000000000000000000..05c69a561ba98b48bf49093b174c864ec48377d2 GIT binary patch literal 1969 zcmcJQdrVVT9LGL7l9O}3=X1Wl z-}&}5Ied@pd$s_8JrO6v&H!Lmi;tJAE%6p+9XyYB<}6YK)fz7x>vNa!xlQ&-8Vdls zJO5O|51w|809a8X!akwq)~(Hk2vXS&BMTzUkxAa2h`oMsCw}#w_Y?|+?{wIwcnz8r zTGaHLCzZrr@323#6?*T4`Hwfh^Z&rj=lklwp7g_I&*};`irtulTH$RKRWji3bXK<@ zj&{IRaCK0O zk<;q}OP|mJEI@L6TH@+@nMgkpl51jbu z-(2QeMVGO>s-ibDgIB*MQI9f$IR=LY8!%*Ae8MQ&!jSDzm@b=mJncEYLQ~`!4A|}b zTk>Z`0Gz*HuPnv7#8<~?{sb_;JNgSVV1K}u0503(aKo&l0C>OTLjd-Y_JLw+e9Pk{ zcg=wt>5Z1HwpS2?MBY-?APm5RpG6r+22X%h_7`58Ip{+Gf7N9*FP1w_thdazi8Rg( zb1*dQ1qDeXH<}sa0L<(5?YN|4?i3g{=Gaa&8jxmh_JGr5$GZSL6p`uD=c(FWmvjSG z)zyxc!LqqL*)EVQs6>ra`gmtT(m6is004uxb_~wWqJFWPW+XJ)8NoUWWGrtSrezcz zlBT-KD3Sau-@g29Vl}bV5)6IgjBP51S97lQXjTQv6rOx;x>|q9ks*D8&8c=>GTjDiB*%AKy*DMt>=I41weOZTOO6->U2@H_;KK+rCH-o zeUd@hqmZe5TwRQWN>@B^*2|d}uxTAtJ$Kjw49SAZe?wtUrKtF-GS*wA12r0G`&p1w)b>dQK(bi5OkZ zp1g#=B_CEIP2L6}Ix^E0Q0sw5!c=45l5$wJof})AfnZ4!n=QeUMtpb9TJzF&mN*t=9+|4dqlX;R1`RmL8Y{XAAt|Pw-D;2Y~(#5gTk(n0vW<=n^=PUZLH5^H60HU18k7ZD!VsyTC;P|A3kb70L=^=23@IMzs Md`b>ONy%UT4K@F}egFUf literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.112.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.112.png new file mode 100644 index 0000000000000000000000000000000000000000..12837903841c0b7fb73e933230f326e11a6152af GIT binary patch literal 1442 zcmeAS@N?(olHy`uVBq!ia0y~yV44MF&){GKk}lDncYzd3v6E*A2N2Y7q;vrJoCO|{ z#S9F5M?jcysy3fA0|Tpzr;B4q#hkad4A-ZoiXMOX|5iG`amx*dCQ&wR;guarRTMT( zNO+F1%)IIr;g@dwa_^ zpNhY?SD1l8BEa*Lqg_PZzhCk7)7O2UykynuJ=u&51)f$n|9`)*|NqnQ`d?cn#Z7*) z{O202uaiUe-=6zEXsi9}Wef~4Q*KpFKQ${Z&hp%~#|y3hdxe(g*8Awz-+aqoJI|Dn zVTZ}>pn8v2Z&gdPPJBJ~+gbJH+Wi$Do_5dwqb8rXeZLX|!}J%AuixK2KP30{SN$30 z&c<_>tp4?R&&8?ycQcq6KDgNVeSQ3K$DCB4Gv`%12{SYZ(u8>Z^2*=bN%_;R9R9qP znc;xytxNycoHM`r^Pk1;eHYhMty~p%_tN)sn`9Xn#MjhKSQY+y!yQXMxt}HXJn#Mk zMrzEi|E{UI+1Hbe85k;ePT1;Z{f{Y@8xB)Z?G^t&YMAU-p=6$ zCc4UP>();CyKTK4C_(L>7IMvbd$b=g@=pcrE!m{!IX4aL^5>p+cN`M|I)_J)7H$H0 z^w0fmDxT`UU*FU;vHtlzXy^QM<=gj30u#VmtNUtS`*Uxu>)RZh5%%fPwMx~gyPrq$ zGcc=^@a@$^+p4_|EI~$m@LZ+R%b@Fc9 zGudE;!!vSGS8GVEA*FoX;mD@8`*Sqfb zgMa+>q4w+cedPs~8a{XP%YJ38yw|r_+I&{2{>i)V_JoFda{B_)L5TdS)m7ok*FT!7 zGWW{-`0D??*4}?#tlGYMYgzkeT~3ArOJClbrnC3mzWaaQipSTN*mrt+0}EA#2Tgz2 X|13Y2Y2)`d62$j(^>bP0l+XkKg_0Wg literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.113.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.113.png new file mode 100644 index 0000000000000000000000000000000000000000..1c640414118bac2eddac5e1122be60f6cab439e5 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0y~yU}^`l`8e2sWUR@y+dzt?*vT`50|;t3QaXTq&H|6f zVxXEMAj~*bn@<`jc*fJkF{EP7+iQki%!wkc7k~GAN-~*E6Kj(8(9IAmaD8`lDTi5D zQsP6ln1&lmE+x%KUu?flLHLB_)#mGWK4p6r?Z2s`Z+Bkq(k)*G1`D;RTc%6x%isRK ze|O?LQw9bZzCsQL2X#J1h8IT^85rhTurMqT20FClkpM%3p9~Yjg-&M%hFz|cV)m`e zvRS_}RQkCb3&R1qts$$HUEQ$ei8^EjBH!-wYO$Pdl!PC{xWt~$(699R?YH9!g literal 0 HcmV?d00001 diff --git a/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.114.png b/doc/protocol/Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.114.png new file mode 100644 index 0000000000000000000000000000000000000000..3f83df08c7e476f3dadb681de468e334741bae54 GIT binary patch literal 4367 zcmeAS@N?(olHy`uVBq!ia0y~yV3q=6ZVon}$jMU=bAS{}v6E*A2N2Y7q;vrJoCO|{ z#S9F5M?jcysy3fA1B1XuPZ!6KiaBrZ80KAZU}(EI^NkSals={^6{{Uw+ZQ}Zn!{+N zwXP|Aj>2TM%!_WnTBhFpZdJbDEzj=uCkddL8+TsYb+ejZ~5hyx9=%4Ff^Pt z+MXL--4B%3>ps5>C@|*&kX_`&%)oGhlb3-(LEU6ja5O+h6T@gm7%dq_OU2O|VYD_J ztqn(O!_nGsv^E^A4M%H3n%0KL_pq!0>PT z;lw-psbP0l+XkKk^zba literal 0 HcmV?d00001 diff --git a/doc/protocol/PyroScience Unified Protocol.md b/doc/protocol/PyroScience Unified Protocol.md new file mode 100644 index 0000000..1fe900e --- /dev/null +++ b/doc/protocol/PyroScience Unified Protocol.md @@ -0,0 +1,1875 @@ +![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.001.png) + +PSUP![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.002.png) + +PyroScience Unified Protocol![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.003.png) + +REFERENCE MANUAL + +VALID FOR FIRMWARE REVISIONS 4.00 - 4.09 ![ref1] + +Document Version V1.05 www.pyroscience.com + +![ref2] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +TABLE OF CONTENT + +[Introduction ............................................................................................................................................ 5 ](#_page4_x54.00_y85.92) + +[Supported Interfaces ............................................................................................................................ 6 ](#_page5_x54.00_y85.92) + +1. [Serial Interface (UART) – PyroScience Protocol ................................................................6 ](#_page5_x54.00_y134.92) +1. [USB Interface – PyroScience Protocol ..................................................................................6 ](#_page5_x54.00_y541.92) +1. [RS485 Interface - Modbus Protocol.......................................................................................7 ](#_page6_x54.00_y277.92) +1. [Analog Output ...............................................................................................................................7 ](#_page6_x54.00_y578.92) + +[PyroScience Protocol ............................................................................................................................ 8 ](#_page7_x54.00_y85.92) + +1. [General Structure ..........................................................................................................................8 ](#_page7_x54.00_y134.92) +1. [General Command Structure ........................................................................................9 ](#_page8_x54.00_y390.92) +1. [General Register Structure ........................................................................................ 10 ](#_page9_x54.00_y307.92) +1. [Broadcast Mode ............................................................................................................ 11 ](#_page10_x54.00_y358.92) +1. [Detecting Communication Errors and Optional CRC ........................................ 11 ](#_page10_x54.00_y470.92) +1. [Checklist for Programmers and Available Software Libraries ..................... 11 ](#_page10_x54.00_y655.92) +2. [Device Commands ..................................................................................................................... 12 ](#_page11_x54.00_y520.92) +1. [#VERS – Get Device Information ............................................................................ 12 ](#_page11_x54.00_y644.92) +1. [#IDNR – Get Unique ID Number .............................................................................. 13 ](#_page12_x54.00_y618.92) +1. [#LOGO – Flash Status LED ......................................................................................... 14 ](#_page13_x54.00_y177.92) +1. [#PDWN – Power Down Sensor Circuits ............................................................... 14 ](#_page13_x54.00_y324.92) +1. [#PWUP – Power Up Sensor Circuits ...................................................................... 14 ](#_page13_x54.00_y485.92) +1. [#STOP – Enter Deep Sleep Mode ............................................................................ 14 ](#_page13_x54.00_y604.92) +1. [#RSET – Reset Device ................................................................................................. 15 ](#_page14_x54.00_y99.92) +1. [#RDUM – Read User Memory .................................................................................. 15 ](#_page14_x54.00_y245.92) +1. [#WRUM – Write User Memory ................................................................................ 15 ](#_page14_x54.00_y669.92) +3. [Channel Commands .................................................................................................................. 16 ](#_page15_x54.00_y407.92) +1. [MEA – Trigger Measurement .................................................................................... 16 ](#_page15_x54.00_y531.92) +1. [CHI – Calibrate Oxygen Sensor at ambient air ................................................... 17 ](#_page16_x54.00_y628.92) +1. [CLO – Calibrate Oxygen Sensor at 0% (anoxic) .................................................. 18 ](#_page17_x54.00_y431.92) +1. [COT – Calibrate Optical Temperature Sensor ...................................................... 18 ](#_page17_x54.00_y760.92) +1. [CPH – Calibrate pH Sensor ........................................................................................ 19 ](#_page18_x54.00_y318.92) +1. [BGC – Perform Background Compensation ......................................................... 20 ](#_page19_x54.00_y402.92) +1. [BCL – Clear Background Compensation ............................................................... 21 ](#_page20_x54.00_y141.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +8. [RMR – Read Multiple Registers ................................................................................ 21 ](#_page20_x54.00_y432.92) +8. [WTM – Write Multiple Registers ............................................................................. 22 ](#_page21_x54.00_y147.92) +8. [SVS – Save Registers in Flash Memory ................................................................ 22 ](#_page21_x54.00_y584.92) +8. [LDS –Load Registers from Flash Memory ............................................................ 23 ](#_page22_x54.00_y202.92) +4. [Error Responses ......................................................................................................................... 23 ](#_page22_x54.00_y483.92) +4. [Settings Registers ...................................................................................................................... 25 ](#_page24_x54.00_y85.92) +1. [E Environmental Condition Registers ................................................................. 26 ](#_page25_x54.00_y126.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.006.png) +1. [M Measurement Mode Registers ............................................................................ 26 ](#_page25_x54.00_y574.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.007.png) +1. [S Sensor Code Settings ............................................................................................. 28 ](#_page27_x54.00_y607.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.008.png) +1. [T Sensor Type Specific Constants ......................................................................... 29 ](#_page28_x54.00_y125.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.009.png) +6. [Calibration Registers (Oxygen Sensors)............................................................................. 30 ](#_page29_x54.00_y323.92) +1. [C User Calibration ...................................................................................................... 31 ](#_page30_x54.00_y541.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.010.png) +1. [S Factory Calibration Taken from Sensor Code ............................................... 31 ](#_page30_x54.00_y671.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.011.png) +1. [T Sensor Type Specific Constants ......................................................................... 32 ](#_page31_x54.00_y403.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.012.png) +7. [Calibration Registers (Optical Temperature Sensors) ................................................... 33 ](#_page32_x54.00_y249.92) +1. [C User Calibration ...................................................................................................... 34 ](#_page33_x54.00_y223.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.013.png) +1. [S Sensor Code Constants .......................................................................................... 34 ](#_page33_x54.00_y288.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.014.png) +1. [T Sensor Type Specific Constants ......................................................................... 34 ](#_page33_x54.00_y426.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.015.png) +8. [Calibration Registers (pH Sensors) ...................................................................................... 35 ](#_page34_x54.00_y85.92) +1. [C User Calibration ...................................................................................................... 36 ](#_page35_x54.00_y361.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.016.png) +1. [S Sensor Code Constants .......................................................................................... 36 ](#_page35_x54.00_y426.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.017.png) +1. [T Sensor Type Specific Constants ......................................................................... 36 ](#_page35_x54.00_y761.92)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.018.png) +9. [Results Registers ........................................................................................................................ 37 ](#_page36_x54.00_y519.92) +9. [AnalogOutput Registers .......................................................................................................... 40 ](#_page39_x54.00_y85.92) +9. [Resistive Temperature Sensor Registers .......................................................................... 41 ](#_page40_x54.00_y226.92) + +[Modbus Protocol ................................................................................................................................. 43 ](#_page42_x54.00_y85.92) + +1. [General Structure ....................................................................................................................... 43 ](#_page42_x54.00_y134.92) +1. [Modbus RTU Standard ................................................................................................ 44 ](#_page43_x54.00_y229.92) +1. [Modbus Implementation in PyroScience Devices ............................................. 44 ](#_page43_x54.00_y406.92) +1. [Modbus Slave Address ............................................................................................... 45 ](#_page44_x54.00_y85.92) +1. [Operation Principle of Periodic Measurements ................................................. 45 ](#_page44_x54.00_y133.92) +1. [Operation Principle of Triggered Measurements .............................................. 45 ](#_page44_x54.00_y333.92) +1. [Transparent Mode and Evaluation Software ...................................................... 45 ](#_page44_x54.00_y438.92) +2. [Read-Only Modbus Registers................................................................................................ 46 ](#_page45_x54.00_y85.92) +1. [Results Registers .......................................................................................................... 46 ](#_page45_x54.00_y186.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +2. [Device Info Registers .................................................................................................. 46 ](#_page45_x54.00_y709.92) +3. [Read-Write Modbus Registers .............................................................................................. 48 ](#_page47_x54.00_y85.92) +1. [Making Register Changes Persistent During Power Cycles ............................ 48 ](#_page47_x54.00_y226.92) +1. [Settings Registers ......................................................................................................... 48 ](#_page47_x54.00_y490.92) +1. [Calibration Registers ................................................................................................... 49 ](#_page48_x54.00_y329.92) +1. [Analog Output Registers ............................................................................................. 50 ](#_page49_x54.00_y302.92) +1. [Modbus Slave Address Register .............................................................................. 50 ](#_page49_x54.00_y657.92) +1. [Command Registers ..................................................................................................... 51 ](#_page50_x54.00_y189.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +INTRODUCTION + +PyroScience offers a broad product range of instruments and sensor heads based on its Redflash technology for optical oxygen, pH, and temperature measurements. This document provides details on the communication interface of all devices based on the firmware generation 4, which was introduced in the year 2020. This firmware generation uses the “PyroScience Unified Protocol” (PSUP), which provides cross - platform compatibility between all different devices from PyroScience. So a programmer used to e.g. the laboratory device FireSting-PRO can easily switch to basic OEM modules or even deep-sea devices. + +The following devices are currently covered by this document: + +- FireSting-O2 with firmware version >4.00 (FSO2-C1, FSO2-C2, FSO2-C4) +- FireSting-PRO (FSPRO-1, FSPRO-2, FSPRO-4) +- AquapHOx Logger (APHOX-LX, APHOX-L-O2, APHOX-L-PH) +- AquapHOx Transmitter (APHOX-TX, APHOX-T-O2, APHOX-T-PH) +- PICO-O2, PICO-PH, PICO-T, PICO-EXT +- FD-OEM-O2, FD-OEM-PH, FD-EXT ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +SUPPORTED INTERFACES + +1. Serial Interface (UART) – PyroScience Protocol + +All PyroScience devices possess a central microcontroller which handles all the different task the device has to fulfill. This microcontroller communicates via a UART interface with the outer world. A UART interface is a classical serial interface operated at low voltage levels, which can be directly connected to UART interfaces of other microcontroller boards (e.g. Raspberry Pi). The standard connector of basic OEM modules (e.g. PICO-O2, FD-OEM-PH) provides a UART interface. But also laboratory devices like the FireSting-PRO offer this UART interface at the extension port. + +Note, several PyroScience devices do not provide a UART interface accessible for the user. They offer either a USB interface (1.2) or [a RS485](#_page5_x54.00_y541.92) interface (1.3), which ar[e ](#_page6_x54.00_y277.92)internally converted and connected to the UART interface of the microcontroller. + +The UART interface of PyroScience devices is operated with 3.0 V or 3.3 V levels (3.0– 5.0 V tolerant). The configuration is + +19200 or 115200 baud, 8 data bit, 1 stop bit, no parity, no handshake + +Please refer to the data sheet of the respective module about the actual baud rate. + +Communication via the UART interface is always based on the proprietary PyroScience protocol (refer to 2.1[). ](#_page7_x54.00_y134.92) + +Note: The serial interface of this module is not a RS232 interface. However, the UART ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.019.png)interface can be made compatible to RS232 by third-party UART-RS232-adapters. + +2. USB Interface – PyroScience Protocol + +Many PyroScience devices possess a USB interface for easy operation e.g. at Windows PCs, All laboratory devices (e.g. FireSting-PRO) and several underwater devices (e.g. AquapHOx-LX) provide such a built-in USB port. Further, USB adapter cables are available for most basic OEM modules. These USB adapter cables are especially useful for evaluation purposes at Windows PC. PyroScience offers powerful software packages like the Pyro Workbench or the Pyro DeveloperTool. Please refer to the homepage of PyroScience for more details. Communication via the USB interface is always based on the proprietary PyroScience protocol (refer to 2.1.). + +All USB ports and all USB adapter cables from PyroScience are based on solutions from the company FTDI. using the so called d2xx drivers, which are automatically installed ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +together with the PyroScience software packages. The d2xx driver can be used in two different ways: (a) via generic USB communication, or (b) via virtual COM ports. All PyroScience software uses the generic USB communication. But the virtual COM ports are very useful for custom made software, because most programming languages support virtual COM ports. + +For advanced users: the USB String Descriptors of the FTDI USB interface is coded for all PyroScience devices and adapter cables as follows: + +- FTDI Manufacturer = “Pyro” +- FTDI Product Description = either “Pyro\_115200” or “Pyro\_19200” + +The number in the Product Description gives the default baud rate of the specific device. + +3. RS485 Interface - Modbus Protocol + +PyroScience offers devices with integrated RS485 interface (e.g. AquapHOx-TX), or it offers RS485 adapter modules for the UART interface of OEM modules (e.g. PICO-EXT in combination with PICO-O2). The default configuration is + +19200 baud, 8 data bit, 1 stop bit, even parity, no handshake + +The default communication protocol is the standardized Modbus RTU protocol. Please refer to the chapter 3.1 [and fol](#_page42_x54.00_y134.92)lowing for more details. Note, all RS485 devices can be switched into a so called “transparent mode”, where it is again possible to use the PyroScience protocol (2.1)[. ](#_page7_x54.00_y134.92) + +The advantages of RS485 in combination with the Modbus RTU protocol are: + +- cable lengths up to several 100m are supported +- up to 247 devices can be connected to a 4-wire RS485 bus +- Modbus RTU is a popular communication protocol +4. Analog Output + +There are several solutions available which offer analog outputs. Please refer to the respective data sheets for more details on the analog outputs. The general configuration of the analog outputs is described in sections 2.10 or 3.[3.4. ](#_page39_x54.00_y85.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +PYROSCIENCE PROTOCOL + +1. General Structure + +The following figure shows the general structure of some representative PyroScience devices which use the proprietary PyroScience communication protocol:![ref1] + +![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.020.jpeg) + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +All devices possess a central microcontroller which communicates via its UART interface with the outer world. The UART interface is the standard interface for several OEM devices from PyroScience. There are optional USB adapter cables available, which convert the UART interface into a standard USB port. These adapter cables have integrated FTDI chips, which is a popular chipset for USB solutions. + +Many end-user devices (e.g. laboratory or underwater devices) are equipped with a USB port, which is internally converted by a FTDI chip to a UART interface connected to the central microcontroller. Some end-user devices offer additionally an extension port giving direct access to the UART interface of the central microcontroller, which might be used by OEM applications. + +A USB solution is always needed, if you want to use the powerful Windows software packages Pyro DeveloperTool or Pyro Workbench, provided for free download on the PyroScience homepage. Especially the Pyro DeveloperTool is strongly recommended for OEM developers for initial evaluation purposes. The Labview source code of the Pyro DeveloperTool is also available, providing a general reference how to implement PyroScience devices into other software or firmware projects. + +The basic building blocks of the PyroScience protocol are outlined in the following. + +1. General Command Structure + +The commands provide the communication between the master (e.g. Windows PC) and the device (e.g. FireSting-PRO from PyroScience). Some commands trigger actions in the device, for example acquiring a data point with an optical oxygen sensor. Other commands are used for writing or reading registers within the device. A command comprises always the following sequence: + +- the master sends the command string to the device +- the device executes the command +- the device sends the response string to the master +- the device is immediately ready to receive the next command + +A command string always starts with a specific command header (e.g. MEA, #VERS, #LOGO) optionally followed by several input parameters. Input parameters are given as human readable decimal numbers, separated by spaces from each other. Each command must be terminated by a carriage return. + +The response string starts always with an copy of the original command string including all input parameters, optionally followed by space separated output parameters, and again terminated by a carriage return. + +There are two classes of commands: (a) device commands which affect the complete device ([2.2), and](#_page11_x54.00_y520.92) (b) channel commands which trigger actions related to a specific optical channel ([2.3). ](#_page15_x54.00_y407.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +If the internal processing of the received command causes an error within the module, the response will be the error header #ERRO followed by an error code “#ERRO” (2.4). + + + +|Style Conventions for Commands || +| - | :- | +|**MEA #VERS #LOGO** |Command headers are written in bold. They are transmitted unchanged as ASCII strings. | +|C S R |Single letters represent placeholders for parameters transmitted as human readable ASCII strings of decimal numbers. For example S might be replaced by 47, so the ASCII code for “4” followed by the ASCII code for “7” would be transmitted.| +|˽ |Space (ASCII code 0x20), separator between parameters| +|↵ |Carriage return (ASCII code 0x0D), final character of all messages.| + +2. General Register Structure + +The registers comprise sets of integer numbers stored within the device. They are used for configuring the device, or for read access of the measurement results. A register always contains a 32bit integer number. Each optical channel has its own set of registers. The registers are organized in several “register blocks”: + + + +|Register ||Register |Number |Type ||Comment | +| - | :- | - | - | - | :- | - | +|Block ||Block |of |||| +|||Nr. |Registers |||| +|Settings ||0 |20 |read / write||| +|Calibration ||1 |30 |read / write||register definitions depend on the | +|||||||analyte detected by the sensor| +|Results ||3 |18 |read only||| +|AnalogOutput||4 |12 |read / write||shared by all optical channels| + +Each register block consists of a defined number of registers containing signed 32bit - integer numbers. The first register address is always the number 0. The commands RMR [(2.3.8) ](#_page20_x54.00_y432.92)and WTM (2.[3.9) are](#_page21_x54.00_y147.92) used for reading and writing registers, respectively. + +The content of the read/write registers are kept at two locations: in the volatile RAM memory and in the flash memory of the devices. At power-up of the device, the register values from the flash memory are automatically loaded into the corresponding registers in the RAM memory. All further command actions are then based on the values in the RAM memory. The command SVS (2.3.[10) can be](#_page21_x54.00_y584.92) used for saving the RAM memory content into the flash memory, i.e. the current register configuration is retained even after a power cycle. + +Note, the register block *AnalogOutput* is shared by all optical channels. In this case it does not matter which optical channel is selected e.g. by the first parameter of the RMR - command. ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Details on the register structure and the register definitions are given in chapter 0 and following. + + + +|Style Conventions for |Registers || +| - | - | :- | +|*Settings* ||The name of register blocks are printed in italics with an | +|*Calibration* ||initial capital letter.| +|*Results* ||| +|*AnalogOutput* ||| +|*intensity* ||The name of single register are printed in italics with an | +|*pressure* ||initial lowercase letter.| +|*analyte* ||| +|*tempSample* ||| +|*Settings.intensity*||A single register can be also printed in combination with the | +|*Calibration.pressure*||register block it belongs to. In this case, first the register | +|*Results.tempSample*||block is printed before the register name, separated by a | +|||period character. | + +3. Broadcast Mode + +A special feature is the optional broadcast mode, which can be configured and activated in the *Settings* registers (0). [An e](#_page23_x54.00_y514.92)nabled broadcast mode means, that the master does not need to trigger the measurements. Instead, the device triggers itself periodic measurements, or measurements are triggered by a digital input at the extension port of the device (if available). For more details refer to chapter 0. + +4. Detecting Communication Errors and Optional CRC + +The protocol supports two levels of communication error handling. The first level is realized simply by the fact, that the device always echoes the complete command as it was received from the master. This way the master can compare the echo with the originally sent request. + +However, the echoing of the command does not allow detecting potential communication errors within the output parameters. For this purpose, it is possible to enable a cyclic redundancy check (CRC) for all responses from the device to the master. Refer to chapter 2.5.[2 for mor](#_page25_x54.00_y574.92)e details. The reminder of this document shows only examples with disabled CRC. + +5. Checklist for Programmers and Available Software Libraries + +The following software libraries are available from PyroScience with an implementation of the PyroScience protocol: + +- PyroScience Labview Library +- PyroScience Python Library![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +The following checklist contains the most important issues to be considered for an OEM implementation: + +- Configure sensor specific constants registers marked with T . PyroScience ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.021.png)offers many different sensor types (e.g. microsensors, flow-through cells, sensor spots) which require a specific configuration of many Settings and Calibration registers. It is adviced to configure the device initially with the software package Pyro DeveloperTool or Pyro Workbench. Based on the entered sensor code the software will adjust all sensor specific constants. This must be only done once for a specific sensor type (and not for each individual sensor head). Study for this the sections 0, 2.6, 2.[7, ](#_page23_x54.00_y514.92)[and 2.](#_page29_x54.00_y323.92)[8. ](#_page32_x54.00_y249.92) +- Configure the sensor code registers marked with S . The respective ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.022.png)information is given on the label attached to the sensor head. This must be configured for each individual sensor head. Study for this the sections 2.6, 2.7, and [2.8. ](#_page34_x54.00_y85.92) +- Configure the Settings registers mode, intensity, and amp in order to find the best compromise between low long-term drift and high signal-to-noise ratio [(2.5.2). ](#_page25_x54.00_y574.92) +- Calibrate the sensor with the commands CHI (2.3.2) and[ CLO (](#_page16_x54.00_y628.92)2.3.3) for [oxygen ](#_page17_x54.00_y431.92)sensors, COT ([2.3.4) for](#_page17_x54.00_y760.92) optical temperature sensors, and CPH (2.3.5) for [pH ](#_page18_x54.00_y318.92)sensors. +- Store the configuration permanently in the internal flash memory by using the command SVS (2.[3.10). ](#_page21_x54.00_y584.92) +- Use the command MEA for triggering measurements (2.3.1). +- Optionally, enable the broadcast mode, so the device might trigger itself periodic measurements (2.5.2[). ](#_page25_x54.00_y574.92) +- Optionally, configure the analog outputs in the *analogOutput* registers (2.10). +2. Device Commands + +Device commands affect the complete device (i.e. they are not specific for one of the optical channels). Their command header always start with the character “#” followed by 4 letters. + +1. #VERS – Get Device Information + +This command returns general information about the device. + +Command: **#VERS**↵ + +Response: **#VERS**˽D˽N˽R˽S˽B˽F↵ + +Output Parameters: + +D Device ID, identifies the specific device type.![ref1] + +|Device ID |Description |Item Nrs. | +| - | - | - | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|0 |FireSting-O2 ||FSO2-C1, FSO2-C2, FSO2-C4 | +| - | - | :- | - | +|1 |FireSting-PRO ||FSPRO-1, FSPRO-2, FSPRO-4 | +|2-3 |reserved ||| +|4 |Pico-x ||PICO-O2, PICO-PH, PICO-T | +|5-7 |Reserved ||| +|8 |FD-OEM-x ||FD-OEM-O2, FD-OEM-PH | +|9-11 |reserved ||| +|12 |AquapHOx Logger||APHOX-LX, APHOX-L-O2, APHOX-L-PH | +|13 |AquapHOx Transmitter||APHOX-TX, APHOX-T-O2, APHOX-T-PH | + +N Number of optical channels. + +R Firmware version, e.g. *R*=405 designates firmware version 4.05 + +S Bit field about available sensor types and supported optical analytes as + +follows: + +|Bit 0-7: Available Sensor Types||Bit 8-15: Supported Optical | +| - | :- | - | +|||Analytes | +|Bit 0: optical channel ||Bit 8: oxygen| +|Bit 1: sample temperature (typ. Pt100)||Bit 9: optical temperature| +|Bit 2: pressure||Bit 10: pH | +|Bit 3: humidity||Bit 11: CO2 | +|Bit 4: analog in||Bit 12: reserved| +|Bit 5: case temperature||Bit 13: reserved| +|Bit 6: reserved ||Bit 14: reserved| +|Bit 7: reserved||Bit 15: reserved| + +Example: *S* = 1 + 2 + 4 + 8 + 32 + 256 = 303 means, that the device supports an optical channel as well as sample and case temperature, pressure, and humidity sensors, and the optical channel supports the analytes oxygen. + +B Firmware build number starting at 1 for each firmware version (reflects + +minor firmware revisions) + +F Bit field about available features as follows: + +|Bit 0: analog out 1|Bit 5: battery| +| - | - | +|Bit 1: analog out 2|Bit 6: stand-alone logging| +|Bit 2: analog out 3|Bit 7: sequence commands| +|Bit 3: analog out 4|Bit 8: user memory| +|Bit 4: user interface (display, buttons) |Bit 9-31: reserved | + +Example: F = 1 + 2 + 4 + 8 + 256 = 271 means that 4 analog outputs are supported and the module possesses a user memory. + +Example Communication: + +Command: #VERS↵ + +Response: #VERS˽1˽4˽403˽1071˽2˽271↵ + +2. #IDNR – Get Unique ID Number + +This command returns the unique identification number of the respective device. + +Command: **#IDNR**↵ + +Response: **#IDNR**˽N↵ + +Output Parameters: + +N Unique ID number. Note, this parameter is given as an unsigned 64 bit + +integer! + +Returns the unique identification number of the device (does NOT correspond to the ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +serial number of the device). + +Example Communication: + +Command: #IDNR↵ + +Response: #IDNR˽2296536137892833272↵ + +3. #LOGO – Flash Status LED + +This command lets the status LED flash for 4 times within ca. 1 s. + +Command: **#LOGO**↵ + +Response: **#LOGO**↵ + +This command can be used to check proper communication with the device. Or it might be helpful in setups with more than one device, in order to identify which port is connected to which device. + +4. #PDWN – Power Down Sensor Circuits + +This command switches off the power supply of the sensor circuits. + +Command: **#PDWN**↵ + +Response: **#PDWN**↵ + +This command can be used for some power saving during idle operation periods. Note, that the sensor circuits are automatically powered up again, if the module receives any command (e.g. MEA) requiring a sensor measurement. This is also the case if a broadcast measurement takes place. + +5. #PWUP – Power Up Sensor Circuits + +This command switches on the power supply of the sensor circuits. + +Command: **#PWUP**↵ + +Response: **#PWUP**↵ + +The wake-up duration is up to 250 ms. + +6. #STOP – Enter Deep Sleep Mode + +This command is only available on dedicated OEM modules (e.g. Pico-x or FD-OEM-x). It puts the device into a deep sleep mode with very low power consumption + +Command: **#STOP**↵ Response: **#STOP**↵ + +During deep sleep mode the device has very low power consumption. No standard communication via USB/UART is possible. The deep sleep mode can be only exit by sending a (0x0D) to the device. The device will respond then also with a single indicating that it is ready to receive new commands. The wake-up duration can be up to 250 ms.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +7. #RSET – Reset Device + +This command triggers a reset of the device. + +Command: **#RSET**↵ Response: **#RSET**↵ + +Triggers a reset of the device, as if the device experienced a power cycle. All current configurations in the RAM registers are overwritten with the values in the flash memory. This is not a factory reset. + +8. #RDUM – Read User Memory + +This command is only available on dedicated OEM modules (e.g. Pico-x or FD-OEM-x). It reads values from the user memory registers. + +Command: **#RDUM**˽R˽N↵ Response: **#RDUM**˽R˽N˽Y0…YN↵ + +Input Parameters: + +R Address of first register to be read from the user memory (0…63) N Total number of registers to be read (1…64) + +Output Parameters: + +Y0…YN Content of the requested user memory registers (signed 32bit integers). + +The device offers a user memory of altogether 64 signed 32bit integer numbers (range - 2147483648 to 2147483647) which is located in the flash memory and is therefore retained even after power cycles. This read command returns *N* (*N*=1…64) consecutive values *Y1 ... YN* from the user memory starting at the user memory address *R* (*R*=0…63). Note, that *N*+*R* must be <=64. The content of the user memory has no influence on the module itself. It can be used for any user specific purpose. + +Example Communication: + +Command: #RDUM˽12˽4↵ + +Response: #RDUM˽12˽4˽-40323˽23421071˽0˽-555↵* + +This example shows a command which requests the values of 4 consecutive beginning with the user memory address 12. + +9. #WRUM – Write User Memory + +This command is only available on dedicated OEM modules (e.g. Pico-x or FD-OEM-x). It writes values into the user memory registers. + +Command: **#WRUM**˽R˽N˽Y0…YN↵ Response: **#WRUM**˽R˽N˽Y0…YN↵![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Input Parameters: + +R Address of first user memory register to be written (0…63) + +N Total number of registers to be written (1…64) + +Y0…YN Values to be written to the user memory registers (signed 32bit integers). + +This command writes *N* (*N*=1...64) values *Y1 ... YN* consecutively starting at the user memory address *R* (*R*=0...63). Note, that *N*+*R* must be <=64. + +This command must be used economically, because the flash memory is designed for typ. ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.023.png)max. 20,000 flash cycles. Each time this command is executed, it will trigger a flash cycle. + +NOTE, the user memory registers are located in a separate flash memory region than the configuration registers. So calling the command #WRUM will not influence the flash memory of these registers. + +Example Communication: + +Command: #WRUM˽0˽2˽-16˽777↵ Response: #WRUM˽0˽2˽-16˽777↵* + +This example shows a command which writes the value -16 into the memory address 0, and the value 777 into the memory address 1. + +3. Channel Commands + +Channel commands trigger actions related to a specific optical channel. Their command header always consists of 3 letters. The first parameter is always the selected optical channel. + +1. MEA – Trigger Measurement + +This command triggers a measurement and returns the results. + +Command: **MEA**˽C˽S↵ + +Response: **MEA**˽C˽S˽R0˽R1…R17↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +S If in doubt, then set S=47! + +This parameter defines the enabled sensor types, + +given as decimal representation of the following bit field: ![ref1] + +|Bit 0 (add 1): |optical channel | +| - | - | +|Bit 1 (add 2) |sample temperature (typ. the external Pt100-sensor) | +|Bit 2 (add 4)|ambient air pressure| +|Bit 3 (add 8) |relative humidity within the module| +|Bit 4 (add 16) |reserved | +|Bit 5 (add 32) |case temperature (temperature within the module)| + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Example: S = 1 + 2 + 4 + 8 + 32 = 47 means, that the command will trigger the following measurements: optical sensor (oxygen, pH, or temperature), sample temperature, case temperature, ambient air pressure, and relative humidity within the module housing. + +Output Parameters: + +R0…R17 The results of the measurement given as the integer values of the 18 + +*Results* registers (refer to 2.9). + +This command is the essential command for triggering measurements. + +IMPORTANT: If automatic temperature compensation is enabled for the optical sensor, it ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.024.png)is mandatory to enable Bit1 of the input parameter S! + +Example Communication: + +Command: MEA˽1˽3↵ + +Response: MEA˽1˽3˽0˽30120˽270013˽210211˽98007˽20135˽0˽87016˽11788˽0˽0˽123022˽ + +20980˽0˽0˽0˽0˽0↵ + +This example command triggers the measurement of the sample temperature (e.g. external Pt100) and of the optical channel (in this example configured for oxygen sensors). The highlighted output parameters of the response are interpreted as follows: + +*status* = 0 → No error or warning occurred; the measurement is valid! *µmolar* = 270.013 µmol/L (dissolved oxygen concentration) *mbar* = 210.211 mbar = 210.211 hPa (partial pressure oxygen) + +*airSat* = 98.007 % air sat. (% air saturation) + +*tempSample* = 20.135 °C + +*signalIntensity* = 87.016 mV + +*ambientLight* = 11.788 mV + +*percentO2* = 20.980 %O2 (volume fraction oxygen) + +2. CHI – Calibrate Oxygen Sensor at ambient air + +This command is used for calibrating the upper calibration point of the oxygen sensor at ambient air. + +Command: **CHI**˽C˽T˽P˽H↵ + +Response: **CHI**˽C˽T˽P˽H↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices).![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +T Temperature of the calibration standard in units of 10-3 °C (e.g. 20000 + +means 20°C) + +P Ambient air pressure in units of 10-3 mbar (e.g. 1013000 means 1013 + +mbar) + +H Relative humidity of the ambient air in units of 10-3 %RH (e.g. 50000 + +means 50%RH) Set H=100000 (=100%RH) for calibrations in air saturated water. + +This command performs 16 repeated optical measurements, and uses the average for the calibration. The total duration for this procedure varies between ca. 3s and ca. 6s depending on the configuration of the module. + +Optional Factory Calibration: This upper calibration point might be skipped by applying a rough factory calibration given by the sensor code attached to the respective sensor head. Please refer to section 2.6.2 [for more](#_page30_x54.00_y671.92) details. + +For standard range oxygen sensors this command is by default configured for ambient air acting as the calibration gas with 20.95 %O2. Please refer to section 2.6.3 how to adapt the *Calibration* register *percentO2* in order to use other calibration gases with e.g. 15 %O2 or 100 %O2. + +In order to keep the calibration permanently even after a power cycle, the command SVS [(2.3.10) m](#_page21_x54.00_y584.92)ust be executed afterwards. + +3. CLO – Calibrate Oxygen Sensor at 0% (anoxic) + +This command is used for calibrating the oxygen sensor at 0% O2. + +Command: **CLO**˽C˽T↵ + +Response: **CLO**˽C˽T↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +T Temperature of the calibration standard in units of 10-3 °C (e.g. 20000 + +means 20°C) + +This command performs 16 repeated optical measurements, and uses the average for the calibration. The total duration for this procedure varies between ca. 3s and ca. 6s depending on the configuration of the module. + +Optional Factory Calibration: This 0% O2 calibration point might be skipped by applying a rough factory calibration given by the sensor code attached to the respective sensor head. Please refer to section 2.6.2 [for more](#_page30_x54.00_y671.92) details. + +In order to keep the calibration permanently even after a power cycle, the command SVS [(2.3.10) m](#_page21_x54.00_y584.92)ust be executed afterwards. + +4. COT – Calibrate Optical Temperature Sensor![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +This command performs a 1-point calibration of the optical temperature sensor. + +Command: **COT**˽C˽T↵ + +Response: **COT**˽C˽T↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +T Temperature of the calibration standard in units of 10-3 °C (e.g. 20000 + +means 20°C) + +This command performs 16 repeated optical measurements, and uses the average for the calibration. The total duration for this procedure varies between ca. 3s and ca. 6s depending on the configuration of the module. + +In order to keep the calibration permanently even after a power cycle, the command SVS [(2.3.10) ](#_page21_x54.00_y584.92)must be executed afterwards. + +5. CPH – Calibrate pH Sensor + +This command is used for calibrating the pH sensor at up to 3 different calibration points. The sensor should be calibrated at 2 points (“low pH” and “high pH”). In contrast to electrochemical pH sensors, optical pH sensors are calibrated outside of the dynamic range where the pH indicator is either fully protonated or fully deprotonated. The first calibration point is called "low pH calibration" and is performed using a highly acidic buffer (pH 2, item no. PHCAL2). A second calibration point, "high pH calibration" is performed using a highly basic buffer (pH 11.00, item no. PHCAL11). After these two calibration points, the sensor is ready to use. It is advised to read the pH sensor manual for more details how to perform proper pH calibrations regarding equilibration time, salinity, which buffers must not be used, etc. + +Optional Factory Calibration: The “high pH calibration” might be skipped by applying a rough factory calibration given by the sensor code attached to the respective sensor head. Please refer to section 2.8.2 [for more](#_page35_x54.00_y426.92) details. + +The third calibration point ("offset calibration") is optional and only recommended for advanced users. It adds an offset to the pH output. This offset has to be determined using a well-known buffer at a pH value close to the pKa of the sensor (e.g. a buffer with pH 8 could be used for -PK8 sensors). + +Bug in firmware versions <4.10 (at least all devices purchased before 2022)![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.025.png) + +Before performing the optional “offset calibration” (i.e. *N* = 2) the *offset* register in the *calibration* register block must be always adjusted to 0 by using the following command: + +WTM˽*C*˽1˽13˽1˽0↵ + +where *C* is the optical channel number (refer to section 2.3.9). + +Command: **CPH**˽C˽N˽P˽T˽S↵![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Response: **CPH**˽C˽N˽P˽T˽S↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +N Calibration point type. + +N=0: low pH calibration point + +N=1: high pH calibration point + +N=2: offset calibration point (optional calibration point for advanced users) P pH value of calibration standard in units of 10-3 pH (e.g. 3000 means pH 3 T Temperature of the calibration standard in units of 10-3 °C (e.g. 20000 + +means 20°C) + +S Salinity of the calibration standard in units of 10-3 g/L (e.g. 1000 means 1 + +g/L) + +This command performs 16 repeated optical measurements, and uses the average for the calibration. The total duration for this procedure varies between ca. 3s and ca. 6s depending on the configuration of the module. + +In order to keep the calibration permanently even after a power cycle, the command SVS [(2.3.10) m](#_page21_x54.00_y584.92)ust be executed afterwards. + +6. BGC – Perform Background Compensation + +ONLY FOR ADVANCED APPLICATIONS with contactless sensors (e.g. sensor spots, flow - through cells) in order to compensate for possible background luminescence of the fiber - optics. Such a background compensation is recommended for the optical measurements, + +if *Results.signalIntensity* is below ca. 50mV for *Settings.amp* = 400x. + +Command: **BGC**˽C↵ Response: **BGC**˽C↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +Before calling this command, the fiber-optics must be separated from the actual optical sensor spot or flow-through cell. This command performs 16 repeated measurements of the background luminescence of the fiber-optics. It calculates the average and saves the normalized background compensation values in the corresponding *Calibration* registers *bkgdAmpl* and *bkgdDphi*. From this on, all optical measurements are automatically corrected for the background luminescence. The background compensation must always be executed before calibrating the sensor. + +In order to keep the background compensation even after a power cycle, the command SVS [(2.3.10) m](#_page21_x54.00_y584.92)ust be executed afterwards. + +Example Communication: ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Command: BGC˽2↵ + +Response: BGC˽2↵ + +. + +7. BCL – Clear Background Compensation + +ONLY FOR ADVANCED APPLICATIONS with contactless sensors. Clears (disables) the background compensation by writing zero to the *Calibration* registers *bkgdAmpl* and *bkgdDphi*. + +Command: **BCL**˽C↵ + +Response: **BCL**˽C↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +In order to keep the background compensation cleared after a power cycle, the command SVS (2.[3.10) mu](#_page21_x54.00_y584.92)st be executed afterwards. + +Example Communication: Command: BCL˽4↵ Response: BCL˽4↵ + +8. RMR – Read Multiple Registers + +This command is used for reading out configuration registers (refer to 0). + +Command: **RMR**˽C˽T˽R˽N↵ + +Response: **RMR**˽C˽T˽R˽N˽Y1˽Y2˽Y3…˽YN↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +T Register block number: + +T=0: *Settings* registers + +T=1: *Calibration* registers + +T=3: *Results* registers + +T=4: *AnalogOutput* registers + +R Start register number (R=0 for starting with the first register) N Number of registers to read. + +Output Parameters: + +Y1…YN Read register values. + +Example Communication Command: RMR˽1˽0˽2˽3↵![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Response: RMR˽1˽0˽2˽3˽0˽5˽2↵ + +This example reads out the 3rd, 4th, and 5th *Settings* register of the first optical channel, returning *salinity*=0, *duration*=5, and *intensity*=2. + +9. WTM – Write Multiple Registers + +This command is used for writing configuration registers (refer to 0). Note, this [comm](#_page22_x54.00_y178.92)and changes the register values only in the volatile memory of the device. + +In order to keep the changed register valuesn after a power cycle, the command SVS [(2.3.10) ](#_page21_x54.00_y584.92)must be executed afterwards. + +Command: WTM˽C˽T˽R˽N˽Y1˽Y2˽Y3…˽YN↵ + +Response: WTM˽C˽T˽R˽N˽Y1˽Y2˽Y3…˽YN↵ + +Input Parameters: + +C Optical channel number (C=1 for one channel devices). + +T Register block number. + +T=0: *Settings* registers + +T=1: *Calibration* registers + +T=3: *Results* registers + +T=4: *AnalogOutput* registers + +R Start register number (R=0 for starting with the first register) + +N Number of registers to write. + +Y1…YN Register values to be written. + +Example Communication: + +Command: WTM˽2˽1˽2˽4˽-5000˽12000˽976000˽50000↵ Response: WTM˽2˽1˽2˽4˽-5000˽12000˽976000˽50000↵ + +This example writes the 2nd, 3rd, 4th, and 5th *Calibration* register of the second optical channel, adjusting the registers to *temp0*=-5000 (i.e. -5°C), *temp100*=12000 (i.e. 12°C), *pressure*=976000 (i.e. 976 mbar), and *humidity*=50000 (i.e. 50%RH). + +10. SVS – Save Registers in Flash Memory + +Saves the actual RAM register configuration as the new default values into the internal flash memory. These default values are automatically loaded after a power cycle.: + +Command: **SVS**˽C↵ Response: **SVS**˽C↵ + +Input Parameters: + +C Optical channel number (set always C=1). + +Important: This command should be used economically, as the hardware is specified for ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.026.png)up to 20,000 flash cycles.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Note: This command always stores the register configuration of all optical channels into ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.027.png)the internal flash memory. So the parameter C can be fixed to 1. + +Example Communication: + +Command: SVS˽1↵ + +Response: SVS˽1↵ + +11. LDS –Load Registers from Flash Memory + +Loads all RAM register values from the internal flash memory, i.e. the configuration is restored, which was given when the SVS command was executed last. Note, after a power cycle this action is automatically performed. + +Command: **LDS**˽C↵ + +Response: **LDS**˽C↵ + +Input Parameters: + +C Optical channel number (set always C=1). + +Note: This command always loads the register configuration of all optical channels from ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.028.png)the flash memory into the RAM memory. So the parameter C can be fixed to 1. + +Example Communication: Command: LDS˽1↵ Response: LDS˽1↵ + +4. Error Responses + +If an error occurred while processing a received command, the device will give the following response: + +Command: *any command* Response: **#ERRO**˽C ↵ + +This error response is mostly given, if the master did not send the command with the correct communication syntax. The output parameter C represents the general PyroScience error types as given by the following table. + +Note: Warnings and errors directly related to the sensor measurements (e.g. a broken ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.029.png)Pt100 temperature sensor, or a "worn out" optical oxygen sensor) will not result in such an #ERRO response. Instead, such warning and errors are given in the register *Results.status* (refer to 2.9).[ ](#_page36_x54.00_y519.92)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +C Error Type Description + +|-1 |*General* |||A non-specific error occurred.| +| - | - | :- | :- | - | +|-2 |*Channel* |||The requested optical channel does not exist.| +|-11 |*Memory Access* |||Memory access violation either caused by a not existing requested | +|||||register, or by an out of range address of the requested value.| +|-12 |*Memory Lock* |||The requested memory is locked (system register) and a write | +|||||access was requested.| +|-13 |*Memory Flash* |||An error occurred while saving the registers permanently. The SVS | +|||||request should be repeated to ensure a correct permanent | +|||||memory. | +|-14 |*Memory Erase* |||An error occurred while erasing the permanent memory region for | +|||||the registers. The SVS request should be repeated.| +|-15 |*Memory Inconsistent*||The registers in RAM are inconsistent with the permanently stored || +||||registers after processing SVS. The SVS request should be repeated.|| +|-21 |*UART Parse* ||An error occurred while parsing the command string. The last || +||||command should be repeated.|| +|-22 |*UART Rx* ||The command string was not received correctly (e.g. device was || +||||not ready, last request was not terminated correctly). Repeat the || +||||last command.|| +|-23 |*UART Header* ||The command header could not be interpreted correctly (must || +||||contain only characters from A-Z). Repeat the last command.|| +|-24 |*UART Overflow* ||The command string could not be processed fast enough to prevent || +||||an overflow of the internal receiving buffer|| +|-26 |*UART Request* ||The command header does not match any of the supported || +||||commands. || +|-28 |*UART Range* ||One or more parameters of the command are out of range.|| +|-30 |*I2C Transfer* ||There was an error transferring data on the I2C bus.|| +|-40 |*Temp Ext* ||The communication with the sample temperature sensor was not || +||||successful. || + +-41 *Periphery No Power* The power supply of the device periphery (sensors, SD card) is not + +switched on.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +5. Settings Registers + +These read/write registers contain settings for the optical measurement. The register block number is 0. They can be manipulated by using the commands RMR (2.3.8), WTM [(2.3.9), ](#_page21_x54.00_y147.92)and SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +Example Communication (reading the first 13 registers) + +Command: RMR˽1˽0˽0˽13↵ + +Response: RMR˽1˽0˽0˽13˽20000˽1013000˽0˽5˽1˽6˽4000˽0˽0˽3˽0˽1˽2 ↵ + +Example Communication (writing the first 3 registers) Command: WTM˽1˽0˽0˽3˽-30000˽-1˽12↵ Response: WTM˽1˽0˽0˽3˽-30000˽-1˽12 ↵ + +The following table provides an overview. The registers can be grouped into 3 different categories is indicated by the circles in the first column. ![ref1] + + + +|Reg. Nr. |Label |Unit |Range |Description | +| - | - | - | - | - | +|E 0 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.030.png)|*temp* |0\.001 °C |-300096 – 300000 |

Temperature in the sample.

Set to -300000 for automatic temperature compensation using the sample temperature sensor (e.g. Pt100).

Set to -300000 - N for automatic temperature compensation using an optical temperature sensor connected to channel N.

| +|E 1 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.031.png)|*pressure* |0\.001 mbar |-1 – 10000000|

Ambient air pressure in the sample

(set to -1 for automatic pressure compensation)

| +|E 2 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.032.png)|*salinity* |0\.001 g/l |0 – 1000000|Salinity in the sample| +|

M T ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.033.png)

3

|*duration* |- |1 – 8 |Determines the duration of the red flash used for the optical measurement. The values 1-8 correspond to a flash duration of 1, 2, 4, 8, 16, 32, 64, and 128ms, respectively.| +|

M S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.034.png)

4

|*intensity\** |- |0 – 7 |

Determines the intensity of the red flash use for the optical measurement. The values 0-7 correspond to 10%, 15%, 20%, 30%, 40%, 60%, 80%, and 100% of the maximum intensity

.

| +|

M S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.035.png)

5

|*amp\** |- |4 – 6 |Determines the amplification level of the optical detector used for reading out the optical sensor. The values 4-6 correspond to 80x, 200x, and 400x amplification.| +|T 6 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.036.png)|*frequency* |Hz |1 – 32000 |Sensor type specific constant| +|M 7 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.037.png)|*crcEnable* |- |0 – 1 |

0: no cyclic redundancy check (CRC)

1: enables CRC of the communication protocol (only used for channel=1, see comment below)

| +|8 |Reserved |||| +|T 9 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.038.png)|*options* |- |0 – 7 |

Sensor type specific constant

bit0 (add 1): automaticFlashDuration is enabled bit1 (add 2): automaticAmpLevel is enabled bit2 (add 4): 1000xOxygen is enabled

| +|M 10 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.039.png)|*broadcast* |- ||See below | +|T 11 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.040.png)|*analyte* |- |0 – 4 |

Sensor type specific constant

Detected analyte by the optical sensor: 0: no sensor, 1: oxygen, 2: temperature, 3:

` `pH

| +|T 12 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.041.png)|*fiberType* |- |0 – 2 |Sensor type specific constant Diameter of the used optical fiber 0 = 230µm, 1 = 430µm, 2 = 1mm| + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|13-19 |Reserved |||| +| - | - | :- | :- | :- | +* Note: When changing these values, a recalibration of the optical sensor is recommended. +1. E Environmental Condition Registers ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.042.png) + +Before triggering an optical measurement, the registers *temp*, *pressure* and *salinity* must be adjusted by the user in order to define the environmental conditions in the sample at the very position where the sensitive part of the optical sensor is located. This is needed by the device for calculating the correct result for the optical sensor measurement. Refer to the table below, which environmental settings are needed for the different analytes. The special setting *temp* = -300000 activates the automatic temperature compensation of the optical measurement, which means that the result of the sample temperature measurement (e.g. external Pt100) is used for calculating the results. + +Devices with more than one optical channel can use optical temperature sensors for compensating optical sensors connected to other channels. For example, if an oxygen, a pH, and an optical temperature sensor are connected to the optical channels 1, 2, and 3, respectively. Then *Settings.temp* should be adjusted to -300003 for the channels 1 and 2. This way, the oxygen and the pH sensor will be automatically temperature compensated by the results of the last optical temperature measurement at channel 3. In this scenario it is important to trigger first the measurement at channel 3, followed by measurements at channels 1 and 2. + +The special setting *pressure* = -1 activates the automatic pressure compensation of the optical measurement, which means that the result of ambient air pressure measurement is used for calculating the results. + + + +|Analyte |Temperature|Pressure |Salinity | +| - | - | - | - | +|Oxygen |Required |Required only for oxygen units: µmolar (mg/L), %air sat., %O2 |Required only for oxygen units: µmolar (mg/L) | +|Optical Temperature|-- |-- |-- | +|pH |Required |-- |Required | + +2. M Measurement Mode Registers ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.043.png) + +Optical Measurement Parameters. All optical sensors from PyroScience are based on proprietary luminescent dyes, which are excited with LED light. The excited dyes emit then light in the near infrared (NIR), which is detected by a light detector. The measured lifetime of the emitted NIR light is then used to calculate the final oxygen, pH, or temperature values (all done within the firmware). The user can adjust (i) the *intensity* of the LED light, (ii) the *duration* of the emitted LED flash, and the (iii) the amplification level *amp* of the detector. + +The registers *intensity* and *amp* should be adjusted together. Suggested procedure: set *amp* = 6 and increase *intensity* stepwise from 0 to 7 until the signal intensity (*Results.signalIntensity*) is within the typical range of 100-400mV. If *Results.signalIntensity* is then still too high, decrease stepwise *amp* to 5 or 4 and choose ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +again the best value for *intensity*. But *amp* must be kept in the range of 4-6. Note that the chosen value of *intensity* is a compromise between lower long-term drift (*intensity*=1) and lower signal-to-noise ratio (*intensity*=8). + +The registers *intensity* and *amp* should be always adjusted properly if a new sensor head ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.044.png)is connected to the device. After the sensor has been calibrated, these two registers should not be changed again. + +Please refer also to section 2.5.3 [describing](#_page27_x54.00_y607.92) an alternative way how to adjust the registers *intensity* and *amp* based on the sensor code provided with each individual sensor head. + +The register *duration* determines the length of the LED flash as indicated in the table. The chosen value is a compromise between lower long-term drift (*duration*=1) and lower signal-to-noise ratio (*duration*=8). If in doubt set *duration*=5. This register has no effect on the calibration, so it can be changed anytime. + +Broadcast Mode. The register *broadcast* can be used to enable and configure the broadcast mode for the specific optical channel. During broadcast mode, the device triggers itself periodic measurements as defined in the *broadcast* register (see details in the table below). Optionally it is also possible to trigger broadcast measurements via the digital input TRIGIN at the extension port of the device (if available). The results can be given at the analog output (if available), and the results can be transmitted via the UART/USB interface. In the latter case, the results are transmitted following the syntax of the MEA command (2.3.[1), with](#_page15_x54.00_y531.92) the only difference, that the message starts with the character “>” (ASCII code 0x3E). + +The broadcast mode of different optical channels can be configured independently. For example, one channel can measure every 10s, the next one every 0.5s. + +Note, the minimum realizable broadcast interval depends on the hardware. For laboratory (e.g. FireSting) and underwater devices (e.g. AquapHOx Transmitter) it can be as low as 25 ms, while for most OEM devices (e.g. PICO-x) the minimum realizable broadcast interval is 1000 ms. The reason is, that these OEM devices are optimized for low energy and not for high speed operation. The maximum possible broadcast interval is 65000 ms = 65 s. + +Note, the master can anytime send standard commands to the device, even if the broadcast mode is enabled. If the device receives a command from the master, while it is executing a broadcast measurement, the device will (1) complete the broadcast measurement, (2) send the broadcast message, (3) thereafter it will immediately execute the requested command, and (4) send then the response to the master. + +Broadcast Mode with Deep Sleep. For devices which support the #STOP command [(2.2.6), ](#_page13_x54.00_y604.92)the broadcast mode does also work in combination with the deep sleep mode in order to reduce the power consumption significantly. This mode is enabled by sending the command #STOP or it is enabled directly after power up if the *enableDeepSleep* bit is set to 1. In this case the device automatically wakes up from deep sleep for each ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +required broadcast measurement. When the measurement is finished it goes back into deep sleep mode. + + + +|broadcast Register|Label ||Description | +| - | - | :- | - | +|Bit 0..15 |*Interval* (ms) ||interval = 0: Interval broadcast mode is disabled| +||||interval = 1-65535: Interval broadcast mode is enabled. The | +||||module triggers itself periodic measurements, whereby interval | +||||defines the broadcast interval in units of ms. The max. possible | +||||interval is 65 s. The minimum is in the range of 25-1000ms | +||||depending on the specific hardware and the configuration of | +||||the measurement mode registers. | +|Bit 16..23 |*enabledSensors* ||Bitfield defining which sensors are enabled during the | +|Bit 16 (add 65536) Bit 17 (add 131072) Bit 18 (add 262144) Bit 19 (add 524288) Bit 20 (add 1048576) Bit 21 (add 2097152)|

optical channel sample temperature ambient air pressure relative humidity reserved

case temperature

||broadcast mode as given by the parameter S in the command MEA. | +|Bit 24 (add 16777216) |*enableUartTransmit*||If set to 1, then the broadcast mode will send after each | +||||measurement via the UART (USB) interface the character ‘>’ | +||||followed by the answer string as given by the command MEA. | +|Bit 25 (add 33554432) |*enableTrigin* ||If set to 1, then a broadcast measurement can be triggered by | +||||the TRIGIN pin at the extension port (if available).| +|Bit 26 (add 67108864) |*enableDeepSleep* ||If set to 1, then the device will go after power up directly into | +||||deep sleep mode (only if device supports the #STOP command). | +||||It will wake up periodically for each required broadcast | +||||measurement, and then go back to deep sleep.| + +Cyclic Redundancy Check (CRC). Setting the register *Settings.crcEnable*=1 will enable a cyclic redundancy check (CRC) for all messages (i.e. command responses and broadcast messages) transmitted from the device to the control hardware (e.g. PC). Now every answer from the device to the master is terminate by the string “:˽C↵” where C is the CRC16/Modbus checksum represented as a decimal ASCII-string (human readable). The CRC is calculated for all ASCII-characters (unsigned bytes) from the very beginning of the returned string until the character just before the “:”. Note, also spaces (ASCII code 32) are included in the CRC calculation. See also 2.1.4. + +Note, crcEnable is only used for channel=1. The value of crcEnable for channel 1 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.045.png)enables/disables the CRC for the whole device! + +3. S Sensor Code Settings ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.046.png) + +Section [2.5.2 de](#_page25_x54.00_y574.92)scribed how to configure the registers *intensity* and *amp.* This procedure can be optionally omitted by utilizing information given by the “sensor code” provided with each individual sensor head from PyroScience. This sensor code contains the factory calibration (see section 2.6.2) [and recomme](#_page30_x54.00_y671.92)nded measurement settings for *intensity* and *amp*. The last two digits of the first block of the sensor code contain the recommended settings. For example, in the sensor-code “XB7-547-213” “B” encodes the *intensity* setting (the letters A to H correspond to 10%, 15%, 20%, 30%, 40%, 60%, 80%, and 100% of the maximum intensity) and “7” encodes the *amp* setting (5, 6 and 7 correspond to 80x, 200x, and 400x amplification). These values are only ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +recommendations for typical applications for the specific sensor head. For optimal performance please follow the instruction given in section 2.5.2. + +4. T Sensor Type Specific Constants ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.047.png) + +These registers comprise constants which are specific for the used sensor type (and not for each individual sensor head). For example: if the user intents to use always oxygen microsensor (item nr. OXR50), then these registers need to be configured only one time. It is recommended to adjust the proper values by using the Windows software tools “Pyro DeveloperTool” or “Pyro Workbench”. These software tools will configure these registers based on the sensor code attached to the sensor head. Standard users might skip the following paragraphs of this section, as these registers are adjusted by the mentioned software tools. + +Automatic Flash Duration. Setting bit 0 (*automaticFlashDuration*) of *Settings.options* to 1 will enable the automatic flash duration. Now the flash duration is dynamically adjusted within the range of 1-128 ms depending on the last value of *Results.signalIntensity*. In this case *duration* defines the flash duration if *Results.signalIntensity* equals 400mV. For higher signal intensities the duration is automatically reduced, while for lower ones it is increased. This option is especially useful for oxygen sensors, because their *signalIntensity* depends strongly on the actual oxygen level. This way the *duration* is dynamical adjusted in order to assure a pretty constant signal-to-noise level while ensuring minimal drift (caused by photobleaching). + +Automatic Amplification Level. If bit 1 (*automaticAmpLevel*) of *Settings.options* is set to 1, then the amplification level of the detector is reduced automatically in case of an oversaturation of the detector. It is recommended for precision measurements to adjust *intensity* and *amp* in such a way, that *Results.status* never indicates “sensor signal or ambient light too high”. But an enabled automatic amplification level is anyhow recommended, because the optical sensor will still give reasonable values if e.g. increased ambient light might saturate the amplifier. In this case the optical measurement is automatically repeated with stepwise decreased amplification levels, until the amplifier is not anymore saturated. If such an automatic amplification reduction has taken place, then *Results.status* shows “Warning - automatic amplification level active”. Note, that the content of the register *amp* is not changed by this procedure. + +Trace Oxygen Option. If bit 2 (*1000xOxygen*) of *Settings.options* is set to 1, the integer values given in the *Results* registers *umolar*, *mbar*, *airSat*, and *percentO2* are multiplied by a factor of 1000. This means, that after conversion to floating point values, the user will obtain 3 more digits of precision for oxygen measurements. This option should be only used in combination with special “trace oxygen sensors” intended for measurements close to 0%O2. If the *1000xOxygen* option is enabled, then *Results.status* will always show the warning “WARNING – 1000xOxygen enabled”.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +In the following table the recommended settings for a few selected sensor types are listed. The values for duration are only suggestions and can be changed as described in section [2.5.2. P](#_page25_x54.00_y574.92)lease contact us if your sensor type is not listed here. + + + +||Register Name (Register Number)||||| +| :- | - | :- | :- | :- | :- | +|Sensor Type(s)|duration (3) |frequency (6)|options (9) |analyte (11)|fiberType (12)| +|X, S |5 |4000 |3 |1 |2 | +|XZ |5 |4000 |3 |1 |2 | +|Z |5 |4000 |3 |1 |0 | +|Y |5 |4000 |3 |1 |1 | +|W |5 |4000 |3 |1 |2 | +|U, T |8 |470 |3 |1 |2 | +|D |8 |970 |3 |2 |2 | +|C |8 |1970 |3 |2 |1 | +|SA, SB, SC, SD, SE, SF, XA, XB, XC, XD, XE, XF |5 |3000 |3 |3 |2 | + +6. Calibration Registers (Oxygen Sensors) + +These read/write registers contain all information about the sensor calibration. The register block number is 1. They can be manipulated by using the commands RMR [(2.3.8), ](#_page20_x54.00_y432.92)WTM ([2.3.9), a](#_page21_x54.00_y147.92)nd SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +Example Communication (reading the first 6 registers) + +Command: RMR˽1˽1˽0˽6↵ + +Response: RMR˽1˽1˽0˽6˽53212˽20123˽20212˽21209˽1024089˽100000 ↵ + +Example Communication (writing the first 2 registers) Command: WTM˽1˽1˽0˽2˽53000˽20000↵ Response: WTM˽1˽1˽0˽2˽53000˽20000 ↵ + +Note, the specific definition of the *Calibration* registers depends on the analyte of the connected sensor head. This chapter describes the definition of the *Calibration* registers, if an optical oxygen sensor is connected. Important, do not forget to adjust the *Settings*.*analyte* to 1 in this case. This ensures, that the device applies the calibration registers accordingly. + +The *Calibration* registers provide all information needed for converting the raw value *Results.dphi* into the final oxygen units in the *Results* registers. The following table provides an overview. The registers can be grouped into 2 different categories as indicated by the circles in the first column.![ref1] + + + +|Reg. Nr. |Label |Unit |Configured by |Description | +| - | - | - | - | - | +|C S 0 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.048.png)|*dphi0* |0\.001° |command CLO (or sensor code) |Phase shift at 0%O2. | +|C S 1 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.049.png)|*dphi100* |0\.001° |command CHI (or sensor code) |Phase shift at upper calibration point.| + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|C S 2 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.050.png)|*temp0* |0\.001°C |command CLO (or sensor code|) |Calibration temperature at 0%O2.| +| - | - | - | - | - | - | +|C S 3 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.051.png)|*temp100* |0\.001°C |command CHI (or sensor code|) |Calibration temperature at upper calibration point.| +|C S 4 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.052.png)|*pressure* |0\.001 mbar |command CHI (or sensor code|) |Ambient air pressure during calibration at upper calibration point.| +|C S 5 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.053.png)|*humidity* |0\.001 %RH |command CHI (or sensor code|) |Relative humidity during calibration at upper calibration point. Set to 100%RH | +||||||for calibrations in liquid samples.| +|T 6 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.054.png)|*f* |0\.001 |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 7 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.055.png)|*m* |0\.001 |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 8 ![ref3]|*calFreq* |Hz |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 9 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.057.png)|*tt* |10-5/K |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 10 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.058.png)|*kt* |10-5/K |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 11 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.059.png)|*bkgdAmpl* |0\.001 mV |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 12 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.060.png)|*bkgdDphi* |0\.001° |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 13 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.061.png)|*useKsv* ||software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 14 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.062.png)|*ksv* |10-6/mbar |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 15 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.063.png)|*ft* |10-6/K |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|T 16 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.064.png)|*mt* |10-6/K |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||Sensor type specific constant| +|17 |Reserved ||||| +|T 18 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.065.png)|*percentO2* |0\.001 %O2 |software tools (or section [2.6.3) ](#_page31_x54.00_y403.92)||

Sensor type specific constant

Oxygen level at upper calibration point

| +|19-29 |Reserved ||||| +1. C User Calibration ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.066.png) + +The calibration data registers contain all information about the last sensor calibration. It is only necessary to write these registers if the factory calibration of a sensor head should be used. During a calibration they are automatically adjusted by the oxygen calibration commands CHI (2.3.[2) and ](#_page16_x54.00_y628.92)CLO (2.3.3).[ The comm](#_page17_x54.00_y431.92)and CHI will adjust the registers *dphi100, temp100, pressure,* and *humidity*. The command CLO will adjust the registers *dphi0* and *temp0*. + +2. S Factory Calibration Taken from Sensor Code![ref4] + +The user calibration is generally advised for highest accuracy. But it is possible to replace either calibration point by a rough factory calibration, which is given by the so called “Sensor Code” attached to each oxygen sensor. This is especially interesting, if the aimed application will not measure oxygen values close to one of the calibration points. For example, a respiration measurement might measure always around oxygen levels of ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +18-21 %O2. Then it is possible to take the factory calibration for the 0 %O2 calibration point, without losing too much accuracy. + +How to deduct the factory calibration from the Sensor Code is best explained by an example, where we assume the following Sensor Code: XB7-547-213 + +A 0 %O2 factory calibration is encoded by the numbers 547 which give *dphi0* = 54,7°. The user has to write the following registers, in order to apply this calibration: + + + +|Register |Value |int32 value| +| - | - | - | +|*dphi0* |54\.7° |54700 | +|*temp0* |20\.0°C |20000 | + +An ambient air factory calibration is encoded by the numbers 213 which give *dphi100* = 21,3°. The user has to write the following registers, in order to apply this calibration: + + + +|Register |Value |int32 value| +| - | - | - | +|*dphi100* |21\.3° |21300 | +|*temp100* |20\.0°C |20000 | +|*pressure* |1013 mbar |1013000| +|*humidity* |0 %RH |0 | + +3. T Sensor Type Specific Constants![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.068.png) + +These registers comprise constants which are specific for the used sensor type (and not for each individual sensor head). For example: if the user intents to use always oxygen microsensors (item nr. OXR50), then these registers must be configured only one time. It is recommended to adjust the proper values by using the Windows software tools “Pyro DeveloperTool” or “Pyro Workbench”. These software tools will configure these registers based on the sensor code provided with the sensor head. + +Advanced users might change the register *percentO2*. For most standard range oxygen sensors this register is fixed to 20.95 %O2. This defines, that the command CHI (2.3.2) can be used for calibrations at ambient oxygen levels. If you want to apply a calibration gas of e.g. 15 %O2 or 100 %O2, then you have to write this value into the register *percentO2* before using the command CHI. + +Advanced users applying contactless sensor solutions like sensor spots or flow-through cells might adjust the registers *bkgdAmpl* and *bkdgDphi* additionally by using the commands BGC or BCL. Refer to section 2.3.6 [for mor](#_page19_x54.00_y402.92)e details. Standard users should use the described software tools for configuring these registers. For sensors using a 1 mm plastic fiber *bkgdAmpl* can be estimated as: + +- 0.234 × ℎ( ) + 0.343 ℎ = 0 (eq. 1) + +If the user intends to switch sensor type between measurements and a reconfiguration with the “Pyro DeveloperTool” or “Pyro Workbench” is not possible, the registers can be adjusted manually. The following table lists the type specific calibration registers for a ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +few selected oxygen sensors. The values in this table are in register-units. No conversion is necessary. For all listed sensor types the following registers are constant: bkgdDphi = useKsv = ksv = ft = 0, percentO2 = 20950. + + + +||Register Name (Register Number)||||||| +| :- | - | :- | :- | :- | :- | :- | :- | +|Sensor Type(s)|f (6) |m (7) |calFreq |tt (9) |kt (10) |bkgdAmpl (11)|mt (16) | +||||(8) ||||| +|X, S |804 |122 |4000 |-56 |969 |see eq. 1 |-303 | +|XZ |836 |49 |4000 |-29 |549 |see eq. 1 |-32 | +|Z, Y |817 |106 |4000 |-70 |953 |0 |-301 | +|W |817 |106 |4000 |-43 |799 |see eq. 1 |-301 | +|U, T |827 |75 |470 |-350 |874 |see eq. 1 |-106 | + +7. Calibration Registers (Optical Temperature Sensors) + +These read/write registers contain all information about the sensor calibration. The register block number is 1. They can be manipulated by using the commands RMR [(2.3.8), ](#_page20_x54.00_y432.92)WTM ([2.3.9), a](#_page21_x54.00_y147.92)nd SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +Example Communication (reading the first 2 registers) Command: RMR˽1˽1˽0˽2↵ + +Response: RMR˽1˽1˽0˽2˽343˽223↵ + +Example Communication (writing the 10th register *Tofs*) Command: WTM˽1˽1˽9˽1˽-1023↵ + +Response: WTM˽1˽1˽9˽1˽-1023↵ + +Note, the specific definition of the *Calibration* registers depends on the analyte of the connected sensor head. This chapter describes the definition of the *Calibration* registers, if an optical temperature sensor is connected. Important, do not forget to adjust the *Settings*.*analyte* to 2 in this case. This ensures, that the device applies the calibration registers accordingly. + +These registers provide all information needed for converting the raw value *Results.dphi* into the temperature given in *Results.tempOptical*. The following table provides an overview. The registers can be grouped into 3 different categories as indicated by the circles in the first column.![ref1] + + + +|Reg. Nr. |Label |Unit |Configured by|Description | +| - | - | - | - | - | +|S 0 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.069.png)|*M* |1 |sensor code|Sensor code constant| +|S 1 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.070.png)|*N* |1 |sensor code|Sensor code constant| +|2-5 |Reserved* |||| +|T 6 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.071.png)|*C* |0\.001 |software tools (or section [2.7.3) ](#_page33_x54.00_y426.92)|Sensor type specific constant| +|7-8 |Reserved* |||| +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|C 9 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.072.png)|*Tofs* |0\.001 K |command COT |Offset temperature used for single point calibration (e.g. -1230 corresponds to an offset of -1.23K) | +| - | - | - | - | :- | +|10 |Reserved* |||| +|T 11 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.073.png)|*bkgdAmpl* |0\.001 mV |software tools (or section [2.7.3) ](#_page33_x54.00_y426.92)|Sensor type specific constant| +|T 12 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.074.png)|*bkgdDphi* |0\.001° |software tools (or section [2.7.3) ](#_page33_x54.00_y426.92)|Sensor type specific constant| +|13-29 |Reserved* |||| +1. C User Calibration![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.075.png) + +The register *Tofs* contains a simple offset user calibration. The command COT (2.3.4) will adjust this register. + +2. S Sensor Code Constants![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.076.png) + +These registers comprise constants which must be adjusted for each individual sensor head. These constants are part of the sensor code printed on the label attached to the sensor head. An example explains how to deduct these constants from the sensor code: + +We assume the following Sensor Code: CD6-303-407 Then the register *M* must be adjusted to *M* = 303. And the register *N* must be adjusted to *N* = 407. + +3. T Sensor Type Specific Constants![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.077.png) + +These registers comprise constants which are specific for the used sensor type (and not for each individual sensor head). It is recommended to determine the proper values by using the Windows software tools “Pyro DeveloperTool” or “Pyro Workbench” initially as a reference. These software tools will configure these registers based on the sensor code attached to the sensor head. + +Advanced users applying contactless sensor solutions like sensor spots or flow-through cells might adjust the registers *bkgdAmpl* and *bkdgDphi* additionally by using the commands BGC or BCL. Refer to section 2.3.6 [for mor](#_page19_x54.00_y402.92)e details. Standard users should use the described software tools for configuring these registers. For sensors using a 1 mm plastic fiber *bkgdAmpl* and *bkgdDphi* can be estimated with Fehler! Verweisquelle konnte nicht gefunden werden. given in section 2.6.3. + +If the user intends to switch sensor type between measurements and a reconfiguration with the “Pyro DeveloperTool” or “Pyro Workbench” is not possible, the register *C* can be adjusted manually. For the sensor type “D” the value for *C* is 97. For the sensor type “C” the value of C is + +-27. Both values are in register units. No conversion is necessary. ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +8. Calibration Registers (pH Sensors) + +These read/write registers contain all information about the sensor calibration. The register block number is 1. They can be manipulated by using the commands RMR [(2.3.8), ](#_page20_x54.00_y432.92)WTM ([2.3.9), a](#_page21_x54.00_y147.92)nd SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +© PyroScience GmbH 35 +![ref2] + +Example Communication (reading the 14 Command: RMR˽1˽1˽13˽1↵ Response: RMR˽1˽1˽13˽1˽154↵ + +Example Communication (writing the 1 Command: WTM˽1˽1˽0˽1˽7013↵ Response: WTM˽1˽1˽0˽1˽7013↵ + +th register) st register) + +© PyroScience GmbH +![ref2] + +Note, the specific definition of the *Calibration* registers depends on the analyte of the connected sensor head. This chapter describes the definition of the *Calibration* registers, if an optical pH sensor is connected. Important, do not forget to adjust the *Settings*.*analyte* to 3 in this case. This ensures, that the device applies the calibration registers accordingly! + +These read/write registers provide all information needed for converting the raw value *Results.dphi* into the final pH value given in the *Results.ph*. The following table provides an overview on all *calibration* registers. These registers can be grouped into 3 different categories is indicated by the circles in the first column.![ref1] + + + +|Reg. Nr. |Label |Unit |Configured by|Description || +| - | - | - | - | - | :- | +|S 0 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.078.png)|*pka* |0\.001 pH |sensor code|Sensor code constant|| +|T 1 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.079.png)|*slope* |10-6|software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 2 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.080.png)|*dPhi\_ref* |0\.001° |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 3 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.081.png)|*pka\_t* |10-6 delta pH/K |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 4 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.082.png)|*dyn\_t* |10-6 1/K |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 5 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.083.png)|*bottom\_t* |10-6 1/K |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 6 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.084.png)|*slope\_t* |10-6 1/K |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 7 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.085.png)|*f* |10-6|software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 8 ![ref3]|*lambda\_std* |0\.001 nm |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 9 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.086.png)|*pka\_is1* |10-6|software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 10 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.087.png)|*pka\_is2* |10-6|software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 11 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.088.png)|*bkgdAmpl* |0\.001 mV |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|T 12 ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.089.png)|*bkgdDphi* |0\.001° |software tools (or section 2.8.3[) ](#_page35_x54.00_y761.92)|Sensor type specific constant|| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.090.png)

` `13

|*offset* |0\.001 pH |command CPH ||| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.091.png)

` `14

|*dPhi1* |0\.001° |command CPH ||| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.092.png)

` `15

|*pH1* |0\.001 |command CPH ||| +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.093.png)

` `16

|*temp1* |0\.001 °C |command CPH ||| +| - | - | - | - | :- | :- | +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.094.png)

` `17

|*salinity1* |0\.001 g/L |command CPH ||| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.095.png)

` `18

|*ldev1* |0\.001 nm |command CPH ||| +|

C S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.096.png)

19

|*dPhi2* |0\.001° |command CPH (or sensor code)||| +|

C S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.097.png)

20

|*pH2* |0\.001 pH |command CPH (or sensor code)||| +|

C S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.098.png)

21

|*temp2* |0\.001 °C |command CPH (or sensor code)||| +|

C S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.099.png)

22

|*salinity2* |0\.001 g/L |command CPH (or sensor code)||| +|

C S ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.100.png)

23

|*ldev2* |0\.001 nm |command CPH (or sensor code)||| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.101.png)

` `24

|*Aon* |10-6|command CPH ||| +|

C ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.102.png)

` `25

|*Aoff* |10-6|command CPH ||| +|26-29 |Reserved ||||| +1. C User Calibration![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.103.png) + +These registers are adjusted by applying the command CPH (2.3.5). When[ the sen](#_page18_x54.00_y318.92)sor is switched the offset *register* must be reset to 0. + +2. S Sensor Code Constants![ref4] + +The register *pka* is a constant which must be adjusted for each individual sensor head. This constant is printed on the label attached to the sensor head. + +A two-point calibration by the user calibration is generally advised for highest accuracy. However, the label attached to the sensor head contains a factory calibration for the calibration point at high pH (*dPhi2*). In this case only a 1-point calibration at low pH is required by the user. + +On sensor heads produced after 11/2021 the value of *dPhi2* is printed on the label of the sensor. If this value is not printed on your sensor head you can decode it from the last 2 digits of the sensor code with this formula: *dPhi2* = 47 + 10/99\*lastTwoDigits + +For the example sensor code SAC7-387-250 this would result in: *dPhi2* = 47 + 10/99\*50 + +- 52.05°. *dPhi2* is the hypothetical phase angle at *pH2*=14, *temp2*=20°C, *salinity2*=7.5 and *ldev2*=623. For this example the following command would be used to set the registers on the device: + + WTM˽**C**˽1˽19˽5˽52050˽14000˽20000˽7500˽62300↵ where C has to be replaced with the channel number. + + If the sensor will be calibrated with a two-point calibration this step can be omitted. + +3. T Sensor Type Specific Constants![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.104.png)![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +These registers comprise constants which are specific for the used sensor type (and not for each individual sensor head). It is recommended to adjust the proper values by using the Windows software tools “Pyro DeveloperTool” or “Pyro Workbench”. These software tools will configure these registers based on the sensor code attached to the sensor head. + +Advanced users applying contactless sensor solutions like sensor spots or flow-through cells might adjust the registers *bkgdAmpl* and *bkdgDphi* additionally by using the commands BGC or BCL. Refer to section 2.3.6 [for mor](#_page19_x54.00_y402.92)e details. Standard users should use the described software tools for configuring these registers. For sensors using a 1 mm plastic fiber *bkgdAmpl* and *bkgdDphi* can be estimated with Fehler! Verweisquelle konnte nicht gefunden werden. given in section 2.6.3. + +If the user intends to switch sensor type between measurements and a reconfiguration with the “Pyro DeveloperTool” or “Pyro Workbench” is not possible, the registers can be adjusted manually. The following table lists the type specific calibration registers for a few selected pH sensors. The values in this table are in register-units. No conversion is necessary. For all listed sensor types the following registers are constant: *dPhi*\_*ref* = 57800, *slope*\_t = 0, *lambda*\_*std* = 623000, *bkgdDphi* = 0. If the sensor is switched the *offset* register should be reset to 0. + + + +||Register Name (Register Number)|||||||| +| :- | - | :- | :- | :- | :- | :- | :- | :- | +|Sensor Type(s) |slope (1) |pka\_t (3) |dyn\_t (4) |bottom\_t (5) |f (7) |pka\_is1 (9) |pka\_is2 (10) |bkgdAmpl (11) | +|SA, XA |1037000|-9570 |-955 |-676 |39500 |2330000|250000 |see eq. 1 | +|SB, XB |1081000|-11500 |-2090 |199 |32500 |2540000|250000 |see eq. 1 | +|SC, XC |1033000|-16300 |-521 |-1255 |32500 |969700 |126300 |see eq. 1 | +|SD, XD |1034800|-2756 |240 |145 |38710 |0 |250000 |see eq. 1 | +|SE, XE |1000000|-8568 |207 |-4130 |37980 |702000 |250000 |see eq. 1 | +|SF, XF |1000000|-7344 |-645 |-834 |35760 |1358000|250000 |see eq. 1 | + +9. Results Registers + +The read-only *Results* registers provide the status and the results of the last measurement. This register block is not saved within the flash memory, it is only kept in the volatile RAM memory. The register block number is 3. They can be read by using the command RMR (2.[3.8). ](#_page20_x54.00_y432.92) + +Example Communication (reading the first 8 registers) + +Command: RMR˽1˽3˽0˽15↵ + +Response: RMR˽1˽3˽0˽15˽0˽21099˽210837˽203987˽97876˽23656˽21065˽234098↵ + +Interpreted as: status = 0, dphi = 21.099°, umolar = 210.837 µmol/L, mbar = 203.987 hPa, airSat = 97.876 %air sat., tempSample = 23.656°C, tempCase = 21.065°C, signalIntensity = 234.098 mV ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +Note, the MEA command (2.3.[1) returns](#_page15_x54.00_y531.92) by default the content of the *Result* registers in the command response. So in standard applications it is not necessary to use the RMR command. + + + +|Reg. Nr. |Label |Unit |Range |Description | +| - | - | - | - | - | +|0 |*status*||int32 |ERROR / Warning Flags of the last measurement (refer to separate table below)| +|1 |*dphi*|0\.001° |int32 |Phase shift of optical measurement (raw data)| +|2 |*umolar\*\**|0\.001 µmol/L |int32 |Dissolved oxygen concentration (valid only in water) | +|3 |*mbar\*\**|

0\.001 mbar

= 0.001 hPa

|int32 |Partial pressure oxygen (hPa=mbar) (valid in gases and in liquids)| +|4 |*airSat\*\**|0\.001 %air sat. |int32 |Dissolved oxygen given as % air saturation (valid only in liquids) | +|5 |*tempSample*|0\.001°C |int32 |Sample temperature (typ. Pt100 sensor)| +|6 |*tempCase*|0\.001°C |int32 |Case temperature within the device| +|7 |*signalIntensity\**|0\.001 mV |int32 |Signal intensity of optical measurement| +|8 |*ambientLight*|0\.001 mV |int32 |Ambient light entering the sensor| +|9 |*pressure*|0\.001 mbar |int32 |Ambient air pressure| +|10 |*humidity*|0\.001 %RH |int32 |Relative humidity within the device| +|11 |*resistorTemp*|0\.001 Ohm |int32 |Resistance of the sample temperature sensor | +|12 |*percentO2\*\**|0\.001 %O2 |int32 |Oxygen volume fraction (valid only in gases)| +|13 |*tempOptical*|0\.001 °C |int32 |Temperature measured with optical temperature sensor| +|14 |*ph*|0\.001 |int32 |pH value measured by optical pH sensors| +|15 |*ldev*|0\.001 nm |int32 |Only for internal usage| +|16-17 |Reserved* |||| +* If *automaticAmpLevel* is enabled in *settings.options*, then *signalIntensity* is given as it would be for the actual amplification level adjusted in *settings.amp*! For example if *settings.amp*=7 (=400x) and the measurement was due to *automaticAmpLevel* performed with 80x amplification and a real photodetector signal intensity of 800mV, then *signalIntensity* will have the value 800mV x 400 / 80 = 4000mV. + + \*\* If *1000xOxygen* is enabled in *settings.options*, then these registers are internally multiplied by 1000, giving 3 more digits of precision after conversion to floating point values. + +Status Register. The *status* register contains several bit flags indicating errors or warnings of the last measured data point. + +It is on the users authority to check the *status* register after each measurement for ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.105.png)possible Warnings or ERRORS. Especially in case of ERRORS, the given results might be not valid. + +The user has to distinguish between warnings and errors. A warning indicates, that the measurement results are in principle still valid, but their precision and/or accuracy might be deteriorated. An error means, that the respective measurement result is not at all valid. ![ref1] + + + +|status Bit |ERROR / Warning Description| +| - | - | +|Bit 0 (add 1)|Warning - automatic amplification level active| +|Bit 1 (add 2)|Warning - sensor signal intensity low | +|Bit 2 (add 4)|ERROR - optical detector saturated| +|Bit 3 (add 8)|Warning - reference signal intensity too low | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|Bit 4 (add 16)||ERROR - reference signal too high| +| - | :- | - | +|Bit 5 (add 32)||ERROR - failure of sample temperature sensor (e.g. Pt100) | +|Bit 6 (add 64)||Warning – 1000xOxygen enabled| +|Bit 7 (add 128)||Warning - high humidity (>90%RH) within the module| +|Bit 8 (add 256)||ERROR - failure of case temperature sensor| +|Bit 9 (add 512) ||ERROR - failure of pressure sensor| +|Bit 10 (add 1024)||ERROR - failure of humidity sensor| + +Example: *status* = 34 = 2 + 32 means, that there is a warning about low signal intensity of the optical sensor, and that the external temperature sensor (Pt100) had a failure. + +Results of optical oxygen sensors are given in the registers *umolar*, *mbar*, *airSat*, and *percentO2*. Refer to the table above for the details on the different oxygen units. These registers show only results if *Settings.analyte* = 1. Otherwise they are set to 0. + +Results of optical temperature sensors are given in the register *tempOptical*. This register shows only a result if *Settings.analyte* = 2. Otherwise it is set to 0. + +Results of optical pH sensors are given in the register *ph*. This register shows only a result if *Settings.analyte* = 3. Otherwise it is set to 0. + +Results of sample temperature sensors (typ. Pt100), case temperature sensors, internal pressure sensors and internal humidity sensors are given in *tempSample*, *tempCase*, *resistorTemp*, *pressure* and *humidity*, respectively. + +Invalid Results. If for any reason the measurement produces an invalid results (e.g. the signal intensity of an optical sensor is much too low, or the reference LED measurement had a failure etc.), then the result register contains the integer value -300000. Any higher programming language should interpret this as “not a number” (NaN). + +Raw data of the optical measurement. The raw data given by the optical phase-shift measurement are the “phase shift” *dphi*, the *signalIntensity*, and *ambientLight*.The phase shift *dphi* is the essential value used for calculating the value of the sensor analyte (see below). *signalIntensity* represents the measured luminescent signal intensity of the optical sensor. *signalIntensity* can be also used for checking the quality of the sensor (e.g. a broken sensor tip will result in a rapid decrease of the intensity). Please note, that the signal intensity is highly dependent e.g. on the actual oxygen concentration and/or on the temperature. Therefore, measured signal intensities can be only compared with each other, if they have been measured at similar analyte levels and temperatures. Immediately before each optical measurement, the device measures also the ambient light entering the optical detector and stores it in *ambientLight*. Considerable amounts of ambient light might enter the optoelectronics, if the sensor is exposed e.g. to direct sun light. This might lead to a saturation of the optical detector and to an invalid optical measurement. As a thumb of rule the sum of *ambientLight* and *signalIntensity* should not exceed 2000mV. If it exceeds this value, the amplification level in the *settings.amp* should be lowered. Or the sensor tip should be shaded from the external light source. Or *automaticAmpLevel* should be enabled in *settings.options*. ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +10. AnalogOutput Registers + +These read/write registers contain the configuration of the analog outputs (if available). The register block number is 4. They can be manipulated by using the commands RMR [(2.3.8), ](#_page20_x54.00_y432.92)WTM ([2.3.9), a](#_page21_x54.00_y147.92)nd SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +Example Communication (reading the first 4 registers) Command: RMR˽1˽4˽0˽4↵ + +Response: RMR˽1˽4˽0˽4˽260˽516˽1028˽2052↵ Example Communication (writing the 5th register) + +Command: WTM˽1˽4˽4˽0↵ + +Response: WTM˽1˽4˽4˽0 ↵ + +The maximum number of supported analog outputs is 4. Any result register from any optical channel can be mapped on the analog outputs, whereby the linear scaling can be freely adjusted by min and max values. If the corresponding result register contains an invalid result (i.e. register value is -300000), then the analog output is set to 0.0V or 0mA. + +Note, these registers can be comfortably configured with the Windows software tools Pyro DeveloperTool or Pyro Woekbench.![ref1] + + + +|Reg. Nr. |Label |Unit ||Range |Description | +| - | - | - | :- | - | - | +|0 |*aoSelectA* |bits 0-6: regNr bit 7: alarm\*\* bits 8-15: C ||regNr: 0..17 alarm: 0..1 C: 1..4 |regNr is the register number of the *results*-register and C the optical channel number which is used for the analog | +||||||output A. | +||||||Use alarm=0 for standard analog output.| +||||||Use alarm=1 for alarm output, see below | +||||||\*| +|1 |*aoSelectB* |as above ||see above|As *aoSelectA* but given for analog output | +||||||B.| +|2 |*aoSelectC* |as above ||see above|As *aoSelectA* but given for analog output | +||||||C.| +|3 |*aoSelectD* |as above ||see above|As *aoSelectA* but given for analog output | +||||||D.| +|4 |*aoMinA* |unit identical to the unit of the register number regNr in the *results*-registers ||int32 |Defines the *results*-register value (selected by *aoSelectA*), which corresponds to the minimum output level (0.0V or 4mA).| +|5 |*aoMinB* |as above ||int32 |As *aoMinA* but given for analog output | +||||||B.| +|6 |*aoMinC* |as above ||int32 |As *aoMinA* but given for analog output | +||||||C.| +|7 |*aoMinD* |as above ||int32 |As *aoMinA* but given for analog output | +||||||D.| +|8 |*aoMaxA* |unit identical to the unit of the register ||int32 |Defines the *results*-register value (selected by *aoSelectA*), which | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|||number regNr in the *results*-registers |||corresponds to the maximum output level (Umax or 20mA)| +| :- | :- | :- | :- | :- | :- | +|9 |*aoMaxB* |as above ||int32 |As *aoMaxA* but given for analog output | +||||||B.| +|10 |*aoMaxC* |as above ||int32 |As *aoMaxA* but given for analog output | +||||||C.| +|11 |*aoMaxD* |as above ||int32 |As *aoMaxA* but given for analog output | +||||||D.| + +* If alarm=1 then the analog output acts as a digital alarm output, giving 0.0V (or 4mA for current outputs) if the selected register is within the range defined by aoMinA and aoMaxA. If outside that range, the output is set to Umax (or 20mA). For invalid results (i.e. register value is -300000) it is set to Umax (or 0mA). +11. Resistive Temperature Sensor Registers + +These read/write registers contain the configuration of the resistive temperature measurement (e.g. Pt100 temperature sensor connected to the sample temperature port. The register block number is 20. They can be manipulated by using the commands RMR [(2.3.8), ](#_page20_x54.00_y432.92)WTM ([2.3.9), a](#_page21_x54.00_y147.92)nd SVS (2.[3.10). ](#_page21_x54.00_y584.92) + +This register block contains 8 registers, but only the register *tempOffset* is interesting for developers. This register can be used to perform a simple offset user calibration of the attached sample temperature sensor. The following example communication show how to read and write this single register: + +Example Communication for reading *tempOffset* + +Command: RMR˽1˽20˽6˽1↵ + +Response: RMR˽1˽20˽6˽1˽1200↵ + +In this example the current temperature offset is +1.2 K. Example Communication for writing *tempOffset* + +Command: WTM˽1˽20˽6˽-3340↵ + +Response: WTM˽1˽20˽6˽-3340↵ + +This example adjusts the temperature offset to -3.34 K. + +Note: The default value of *tempOffset* is 0. Resistive temperature sensors are generally ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.106.png)quite precise and long-term stable. In many typical applications it is not required to adjust this offset. + +Important: Changing the *tempOffset* register will have immediate impact on the calibration of any optical sensor, which is using the sample temperature sensor for automatic temperature compensation. Therefore, it is generally recommended to adjust *tempOffset* before the optical sensors are calibrated. + +Warning: Never change any of the registers *reg0-reg5* and *reg7*. They contain the factory configuration of the internal circuits used for reading out the sample temperature sensors. Please contact PyroScience if you have changed some of these registers accidentally.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual![ref1] + + + +|Reg. Nr. |Label |Unit |Range |Description | +| - | - | - | - | - | +|0 |*reg0* |||Never change! | +|1 |*reg1* |||Never change! | +|2 |*reg2* |||Never change! | +|3 |*reg3* |||Never change! | +|4 |*reg4* |||Never change! | +|5 |*reg5* |||Never change! | +|6 |*tempOffset* |0\.001 K |int32 |Offset added to measured temperature| +|7 |*reg7* |||Never change! | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +MODBUS PROTOCOL + +1. General Structure![ref1] + +![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.107.jpeg) + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +The figure above shows the general structure of some representative solutions from PyroScience offering a Modbus interface. + +All PyroScience devices possess a central microcontroller which is communicating via a UART interface based on the proprietary PyroScience protocol (2.1). Devices[ with](#_page7_x54.00_y134.92) a RS485/Modbus interface possess a second “Modbus microcontroller” which acts as a translator: it communicates with the outer world via the RS485 interface based on the Modbus protocol, while it is internally communicating with the central microcontroller based on the PyroScience protocol. + +1. Modbus RTU Standard + +PyroScience devices offering a Modbus interface are compatible with the Modbus RTU protocol as described in the official documentation “Modbus over serial line specification and implementation guide V1.02” and “Modbus application protocol specification V1.1b” provided by the Modbus Organization inc. ( https://[modbus.org ). ](https://modbus.org/) + +The advantages of RS485 in combination with the Modbus RTU protocol are: + +- cable lengths up to several 100m are supported +- up to 247 devices can be connected to a 4-wire RS485 bus +- Modbus RTU is a popular communication protocol +2. Modbus Implementation in PyroScience Devices + +The PyroScience protocol is based on (1) registers and on (2) commands. In contrast, the Modbus protocol is solely based on registers. It is the task of the Modbus microcontroller to map the functionality of the PyroScience registers and commands onto the Modbus register structure. PyroScience registers are simply mapped onto corresponding Modbus registers as outlined in the following chapters. The implementation of PyroScience commands into the Modbus protocol is a little bit more complex, it is realized by the special command register block as described in 3.3.6. + +Note: If the content of Modbus registers is changed by standard Modbus write accesses, ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.108.png)these changes are only kept until the next power cycle. Please refer to section 3.3.6 how to make such changes persistent after power cycles. + +The enumeration of Modbus registers is always based on 16bit registers. PyroScience devices use by default always 32bit registers (signed integer), so two Modbus registers are always coupled to a 32bit register. Within this document a 32bit register is therefore indicated for example like “40001/40002”, which refers to a signed 32bit integer located in the two 16bit Modbus registers 40001 and 40002. The used byte order is “CDAB” , so in this example the register 40001 contains the least significant 16bit of the 32bit integer, and the register 40002 contains the most significant ones. This is also known as little-endian byte swap.![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +3. Modbus Slave Address + +The default Modbus slave address is 1. Refer to 3.3.5 how[ to change](#_page49_x54.00_y657.92) this slave address. + +4. Operation Principle of Periodic Measurements + +The periodic measurements mode is activated by writing the desired sample interval in units of ms into the Modbus register *broadcast* located at the address 40021/40022 [(3.3.2). ](#_page47_x54.00_y490.92)The minimum realizable sample interval depends on the hardware. For underwater devices (e.g. AquapHOx) it can be as low as 50 ms, while for most OEM devices (e.g. PICO-x) the minimum realizable sample interval is 1000 ms. The reason is, that these OEM devices are optimized for low energy and not for high speed operation. The maximum possible broadcast interval is 65000 ms = 65 s. Writing a 0 to this register will disable periodic measurements. + +The results of the latest periodic measurement can read from the *Results* registers [(3.2.1). ](#_page45_x54.00_y186.92)Or it can be read from the analog output. + +5. Operation Principle of Triggered Measurements + +Individual measurements can be triggered by applying the MEA command by using the special command registers. Please refer to 3.3.6 for [more de](#_page50_x54.00_y189.92)tails. + +The results of the measurement can read from the *Results* registers (3.2.1). Or it ca[n be ](#_page45_x54.00_y186.92)read from the analog output. + +6. Transparent Mode and Evaluation Software + +The Modbus microcontroller can be optionally switched into a transparent mode, where the RS485 communication is again based on the PyroScience protocol (i.e. the Modbus microcontroller is simply transmitting any received message without any changes). By using the optional RS485-USB adapter cables all PyroScience Modbus devices can be operated with the Windows software Pyro DeveloperTool (some devices also with the software Pyro Workbench). These software packages use the transparent mode for operating the devices. + +IMPORTANT: During the transparent mode, the analog output is not operational! But the ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.109.png)analog output can be configured. + +The Modbus protocol can be used with up to 247 devices connected to the same RS485 bus. However, the transparent mode does not work with a bus system. During the transparent mode only a single device can be connected e.g. by a RS485-USB adapter cable to a computer. ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +2. Read-Only Modbus Registers + +Read-only Modbus registers, also known as “input registers” are used for information which is readable, but not writeable by the Modbus master. Their entity numbers begin with 3 and they can be read from using function code 4. + +1. Results Registers + +The register block *Results* (2.9) [of the](#_page36_x54.00_y519.92) PyroScience protocol is mapped to the following Modbus registers: + + + +|Modbus protocol|||PyroScience protocol|||||| +| - | :- | :- | - | :- | :- | :- | :- | :- | +|Entity Nr. ||Input register |Label ||Range |Reg. Block |Reg. Nr. || +|||address ||||||| +|30001/30002||0000/0001|*status* ||int32 |3 |0 || +|30003/30004||0002/0003|*dphi* ||int32 |3 |1 || +|30005/30006||0004/0005|*umolar* ||int32 |3 |2 || +|30007/30008||0006/0007|*mbar* ||int32 |3 |3 || +|30009/30010||0008/0009|*airSat* ||int32 |3 |4 || +|30011/30012||0010/0011|*tempSample* ||int32 |3 |5 || +|30013/30014||0012/0013|*tempCase* ||int32 |3 |6 || +|30015/30016||0014/0015|*signalIntensity* ||int32 |3 |7 || +|30017/30018||0016/0017|*ambientLight* ||int32 |3 |8 || +|30019/30020||0018/0019|*pressure* ||int32 |3 |9 || +|30021/30022||0020/0021|*humidity* ||int32 |3 |10 || +|30023/30024||0022/0023|*resistorTemp* ||int32 |3 |11 || +|30025/30026||0024/0025|*percentO2* ||int32 |3 |12 || +|30027/30028||0026/0027|*tempOptical* ||int32 |3 |13 || +|30029/30030||0028/0029|*ph* ||int32 |3 |14 || +|30031/30032||0030/0031|*ldev* ||int32 |3 |15 || +|30033/30034||0032/0033|-- reserved -- ||- |- |- || +|30035/30036||0034/0035|-- reserved -- ||- |- |- || +|30037/30038||0036/0037|data point counter||uint32 |- |- || + +The registers 30001/30002 up to 30035/30036 are mapped onto the corresponding *Results* registers. Refer to 2.9 [for de](#_page36_x54.00_y519.92)tails on the definitions of each register. + +The registers 30037/30038 contain a 32 bit data point counter, which is incremented by one for each performed measurement. After a reset or a power cycle this counter starts at 0. This register has no counterpart within the PyroScience registers. + +2. Device Info Registers + +The device info registers have no counterpart within the PyroScience registers. Instead, they contain the information returned by the PyroScience commands #VERS and #IDNR ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +of the PyroScience protocol, and some specific information on the Modbus microcontroller. + + + +|Modbus protocol|||PyroScience protocol||||| +| - | :- | :- | - | :- | :- | :- | :- | +|Entity Nr. |Input ||Label ||Range |Command |Parameter | +||register ||||||Nr. | +||address ||||||| +|36001/36002 |6000/6001||*PyroScience device ID* ||uint32 |#VERS |1 | +|36003/36004 |6002/6003||*Number of optical channels*||uint32 |#VERS |2 | +|36005/36006 |6004/6005||*Firmware version of the* ||uint32 |#VERS |3 | +||||*central microcontroller*||||| +|36007/36008 |6006/6007||*Available sensor types and* ||uint32 |#VERS |4 | +||||*supported analytes*||||| +|36009/36010 |6008/6009||*Firmware build number*||uint32 |#VERS |5 | +|36011/36012 |6010/6011||*Features* ||uint32 |#VERS |6 | +|36013/36014 |6012/6013||*MSW Unique ID number*||uint32 |#IDNR |1 (MSW) | +||||*(most significant 32bit of* ||||| +||||*64bit UID)* ||||| +|36015/36016 |6014/6015||*LSW Unique ID number*||uint32 |#IDNR |1 (LSW) | +||||*(least significant 32bit of* ||||| +||||*64bit UID)* ||||| +|36017/36018 |6016/6017||*Firmware version of the* ||uint32 |- |- | +||||*Modbus microcontroller.* ||||| +|36019/36020 |6018/6019||*Internal baud rate between* ||uint32 |- |- | +||||*the central and the Modbus* ||||| +||||*microcontroller* ||||| +After power-up the Modbus microcontroller automatically sends the commands #VERS and #IDNR to the central microcontroller and writes the returned parameters into the following Modbus registers. + +The registers 36001/36002 up to 36011/36012 contain the information returned by the PyroScience command #VERS. Please refer to 2.2.1 for[ more d](#_page11_x54.00_y644.92)etails. + +The registers 36013/36014 up to 36015/36016 contain the information returned by the PyroScience command #IDNR. Note, that the 64bit unique ID is splitted into two 32bit registers. Please refer to 2.2.2 [for mor](#_page12_x54.00_y618.92)e details. + +The register 36017/36018 contains the firmware version of the Modbus microcontroller. For example, a value of 114 corresponds to firmware version 1.14. + +The register 36019/36020 contains baud rate used for the internal communication between the central microcontroller and the Modbus microcontroller (e.g. 19200 or 115200). ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +3. Read-Write Modbus Registers + +Read-write Modbus registers are called “holding registers” are used for data which can be read or written. They use the address space 4xxxx starting with address 40001. + +Read-Write Modbus registers, also known as “holding registers”, are used for data which can be both read and written by the Modbus master. Their entity numbers begin with 4 and they can be read using function code 3 or written by using function codes 6 and 16. + +1. Making Register Changes Persistent During Power Cycles + +The values in the different Modbus registers can be changed by the standard Modbus write commands. It is important to understand, that such changes are only kept until the next power cycle. + +In order to make any changes persistent even after a power cycle, the user has to trigger ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.110.png)the special command SVS by writing the value 16 to the Modbus register 49001/49002 (refer also to 3.[3.6. and](#_page50_x54.00_y189.92) 2.3.[10). ](#_page21_x54.00_y584.92) + +Background: A Modbus write access will trigger a write to the corresponding PyroScience registers in the central microcontroller, which are kept in the volatile memory. If the special command SVS is triggered, the Modbus controller will send the PyroScience command SVS to the central microcontroller. This will save the current register configuration in the flash memory. After a power cycle, register configuration is automatically read from this flash memory and transferred into the corresponding Modbus registers. + +2. Settings Registers + +The register block *Settings* (0) of[ the](#_page23_x54.00_y514.92) PyroScience protocol is mapped to the following Modbus registers:![ref1] + + + +|Modbus protocol||PyroScience protocol||||| +| - | :- | - | :- | :- | :- | :- | +|Entity Nr. ||Holding register |Label |Range |Reg. Block |Reg. Nr. | +|||address ||||| +|40001/40002 ||0000/0001|*temp* |int32 |0 |0 | +|40003/40004 ||0002/0003|*pressure* |int32 |0 |1 | +|40005/40006 ||0004/0005|*salinity* |int32 |0 |2 | +|40007/40008 ||0006/0007|*duration* |int32 |0 |3 | +|40009/40010 ||0008/0009|*intensity* |int32 |0 |4 | +|40011/40012 ||0010/0011|*amp* |int32 |0 |5 | +|40013/40014 ||0012/0013|*frequency* |int32 |0 |6 | +|40015/40016 ||0014/0015|*crcEnable* |int32 |0 |7 | +|40017/40018||0016/0017|Reserved |int32 |0 |8 | +|40019/40020 ||0018/0019|*options* |int32 |0 |9 | +|40021/40022 ||0020/0021|*broadcast* |int32 |0 |10 | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|40023/40024 |0022/0023|*analyte* |int32 |0 |11 | +| - | - | - | - | - | - | +|40025/40026 |0024/0025|*fiberType* |int32 |0 |12 | +|

40027/40028

- 40039/40040

|0026/0027 – 0038/0039|-- reserved -- |int32 |0 |13 - 19 | + +Most of these Modbus registers are defined exactly as their corresponding PyroScience registers. Refer to section 2.5 for more details. + +The only exception is the register *broadcast* (40021/40022) which is only mapped onto the lower 16 bit of the PyroScience register *Settings.broadcast*. These 16bit contain the broadcast interval giving a range of 0-60000ms (0-60s). The upper 16 bit of the PyroScience register *Settings.broadcast* are automatically configured by the Modbus microcontroller. + +This *broadcast* register is very essential for operating the device in the periodic sampling mode. Refer for details to 3.1.4. + +3. Calibration Registers + +The register block *Calibration* of the PyroScience protocol is mapped to the following Modbus registers:![ref1] + + + +|Modbus protocol||PyroScience protocol||||||| +| - | :- | - | :- | :- | :- | :- | :- | :- | +|Entity Nr. |Holding ||Label |Label |Label |Range |Reg. |Reg. Nr. | +||register ||(Oxygen) |(Temperature)|(pH) ||Block || +||address |||||||| +|40101/40102 |0100/0101||*dphi0* |*M* |*pka* |int32 |1 |0 | +|40103/40104 |0102/0103||*dphi100* |*N* |*slope* |int32 |1 |1 | +|40105/40106 |0104/0105||*temp0* |-- reserved -- |*dPhi\_ref* |int32 |1 |2 | +|40107/40108 |0106/0107||*temp100* |-- reserved -- |*pka\_t* |int32 |1 |3 | +|40109/40110 |0108/0109||*pressure* |-- reserved -- |*dyn\_t* |int32 |1 |4 | +|40111/40112 |0110/0111||*humidity* |-- reserved -- |*bottom\_t* |int32 |1 |5 | +|40113/40114 |0112/0113||*f* |*C* |*slope\_t* |int32 |1 |6 | +|40115/40116 |0114/0115||*m* |-- reserved -- |*f* |int32 |1 |7 | +|40117/40118 |0116/0117||*calFreq* |-- reserved -- |*lambda\_std* |int32 |1 |8 | +|40119/40120 |0118/0119||*tt* |*Tofs* |*pka\_is1* |int32 |1 |9 | +|40121/40122 |0120/0121||*kt* |-- reserved -- |*pka\_is2* |int32 |1 |10 | +|40123/40124 |0122/0123||*bkgdAmpl* |*bkgdAmpl* |*bkgdAmpl* |int32 |1 |11 | +|40125/40126 |0124/0125||*bkgdDphi* |*bkgdDphi* |*bkgdDphi* |int32 |1 |12 | +|40127/40128 |0126/0127||*useKsv* |-- reserved -- |*offset* |int32 |1 |13 | +|40129/40130 |0128/0129||*ksv* |-- reserved -- |*dPhi1* |int32 |1 |14 | +|40131/40132 |0130/0131||*ft* |-- reserved -- |*pH1* |int32 |1 |15 | +|40133/40134 |0132/0133||*mt* |-- reserved -- |*temp1* |int32 |1 |16 | +|40135/40136 |0134/0135||-reserved- |-- reserved -- |*salinity1* |int32 |1 |17 | +|40137/40138 |0136/0137||*percentO2* |-- reserved -- |*ldev1* |int32 |1 |18 | +|40139/40140 |0138/0139|||-- reserved -- |*dPhi2* |int32 |1 |19 | +|40141/40142 |0140/0141|||-- reserved -- |*pH2* |int32 |1 |20 | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|40143/40|144 |0142/0143||-reserved- |-- reserved -- |*temp2* |int32 |1 |21 | +| - | - | - | :- | - | - | - | - | - | - | +|40145/40|146 |0144/0145||-reserved- |-- reserved -- |*salinity2* |int32 |1 |22 | +|40147/40|148 |0146/0147||-reserved- |-- reserved -- |*ldev2* |int32 |1 |23 | +|40149/40|150 |0148/0149||-reserved- |-- reserved -- |*Aon* |int32 |1 |24 | +|40151/40|152 |0150/0151||-reserved- |-- reserved -- |*Aoff* |int32 |1 |25 | +|40153/40|154 |0152/0153 ||-reserved- |-- reserved -- |-reserved-* |int32 |1 |26-29 | +|- 40159/40|160 |– 0158/0159|||||||| +Note, the register definitions depend on the analyte of the connected sensor head. All these Modbus registers are exactly mapped onto the corresponding PyroScience register. Refer to the sections 2.6, [2.7, ](#_page29_x54.00_y323.92)[and 2.](#_page32_x54.00_y249.92)8 for[ more](#_page34_x54.00_y85.92) details. + +4. Analog Output Registers + +The register block *AnalogOutput* of the PyroScience protocol is mapped to the following Modbus registers: + + + +|Modbus protocol||PyroScience protocol||||| +| - | :- | - | :- | :- | :- | :- | +|Entity Nr. ||Holding register |Label |Range |Reg. Block |Reg. Nr. | +|||address ||||| +|40401/40402 ||0400/0401|*aoSelectA* |int32 |4 |0 | +|40403/40404 ||0402/0403|*aoSelectB* |int32 |4 |1 | +|40405/40406 ||0404/0405|*aoSelectC* |int32 |4 |2 | +|40407/40408 ||0406/0407|*aoSelectD* |int32 |4 |3 | +|40409/40410 ||0408/0409|*aoMinA* |int32 |4 |4 | +|40411/40412 ||0410/0411|*aoMinB* |int32 |4 |5 | +|40413/40414 ||0412/0413|*aoMinC* |int32 |4 |6 | +|40415/40416 ||0414/0415|*aoMinD* |int32 |4 |7 | +|40417/40418 ||0416/0417|*aoMaxA* |int32 |4 |8 | +|40419/40420 ||0418/0419|*aoMaxB* |int32 |4 |9 | +|40421/40422 ||0420/0421|*aoMaxC* |int32 |4 |10 | +|40423/40424 ||0422/0423|*aoMaxD* |int32 |4 |11 | + +All these Modbus registers are exactly mapped onto the corresponding PyroScience register. Refer to the sections 2.10 [for more](#_page39_x54.00_y85.92) details. + +5. Modbus Slave Address Register + +A special Modbus register is used for defining the Modbus slave address:![ref1] + + + +|Modbus protocol|PyroScience protocol||||| +| - | - | :- | :- | :- | :- | +|Entity Nr. |Holding register address |Label |Range |Reg. Block |Reg. Nr. | +|43421/43422 |3420/3421|*slaveAddress* |1-247 |34 |10 | + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +This register is mapped to a hidden PyroScience register, which is not documented within this document. The default value is 1. Note, that changes to this register come effective after the next power cycle. After writing a new slave address to this register it is required to store the register configuration in the flash memory as described in section [3.3.1. ](#_page47_x54.00_y226.92) + +6. Command Registers + +The command registers are used for executing special commands. Some commands affect the Modbus microcontroller directly; other commands are forwarded to the central microcontroller.![ref1] + + + +|Entity Nr. |Holding ||Description || +| - | - | :- | - | :- | +||register |||| +||address |||| +|49001/49002|9000/9001||Command Register|| +||||If any of the following numbers are written to this register, the module || +||||will first send the Modbus response confirming the writing of this module. || +||||Then one of the following actions is executed.|| +|||||| +||||Register |Performed Action| +||||Content || +|||||| +||||0 |Sensor module is ready, the command register block can be | +|||||written and a new command can be triggered by writing a | +|||||number to this register here.| +|||||| +||||1 |Sensor module is busy. The command registers cannot be | +|||||written. A write access will give the Modbus error “Slave | +|||||Busy”. | +|||||| +||||10 |Flash status LED of the device. | +|||||(sends the #LOGO command to the central microcontroller) | +|||||| +||||11 |Trigger a single oxygen measurement.| +|||||(sends the MEA command to the central microcontroller) | +|||||| +||||12 |Calibrate an oxygen sensor at zero oxygen level.| +|||||(sends a CLO command to the central microcontroller) | +|||||| +||||13 |Calibrate an oxygen sensor at air oxygen level.| +|||||(sends a CHI command to the central microcontroller) | +|||||| +||||14 |Calibrate an optical temperature sensor.| +|||||(sends a COT command to the central microcontroller) | +|||||| +||||15 |Calibrate a pH sensor.| +|||||(sends a CPH command to the central microcontroller) | +|||||| +||||16 |Store all registers in flash memory as new default values | +|||||after a power cycle. (sends a SVS command to the central | +|||||microcontroller) | +|||||| +||||7777 |Triggers a firmware reset. | +|||||| +||||8888 |Switch into a transparent mode.| +|49003/49004|9002/9003||Parameter Register 1 required by some commands.|| +|49005/49006 |9004/9005||Parameter Register 2 required by some commands.|| + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + + + +|49007/49008 |9006/9007||Parameter Register|` `3 required by some commands.|| +| - | - | :- | - | - | :- | +|49009/49010 |9008/9009||Parameter Register|` `4 required by some commands.|| +|49011/49012 |9010/9011||Parameter Register|` `5 required by some commands.|| +|49013/49014 |9012/9013||Parameter Register|` `6 required by some commands.|| +|49015/49016 |9014/9015||Parameter Register|` `7 required by some commands.|| +|49017/49018 |9016/9017||Parameter Register|` `8 required by some commands.|| +If a command requires parameters, it is necessary to write these into the parameter ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.111.png)registers, before triggering the command by writing the corresponding number into 49001/49002. + +Since PyroScience Modbus devices only support one optical channel, the first parameter register (49003/49004) refers to the first actual parameter necessary for each command, not the channel number. + +Example to execute the MEA command, the “enabled sensor types” parameter s has to be written into registers 49003/49004 and then 11 has to be written into registers 49001/49002. + +Writing 10 to the Command Register will trigger, that the Modbus controller sends the PyroScience command #LOGO to the central microcontroller. Please refer to 2.2.3 for more details on this command. + +Writing 11 to the Command Register will trigger, that the Modbus controller sends the PyroScience command MEA to the central microcontroller. The required parameter must be written to Parameter Register 1. Please refer to 2.3.1 for [more detai](#_page15_x54.00_y531.92)ls on this command. + +Writing 12 to the Command Register will trigger, that the Modbus controller sends the PyroScience command CLO to the central microcontroller. The required parameters must be written to the Parameter Registers. Please refer to 2.3.3 for mo[re detai](#_page17_x54.00_y431.92)ls on this command. + +Writing 13 to the Command Register will trigger, that the Modbus controller sends the PyroScience command CHI to the central microcontroller. The required parameters must be written to the Parameter Registers. Please refer to 2.3.2 for mo[re detai](#_page16_x54.00_y628.92)ls on this command. + +Writing 14 to the Command Register will trigger, that the Modbus controller sends the PyroScience command COT to the central microcontroller. The required parameters must be written to the Parameter Registers. Please refer to 2.3.4 for mo[re detai](#_page17_x54.00_y760.92)ls on this command. + +Writing 15 to the Command Register will trigger, that the Modbus controller sends the PyroScience command CPH to the central microcontroller. The required parameters must ![ref1] + +PyroScience Unified Protocol FW4.10-4.19 | Reference Manual + +be written to the Parameter Registers. Please refer to 2.3.5 for mo[re detai](#_page18_x54.00_y318.92)ls on this command. + +Writing 16 to the Command Register will trigger, that the Modbus controller sends the PyroScience command SVS to the central microcontroller. Please refer to 2.3.10 for mor[e ](#_page21_x54.00_y584.92)details on this command. + +Writing 7777 to the Command Register will trigger a firmware reset, equivalent to a power cycle of the complete device. + +Writing 8888 to the Command Register will switch the Modbus microcontroller into a so called “transparent mode”, in which the Modbus microcontroller will passively forward any message in either direction. This way the user can communicate directly with the central microcontroller based on the PyroScience protocol as given in section 2.1. The transparent mode is terminated by sending the following 3 chars: ## + +IMPORTANT: During the transparent mode, the analog output is not operational! But the ![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.112.png)analog output can be configured. + +The Modbus protocol can be used with up to 247 devices connected to the same RS485 bus. However, the transparent mode does not work with a bus system. During the transparent mode must be only a single device connected e.g. by a RS485-USB adapter cable to a computer.![ref1] + +© PyroScience GmbH 53 + +![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.113.png) + +PyroScience Unified Protocol | Reference Manual + +CONTACT + +PyroScience GmbH Tel.: +49 (0)241 5183 2210 Kackertstr. 11![](Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.114.png) Fax: +49 (0)241 5183 2299 52072 Aachen info@pyroscience.com Deutschland www.pyroscience.com + +` `www.pyroscience.com + + +[ref1]: Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.004.png +[ref2]: Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.005.png +[ref3]: Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.056.png +[ref4]: Aspose.Words.00c05416-12bf-4790-98a5-09ba194fad73.067.png diff --git a/package.json b/package.json new file mode 100644 index 0000000..1507977 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "serial-debug", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "start": "ts-node src/index.ts" + }, + "dependencies": { + "serialport": "^10.5.0" + }, + "devDependencies": { + "typescript": "^5.8.2", + "ts-node": "^10.9.2" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..aaa79e6 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,325 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + serialport: + specifier: ^10.5.0 + version: 10.5.0 + devDependencies: + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.13.14)(typescript@5.8.2) + typescript: + specifier: ^5.8.2 + version: 5.8.2 + +packages: + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@serialport/binding-mock@10.2.2': + resolution: {integrity: sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==} + engines: {node: '>=12.0.0'} + + '@serialport/bindings-cpp@10.8.0': + resolution: {integrity: sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==} + engines: {node: '>=12.17.0 <13.0 || >=14.0.0'} + + '@serialport/bindings-interface@1.2.2': + resolution: {integrity: sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==} + engines: {node: ^12.22 || ^14.13 || >=16} + + '@serialport/parser-byte-length@10.5.0': + resolution: {integrity: sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-cctalk@10.5.0': + resolution: {integrity: sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-delimiter@10.5.0': + resolution: {integrity: sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-inter-byte-timeout@10.5.0': + resolution: {integrity: sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-packet-length@10.5.0': + resolution: {integrity: sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==} + engines: {node: '>=8.6.0'} + + '@serialport/parser-readline@10.5.0': + resolution: {integrity: sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-ready@10.5.0': + resolution: {integrity: sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-regex@10.5.0': + resolution: {integrity: sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-slip-encoder@10.5.0': + resolution: {integrity: sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==} + engines: {node: '>=12.0.0'} + + '@serialport/parser-spacepacket@10.5.0': + resolution: {integrity: sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==} + engines: {node: '>=12.0.0'} + + '@serialport/stream@10.5.0': + resolution: {integrity: sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==} + engines: {node: '>=12.0.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + serialport@10.5.0: + resolution: {integrity: sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==} + engines: {node: '>=12.0.0'} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + +snapshots: + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@serialport/binding-mock@10.2.2': + dependencies: + '@serialport/bindings-interface': 1.2.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@serialport/bindings-cpp@10.8.0': + dependencies: + '@serialport/bindings-interface': 1.2.2 + '@serialport/parser-readline': 10.5.0 + debug: 4.4.0 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 + transitivePeerDependencies: + - supports-color + + '@serialport/bindings-interface@1.2.2': {} + + '@serialport/parser-byte-length@10.5.0': {} + + '@serialport/parser-cctalk@10.5.0': {} + + '@serialport/parser-delimiter@10.5.0': {} + + '@serialport/parser-inter-byte-timeout@10.5.0': {} + + '@serialport/parser-packet-length@10.5.0': {} + + '@serialport/parser-readline@10.5.0': + dependencies: + '@serialport/parser-delimiter': 10.5.0 + + '@serialport/parser-ready@10.5.0': {} + + '@serialport/parser-regex@10.5.0': {} + + '@serialport/parser-slip-encoder@10.5.0': {} + + '@serialport/parser-spacepacket@10.5.0': {} + + '@serialport/stream@10.5.0': + dependencies: + '@serialport/bindings-interface': 1.2.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/node@22.13.14': + dependencies: + undici-types: 6.20.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + arg@4.1.3: {} + + create-require@1.1.1: {} + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + diff@4.0.2: {} + + make-error@1.3.6: {} + + ms@2.1.3: {} + + node-addon-api@5.1.0: {} + + node-gyp-build@4.8.4: {} + + serialport@10.5.0: + dependencies: + '@serialport/binding-mock': 10.2.2 + '@serialport/bindings-cpp': 10.8.0 + '@serialport/parser-byte-length': 10.5.0 + '@serialport/parser-cctalk': 10.5.0 + '@serialport/parser-delimiter': 10.5.0 + '@serialport/parser-inter-byte-timeout': 10.5.0 + '@serialport/parser-packet-length': 10.5.0 + '@serialport/parser-readline': 10.5.0 + '@serialport/parser-ready': 10.5.0 + '@serialport/parser-regex': 10.5.0 + '@serialport/parser-slip-encoder': 10.5.0 + '@serialport/parser-spacepacket': 10.5.0 + '@serialport/stream': 10.5.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + ts-node@10.9.2(@types/node@22.13.14)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.14 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + typescript@5.8.2: {} + + undici-types@6.20.0: {} + + v8-compile-cache-lib@3.0.1: {} + + yn@3.1.1: {} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..c3b6a9a --- /dev/null +++ b/src/index.ts @@ -0,0 +1,5 @@ +import { sendCommand } from "./serial"; + +sendCommand(); + + diff --git a/src/serial.ts b/src/serial.ts new file mode 100644 index 0000000..c9e87a9 --- /dev/null +++ b/src/serial.ts @@ -0,0 +1,112 @@ +import { SerialPort } from "serialport"; +import fs from 'fs'; + +import * as readline from "readline"; + +const config = fs.readFile(); + +// 开启命令行用户发送mea命令会发送command.measure + +export function sendCommand() { + const port = new SerialPort({ + path: config.port, + baudRate: config.baudRate, + }); + + // 创建readline接口 + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + prompt: "串口命令> " + }); + + // 监听串口数据 + port.on("data", (data) => { + const hexData = data.toString('hex').match(/.{1,2}/g)?.join(' ') || ''; + console.log(`收到原始数据: ${hexData}`); + + // 解析数据 + try { + parseResponse(data); + } catch (err: any) { + console.error(`解析数据错误: ${err.message}`); + } + }); + + // 解析响应数据 + function parseResponse(data: Buffer) { + // 检查数据长度是否足够 + if (data.length < 9) { + console.log("数据长度不足,无法解析温湿度信息"); + return; + } + + // 从响应中提取温度和湿度 + // 假设格式为: 01 04 04 XX XX XX XX XX XX + // 其中第4-5个字节是温度,第6-7个字节是湿度 + const responseHex = data.toString('hex').match(/.{1,2}/g) || []; + + // 检查响应格式 + if (responseHex.length >= 9 && responseHex[0] === '01' && responseHex[1] === '04') { + // 提取温度值(第4-5个字节) + const tempHex = `${responseHex[3]}${responseHex[4]}`; + // 提取湿度值(第6-7个字节) + const humidityHex = `${responseHex[5]}${responseHex[6]}`; + + // 转换成十进制 + const tempDecimal = parseInt(tempHex, 16) / 10; + const humidityDecimal = parseInt(humidityHex, 16) / 10; + + console.log(`🌡️ 温度: ${tempDecimal.toFixed(1)}°C`); + console.log(`💧 湿度: ${humidityDecimal.toFixed(1)}%`); + } else { + console.log("响应格式不符合预期,无法解析温湿度"); + } + } + + // 监听串口错误 + port.on("error", (err) => { + console.error(`串口错误: ${err.message}`); + }); + + // 串口打开成功 + port.on("open", () => { + console.log(`成功打开串口 ${config.port}`); + console.log("输入 'mea' 发送测量命令"); + console.log("输入 'exit' 退出程序"); + + rl.prompt(); + + // 处理用户输入 + rl.on("line", (line) => { + const input = line.trim().toLowerCase(); + + if (input === "mea") { + console.log("发送测量命令..."); + port.write(Buffer.from(command.measure.split(' ').map(hex => parseInt(hex, 16))), (err) => { + if (err) { + console.error(`发送命令错误: ${err.message}`); + } else { + console.log("测量命令已发送"); + } + }); + } else if (input === "exit") { + console.log("关闭串口并退出..."); + port.close(); + rl.close(); + process.exit(0); + } else if (input) { + console.log(`未知命令: ${input}`); + } + + rl.prompt(); + }); + + // 处理退出 + rl.on("close", () => { + console.log("再见!"); + port.close(); + process.exit(0); + }); + }); +} diff --git a/src/test/config.ts b/src/test/config.ts new file mode 100644 index 0000000..817c67b --- /dev/null +++ b/src/test/config.ts @@ -0,0 +1,12 @@ +export const config = { + port: "/dev/cu.usbserial-230", + baudRate: 9600, + dataBits: 8, + stopBits: 1, + parity: "none", + flowControl: false, +}; + +export const command = { + measure: '01 04 00 00 00 02 71 CB' +} \ No newline at end of file diff --git a/src/test/index.ts b/src/test/index.ts new file mode 100644 index 0000000..8b8fcee --- /dev/null +++ b/src/test/index.ts @@ -0,0 +1,3 @@ +import { sendCommand } from "./serial"; + +sendCommand(); diff --git a/src/test/serial.ts b/src/test/serial.ts new file mode 100644 index 0000000..cedb49e --- /dev/null +++ b/src/test/serial.ts @@ -0,0 +1,109 @@ +import { SerialPort } from "serialport"; +import { config, command } from "./config"; +import * as readline from "readline"; + +// 开启命令行用户发送mea命令会发送command.measure + +export function sendCommand() { + const port = new SerialPort({ + path: config.port, + baudRate: config.baudRate, + }); + + // 创建readline接口 + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + prompt: "串口命令> " + }); + + // 监听串口数据 + port.on("data", (data) => { + const hexData = data.toString('hex').match(/.{1,2}/g)?.join(' ') || ''; + console.log(`收到原始数据: ${hexData}`); + + // 解析数据 + try { + parseResponse(data); + } catch (err: any) { + console.error(`解析数据错误: ${err.message}`); + } + }); + + // 解析响应数据 + function parseResponse(data: Buffer) { + // 检查数据长度是否足够 + if (data.length < 9) { + console.log("数据长度不足,无法解析温湿度信息"); + return; + } + + // 从响应中提取温度和湿度 + // 假设格式为: 01 04 04 XX XX XX XX XX XX + // 其中第4-5个字节是温度,第6-7个字节是湿度 + const responseHex = data.toString('hex').match(/.{1,2}/g) || []; + + // 检查响应格式 + if (responseHex.length >= 9 && responseHex[0] === '01' && responseHex[1] === '04') { + // 提取温度值(第4-5个字节) + const tempHex = `${responseHex[3]}${responseHex[4]}`; + // 提取湿度值(第6-7个字节) + const humidityHex = `${responseHex[5]}${responseHex[6]}`; + + // 转换成十进制 + const tempDecimal = parseInt(tempHex, 16) / 10; + const humidityDecimal = parseInt(humidityHex, 16) / 10; + + console.log(`🌡️ 温度: ${tempDecimal.toFixed(1)}°C`); + console.log(`💧 湿度: ${humidityDecimal.toFixed(1)}%`); + } else { + console.log("响应格式不符合预期,无法解析温湿度"); + } + } + + // 监听串口错误 + port.on("error", (err) => { + console.error(`串口错误: ${err.message}`); + }); + + // 串口打开成功 + port.on("open", () => { + console.log(`成功打开串口 ${config.port}`); + console.log("输入 'mea' 发送测量命令"); + console.log("输入 'exit' 退出程序"); + + rl.prompt(); + + // 处理用户输入 + rl.on("line", (line) => { + const input = line.trim().toLowerCase(); + + if (input === "mea") { + console.log("发送测量命令..."); + port.write(Buffer.from(command.measure.split(' ').map(hex => parseInt(hex, 16))), (err) => { + if (err) { + console.error(`发送命令错误: ${err.message}`); + } else { + console.log("测量命令已发送"); + } + }); + } else if (input === "exit") { + console.log("关闭串口并退出..."); + port.close(); + rl.close(); + process.exit(0); + } else if (input) { + console.log(`未知命令: ${input}`); + } + + rl.prompt(); + }); + + // 处理退出 + rl.on("close", () => { + console.log("再见!"); + port.close(); + process.exit(0); + }); + }); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..904d43f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,113 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "libReplacement": true, /* Enable lib replacement. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}