// logic.cpp : Defines the entry point for the DLL application. // #include #define LOGIC_API extern "C" __declspec(dllexport) BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } LOGIC_API int Logic_state(int *pIn, int nums) { if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 2; } else if (nums >= 3) { return pIn[0]+pIn[1]+pIn[2] == 1 ? (pIn[0] ? 0 : (pIn[1] ? 1 : 2)) : 3; } return -1; } LOGIC_API int Logic_fire(int *pIn, int nums) { if (nums >= 3) { return pIn[0]+pIn[1]+pIn[2] == 0 ? 0 : (pIn[0]+pIn[1]+pIn[2] == 1 ? (pIn[0] ? 1 : (pIn[1] ? 2 : 3)) : 4); } return -1; } LOGIC_API int Logic_alarm(int *pIn, int nums) { if (nums > 0) { for (int i=0; i < nums; i++) { if (pIn[i]) return 1; } return 0; } return -1; } LOGIC_API int Logic_animation(int *pIn, int nums) { if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 2; } else if (nums >= 3) { return pIn[0]+pIn[1]+pIn[2] == 1 ? (pIn[0] ? 0 : (pIn[1] ? 2 : 1)) : 3; } return -1; } LOGIC_API int Logic_stateN(int *pIn, int nums)//优先级自左向右增高,高优先级状态覆盖其他优先级状态20180709 { if (nums > 0) { for (int i=0; i < nums; i++) { if (pIn[nums-1-i]) return nums-i; } return 0; } return -1; } LOGIC_API int Logic_state_PSCADA(int *pIn, int nums)//双位状态+通讯20180713 { if (nums >= 2) return pIn[1] == 0 ? pIn[0] : 2; else return pIn[0]; return -1; } LOGIC_API int Logic_stateN2(int *pIn, int nums)//针对风机外框,风机运行状态有两点的 { int Flag=0; if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 4; } else if (nums > 2) { for (int i=2; i < nums; i++) { if (pIn[nums-i+1]) { Flag=1; return nums-i+1; } } if (Flag==0) { return pIn[0] != pIn[1] ? pIn[1] : 4; } return 0; } return -1; } LOGIC_API int Logic_stateN3(int *pIn, int nums)//针对风机外框,风机运行状态有三点的 { int Flag=0; if (nums == 3) { return pIn[0]+pIn[1]+pIn[2] == 1 ? (pIn[0] ? 0 : (pIn[1] ? 1 : 1)) : 4; } else if (nums > 3) { for (int i=3; i < nums; i++) { if (pIn[nums-i+2]) { Flag=1; return nums-i+1; } } if (Flag==0) { return pIn[0]+pIn[1]+pIn[2] == 1 ? (pIn[0] ? 0 : (pIn[1] ? 1 : 1)) : 4; } return 0; } return -1; } //SHL4 TVF off==1 LOGIC_API int Logic4_state(int *pIn, int nums) { if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 2; } else if (nums >= 3) { if(pIn[1]+pIn[2]==0) return pIn[0] ? 0 : 3; return pIn[1]+pIn[2] == 1 ? (pIn[1] ? 2 : 1) : 3; } return -1; } LOGIC_API int Logic4_animation(int *pIn, int nums) { if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 2; } else if (nums >= 3) { if(pIn[1]+pIn[2]==0) return pIn[0] ? 0 : 3; return pIn[1]+pIn[2] == 1 ? (pIn[1] ? 2 : 1) : 3; } return -1; } LOGIC_API int Logic4_stateN3(int *pIn, int nums)//针对风机外框,风机运行状态有三点的 { int Flag=0; if (nums == 3) { if(pIn[1]+pIn[2]==0) return pIn[0] ? 0 : 4; return pIn[1]+pIn[2] == 1 ? (pIn[1] ? 1 : 1) : 4; } else if (nums > 3) { for (int i=3; i < nums; i++) { if (pIn[nums-i+2]) { Flag=1; return nums-i+1; } } if (Flag==0) { if(pIn[1]+pIn[2]==0) return pIn[0] ? 0 : 4; return pIn[1]+pIn[2] == 1 ? (pIn[1] ? 1 : 1) : 4; } return 0; } return -1; } LOGIC_API int Logic4_stateNis1(int *pIn, int nums) { int i=0,sum=0,index=0; if (nums == 2) { return pIn[0] != pIn[1] ? pIn[1] : 2; } else if (nums >= 3) { for (i=0; i < nums; i++) { sum+=pIn[i]; if(pIn[i]>0)index=i; } if(sum!=1) return nums; else return index; } return -1; }