From 868daf94f29ce1ffdd799a68c07bb668cd373bcd Mon Sep 17 00:00:00 2001
From: HP\李良庭 <liliangting@lanpucloud.cn:1111>
Date: 星期二, 08 七月 2025 11:49:03 +0800
Subject: [PATCH] 提交分辨率自适应版本V3.1.0.1500

---
 Actuator_src_2.0.3/ActuatorDemo/ActuatorDemo.cpp |  461 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 461 insertions(+), 0 deletions(-)

diff --git a/Actuator_src_2.0.3/ActuatorDemo/ActuatorDemo.cpp b/Actuator_src_2.0.3/ActuatorDemo/ActuatorDemo.cpp
new file mode 100644
index 0000000..b11beb3
--- /dev/null
+++ b/Actuator_src_2.0.3/ActuatorDemo/ActuatorDemo.cpp
@@ -0,0 +1,461 @@
+锘�// ActuatorDemo.cpp : 姝ゆ枃浠跺寘鍚� "main" 鍑芥暟銆傜▼搴忔墽琛屽皢鍦ㄦ澶勫紑濮嬪苟缁撴潫銆�
+//
+
+#include <iostream>
+#include "../Actuator//Actuator.h"
+
+//绯绘暟
+const double coef[5] = { -6.204673384923,0.025161776479,-0.000014765722,0.000000003440,0 };
+
+void ExeTest()
+{
+    void* hPlcDev = CreatePlcDevice("192.168.0.10", 502);
+    void* hWrDev = CreateWrDevice("COM1", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hPlcDev) ret = ConnectDevice(hPlcDev);
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    char ch = 0;
+
+    while ('c' != (ch = getchar()))  //鎸� c 閫�鍑鸿嚜鍔ㄦ娴�
+    {
+        //璇籔LC鐘舵�佸瓧
+        ret = ReadState(hPlcDev, &nState, &nGrainType);
+        if (ret <= 0)
+        {
+            printf("璇诲彇PLC鐘舵�佸瓧寮傚父锛乗n");
+        }
+        else
+        {
+            //浠h〃璇诲彇鍒版暟鎹�
+            if (nGrainType > 0 && nState > 0)
+            {
+                //涓嬮潰鏄富娴佺▼鐨勫鐞�
+                switch (nState)
+                {
+                case READY_GRAIN: //绮鍝佺淇敼浜�
+                {
+                    //鍚戞按鍒嗕华鍙戠伯绉嶆洿鏀癸紝鍚姩鍑嗗
+                    ret = SendCommands(hWrDev, WR_READY, nGrainType, 20, 0);
+                    if (ret <= 0)
+                    {
+                        printf("绮鍝佺淇敼澶辫触锛佹按鍒嗕华鏁呴殰锛乗n");
+                        ret = ResponseState(hPlcDev, DEVICE_WR_FAULT);
+                    }
+                    else
+                    {
+                        printf("绮鍝佺淇敼鎴愬姛锛佸噯澶囧氨缁猏n");
+                        ret = ResponseState(hPlcDev, READY_FINISH);
+                    }
+
+                }
+                break;
+                case DETECT_START: //寮�濮嬫祴璇�
+                {
+                    ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0);
+                    if (ret <= 0)
+                    {
+                        printf("鎵ц妫�娴嬪け璐ワ紒\n");
+                        ret = ResponseState(hPlcDev, DEVICE_WR_FAULT);
+                    }
+                    else
+                    {
+                        unsigned short nDatas[10] = { 0 };
+                        unsigned short nSendData[3] = { 0 };
+
+                        //浠庢按鍒嗕华鍣ㄨ鍙栨暟鎹�
+                        ret = ReadDatas(hWrDev, nDatas);
+
+                        printf("鎵ц妫�娴嬫垚鍔燂紒\n");
+                        ret = ResponseState(hPlcDev, DETECT_FINISH);
+
+                        //璁$畻姘村垎鐜�
+                        double v = coef[0] +
+                            coef[1] * nDatas[0] +
+                            coef[2] * nDatas[0] * nDatas[0] +
+                            coef[3] * nDatas[0] * nDatas[0] * nDatas[0] +
+                            coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0];
+
+
+                        nSendData[0] = 0x01; // 绮鍝佺
+                        nSendData[1] = 100 * v; // 21.30% //鍚按鐜�
+                        nSendData[2] = 100 * nDatas[1] / 0.52; // 51.50; //瀹归噸姣�
+
+                        printf("Get Vals: wr:%f, weight:%f, temperatur:%f, humidity:%f",
+                            v,
+                            nDatas[1],
+                            nDatas[2] / 100.f,
+                            nDatas[3] / 100.f);
+
+                        ret = UploadData(hPlcDev, nSendData);
+                    }
+                }
+                break;
+                case DEVICE_WR_RESET: //澶嶄綅鍛戒护
+                {
+
+                    ret = SendCommands(hWrDev, WR_RESET, 0, 20, 0);
+                    if (ret <= 0)
+                    {
+                        printf("澶嶄綅澶辫触锛乗n");
+                        ret = ResponseState(hPlcDev, DEVICE_WR_FAULT);
+                    }
+                    else
+                    {
+                        printf("澶嶄綅鎴愬姛!\n");
+                    }
+                }
+                break;
+                default:
+                    break;
+                }
+            }
+        }
+    }
+
+    if (hPlcDev) Disconnect(hPlcDev);
+    if (hPlcDev) DestroyDevice(hPlcDev);
+    if (hWrDev) Disconnect(hWrDev);
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+
+//鎵嬪姩鍐欏弬鏁�
+void ExeWriteParam()
+{
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    ret = WriteParams(hWrDev, 10500, 12000, 50, 1, 1);
+    if (ret <= 0)
+        printf("涓嬪彂鍙傛暟澶辫触锛乗n");
+
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+void ExeManReady()
+{
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    ret = SendCommands(hWrDev, WR_READY, 0x01, 20, 0); //涓嬪彂纭
+
+    if (ret <= 0)
+        printf("鍑嗗澶辫触锛乗n");
+    else
+    {
+        printf("鍑嗗灏辩华锛孫K锛乗n");
+    }
+
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+//鎵嬪姩妫�娴�
+void ExeManTest()
+{
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0); //鎵ц鍚姩鍛戒护
+
+    if (ret <= 0)
+    {
+        printf("鎵ц妫�娴嬪け璐ワ紒\n");
+    }
+    else
+    {
+        unsigned short nDatas[10] = { 0 };
+
+        //浠庢按鍒嗕华鍣ㄨ鍙栨暟鎹�
+        ret = ReadDatas(hWrDev, nDatas);
+
+        //绗竴涓�间负鐢靛钩鍊硷紝鐢ㄦ潵璁$畻姘村垎鐜�
+        double v = coef[0] +
+            coef[1] * nDatas[0] +
+            coef[2] * nDatas[0] * nDatas[0] +
+            coef[3] * nDatas[0] * nDatas[0] * nDatas[0] +
+            coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0];
+
+        v = CalcValue(nDatas[0], coef[0], coef[1], coef[2], coef[3], coef[4]);
+
+        printf(" After Detection,");
+        printf(" %d %d %d %d", nDatas[0], nDatas[1], nDatas[2], nDatas[3]);
+        printf(" Water Rate:%lf", v);
+        printf(" \n");
+        printf("妫�娴嬫墽琛孫K!\n");
+
+    }
+
+
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+void DirectDetect(char nType)
+{
+
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = nType-48;
+    int ret = 0;
+
+    if (nGrainType < 1 && nGrainType>4)
+    {
+        printf("绮淇℃伅闈炴硶!\r\n");
+        return;
+    }
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+
+    ret = SendCommands(hWrDev, WR_GOODS, nGrainType); //鎵ц鍚姩鍛戒护
+    if (ret <= 0)
+    {
+        printf("涓嬪彂绮淇℃伅澶辫触锛乗n");
+    }
+    else
+    {
+        ret = SendCommands(hWrDev, WR_DETECT, 0, 30, 0); //鎵ц鍚姩鍛戒护
+
+        if (ret <= 0)
+        {
+            printf("鎵ц妫�娴嬪け璐ワ紒\n");
+        }
+        else
+        {
+            unsigned short nDatas[10] = { 0 };
+
+            //浠庢按鍒嗕华鍣ㄨ鍙栨暟鎹�
+            ret = ReadDatas(hWrDev, nDatas);
+
+            //绗竴涓�间负鐢靛钩鍊硷紝鐢ㄦ潵璁$畻姘村垎鐜�
+            double v = coef[0] +
+                coef[1] * nDatas[0] +
+                coef[2] * nDatas[0] * nDatas[0] +
+                coef[3] * nDatas[0] * nDatas[0] * nDatas[0] +
+                coef[4] * nDatas[0] * nDatas[0] * nDatas[0] * nDatas[0];
+
+            v = CalcValue(nDatas[0], coef[0], coef[1], coef[2], coef[3], coef[4]);
+
+            printf(" After Detection,");
+            printf(" Orig Val: %d %d %d %d", nDatas[0], nDatas[1], nDatas[2], nDatas[3]);
+            printf(" -->Water Rate:%lf", v);
+            printf(" \n");
+            printf("妫�娴嬫墽琛孫K!\n");
+
+        }
+
+    }
+
+
+
+    if (hWrDev) DestroyDevice(hWrDev);
+
+}
+//
+void ExeVerifyTest()
+{
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    ret = SendCommands(hWrDev, WR_VERIFY, 0, 30, 0); //鎵ц鏍″噯鍛戒护
+
+    if (ret <= 0)
+    {
+        printf("鏍″噯鎵ц澶辫触锛乗n");
+    }
+    else
+    {
+        unsigned short nVcc = 0;
+
+        //浠庢按鍒嗕华鍣ㄨ鍙栨暟鎹�
+        ret = ReadVcc(hWrDev, &nVcc);
+
+        printf(" Detected Val: %d", nVcc);
+        printf(" \n");
+        printf("鏍″噯鎵цOK!\n");
+    }
+   
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+void ExeZero()
+{
+    void* hWrDev = CreateWrDevice("COM6", 115200, 'N', 8, 1);
+
+    unsigned short nState = 0;
+    unsigned short nGrainType = 0;
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+    ret = SendCommands(hWrDev, WR_RESET, 0, 15, 0); //涓嬪彂澶嶄綅
+
+    if (ret <= 0)
+    {
+        printf("澶嶄綅澶辫触锛乗n");
+    }
+    else
+    {
+        printf("澶嶄綅鎴愬姛锛乗n");
+    }
+
+
+
+
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+void ReadWeight()
+{
+    void* hWrDev = CreateWrDevice("COM1", 115200, 'N', 8, 1);
+
+    int ret = 0;
+
+    if (hWrDev) ret = ConnectDevice(hWrDev);
+
+
+    unsigned short nWeight = 0;
+
+    //浠庢按鍒嗕华鍣ㄨ鍙栨暟鎹�
+    ret = ReadWeight(hWrDev, &nWeight);
+
+    if (ret >= 0)
+    {
+        printf(" Weight Val: %d", nWeight);
+        printf(" \n");
+        printf("绉伴噸鎵цOK!\n");
+    }
+    else
+    {
+        printf("绉伴噸鎵ц澶辫触!\n");
+    }
+
+
+    if (hWrDev) DestroyDevice(hWrDev);
+}
+
+void TestLinearize()
+{
+    int nSampeCount = 12;
+    
+     float x[]={0,1,2,3,4,5,6,7,8,9,10,11}; //realval
+     float y[]={2506,2200,1846,1440,1004,548,79,-387,-847,-1288,-1700,-2066}; //input
+     double coef[5] = { 0 };
+
+     int ret = Linearize(x, y, coef, 2, nSampeCount);
+     if (ret > 0)
+     {
+         printf("Coef: %f, %f, %f, %f, %f\n", coef[0], coef[1], coef[2], coef[3], coef[4]);
+
+         float v = 3.0f;
+         printf("Input %lf, Cal Val:%lf\n", v,
+             (coef[0] +
+                 coef[1] * v +
+                 coef[2] * v * v +
+                 coef[3] * v * v * v +
+                 coef[4] * v * v * v * v)
+         );
+         
+     }
+
+}
+
+int main()
+{
+    std::cout << "Hello World!\n";
+
+    //double val = 11531998.626;
+    //unsigned char sval[32] = { 0 };
+
+    //memcpy(sval, &val, 8);
+
+    //unsigned char sv2[] = { 0x27, 0x31, 0x08, 0xd4, 0xdb, 0xfe, 0x65, 0x41 };
+    //val = *(double*)sv2;
+    //
+    //unsigned short sv3[] = { 0x3127, 0xd408, 0xfedb, 0x4165 };
+    //val = *(double*)sv3;
+
+    //unsigned short sv4[] = { 0x2731, 0x08d4, 0xdbfe, 0x6541 };
+    //val = *(double*)sv4;
+
+    //unsigned short sv5[] = { 0x4165, 0xfedb, 0xd408, 0x3127 };
+    //val = *(double*)sv5;
+
+    char ch = 0;
+    while ('x' != ( ch = getchar() )) //鎸� x 閫�鍑虹▼搴�
+    {
+        switch (ch)
+        {
+            case 'a': //鑷姩娴嬭瘯
+                ExeTest();
+                break;
+            case 'p': //鍚戞按浠戒华涓嬪彂鍙傛暟
+                ExeWriteParam();
+                break;
+            case 'r': //鎵嬪姩妫�娴�,闇�瑕佸噯澶�
+                ExeManReady();
+                break;
+            case 'd': //鎵嬪姩妫�娴嬶紝涓嶈鍑嗗
+                ExeManTest();
+                break;
+            case 'v':  //鏍″噯
+                ExeVerifyTest();
+                break;
+            case 'z':  //澶嶄綅娓呴浂
+                ExeZero();
+                break;
+            case 'l': //鎷熷悎娴嬭瘯
+                TestLinearize();
+                break;
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+                DirectDetect(ch);
+                break;
+            case 'w':
+                ReadWeight();
+                break;
+            default:
+                break;
+        }
+
+    }
+    
+}
+
+// 杩愯绋嬪簭: Ctrl + F5 鎴栬皟璇� >鈥滃紑濮嬫墽琛�(涓嶈皟璇�)鈥濊彍鍗�
+// 璋冭瘯绋嬪簭: F5 鎴栬皟璇� >鈥滃紑濮嬭皟璇曗�濊彍鍗�
+
+// 鍏ラ棬浣跨敤鎶�宸�: 
+//   1. 浣跨敤瑙e喅鏂规璧勬簮绠$悊鍣ㄧ獥鍙f坊鍔�/绠$悊鏂囦欢
+//   2. 浣跨敤鍥㈤槦璧勬簮绠$悊鍣ㄧ獥鍙h繛鎺ュ埌婧愪唬鐮佺鐞�
+//   3. 浣跨敤杈撳嚭绐楀彛鏌ョ湅鐢熸垚杈撳嚭鍜屽叾浠栨秷鎭�
+//   4. 浣跨敤閿欒鍒楄〃绐楀彛鏌ョ湅閿欒
+//   5. 杞埌鈥滈」鐩��>鈥滄坊鍔犳柊椤光�濅互鍒涘缓鏂扮殑浠g爜鏂囦欢锛屾垨杞埌鈥滈」鐩��>鈥滄坊鍔犵幇鏈夐」鈥濅互灏嗙幇鏈変唬鐮佹枃浠舵坊鍔犲埌椤圭洰
+//   6. 灏嗘潵锛岃嫢瑕佸啀娆℃墦寮�姝ら」鐩紝璇疯浆鍒扳�滄枃浠垛��>鈥滄墦寮�鈥�>鈥滈」鐩�濆苟閫夋嫨 .sln 鏂囦欢

--
Gitblit v1.9.3