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